diff options
Diffstat (limited to 'src/lib.c')
-rw-r--r-- | src/lib.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/lib.c b/src/lib.c new file mode 100644 index 0000000..b6a5f3a --- /dev/null +++ b/src/lib.c @@ -0,0 +1,26 @@ +struct writefunc_string { + char *ptr; + size_t len; +}; +void init_writefunc_string(struct writefunc_string *s) { + s->len = 0; + s->ptr = malloc(s->len+1); + if (s->ptr == NULL) { + fprintf(stderr, "malloc() " DC_I18N_FAILED "\n"); + exit(EXIT_FAILURE); + } + s->ptr[0] = '\0'; +} +size_t writefunc(void *ptr, size_t size, size_t nmemb, struct writefunc_string *s) { + size_t new_len = s->len + size*nmemb; + s->ptr = realloc(s->ptr, new_len+1); + if (s->ptr == NULL) { + fprintf(stderr, "realloc() " DC_I18N_FAILED "\n"); + exit(EXIT_FAILURE); + } + memcpy(s->ptr+s->len, ptr, size*nmemb); + s->ptr[new_len] = '\0'; + s->len = new_len; + return size*nmemb; +} + |