Browse Source

Backport from xs.

default 2 years ago
parent
commit
da7e57f4cc
4 changed files with 25 additions and 9 deletions
  1. 22 6
      xs.h
  2. 1 1
      xs_curl.h
  3. 1 1
      xs_glob.h
  4. 1 1
      xs_version.h

+ 22 - 6
xs.h

@@ -128,6 +128,10 @@ void *_xs_realloc(void *ptr, size_t size, const char *file, int line, const char
 
         fclose(f);
     }
+#else
+    (void)file;
+    (void)line;
+    (void)func;
 #endif
 
     return ndata;
@@ -669,26 +673,38 @@ int xs_list_in(char *list, const char *val)
 d_char *xs_join(char *list, const char *sep)
 /* joins a list into a string */
 {
-    d_char *s;
+    d_char *s = NULL;
     char *v;
     int c = 0;
-
-    s = xs_str_new(NULL);
+    int offset = 0;
+    int ssz = strlen(sep);
 
     while (xs_list_iter(&list, &v)) {
         /* refuse to join non-string values */
         if (xs_type(v) == XSTYPE_STRING) {
+            int sz;
+
             /* add the separator */
-            if (c != 0)
-                s = xs_str_cat(s, sep);
+            if (c != 0) {
+                s = xs_realloc(s, offset + ssz);
+                memcpy(s + offset, sep, ssz);
+                offset += ssz;
+            }
 
             /* add the element */
-            s = xs_str_cat(s, v);
+            sz = strlen(v);
+            s = xs_realloc(s, offset + sz);
+            memcpy(s + offset, v, sz);
+            offset += sz;
 
             c++;
         }
     }
 
+    /* null-terminate */
+    s = xs_realloc(s, _xs_blk_size(offset + 1));
+    s[offset] = '\0';
+
     return s;
 }
 

+ 1 - 1
xs_curl.h

@@ -71,7 +71,7 @@ static int _post_callback(char *buffer, size_t size,
     int sz = pd->size - pd->offset;
 
     /* if it's still bigger than the provided space, trim */
-    if (sz > size * nitems)
+    if (sz > (int) (size * nitems))
         sz = size * nitems;
 
     memcpy(buffer, pd->data + pd->offset, sz);

+ 1 - 1
xs_glob.h

@@ -21,7 +21,7 @@ d_char *xs_glob_n(const char *spec, int basename, int reverse, int max)
     if (glob(spec, 0, NULL, &globbuf) == 0) {
         int n;
 
-        if (max > globbuf.gl_pathc)
+        if (max > (int) globbuf.gl_pathc)
             max = globbuf.gl_pathc;
 
         for (n = 0; n < max; n++) {

+ 1 - 1
xs_version.h

@@ -1 +1 @@
-/* ae969c59232f4907369f10b84796456388fcf109 */
+/* a04f6c8482d42d4d972f5190ecbad5c0509531b4 */