summaryrefslogtreecommitdiffstats
path: root/src/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.c')
-rw-r--r--src/lib.c26
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;
+}
+