Welcome to the CHICKEN Scheme pasting service

char** added by andyjpb on Wed Sep 12 15:00:54 2012

; char** create_string_list(int n)
(define create-string-list (foreign-lambda (c-pointer c-pointer) "create_string_list" int))

; void free_string_list(char** p, int n)
(define free-string-list (foreign-lambda void "free_string_list" (c-pointer c-pointer) int))

; void insert_string(char** l, int n, char* s)
(define insert-string (foreign-lambda void "insert_string" (c-pointer c-pointer) int c-string))

; void inspect_string_list(void* lv, int n) {
(define inspect-string-list (foreign-lambda void "inspect_string_list" (c-pointer c-pointer) int))



void* create_string_list(int n) {
        if (n > 0) {
                return calloc(n+1, sizeof(char*)); /* Extra one for NULL */
        } else {
                return NULL;
        }

}

void free_string_list(void* pv, int n) {
        int i;
        char** p = (char**)(pv);

        for (i = 0; i <= n; i++) { /* Free the extra one incase it got used. */
                if (p[i]) free(p[i]);
        }
        free(p);
}

void insert_string(void* lv, int n, char* s) {
        char** l = (char**)(lv);

        l[n] = strdup((const char*)(s));
}

void inspect_string_list(void* lv, int n) {
        int i;
        char** l = (char**)(lv);

        for (i = 0; i < n; i++) {
                printf("%d: <%s>\n", i, l[i]);
        }
        if (l[n])
                printf("Not NULL terminated!\n");
        else
                printf("NULL terminated!\n");

}

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
What's the R5RS procedure to access the first element of a pair?
Visually impaired? Let me spell it for you (wav file) download WAV