grab_file: don't use str_talloc for tests.
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 10 Jun 2014 05:09:26 +0000 (14:39 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 10 Jun 2014 05:09:26 +0000 (14:39 +0930)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/grab_file/_info
ccan/grab_file/grab_file.h
ccan/grab_file/test/run-grab.c

index 1f6e00d73067d7fb94fc1d0130b4ee3d67dd0499..1db4c2956f99d7b164673ad08598028b926f7c80 100644 (file)
@@ -48,10 +48,6 @@ int main(int argc, char *argv[])
                printf("ccan/noerr\n");
                return 0;
        }
-       if (strcmp(argv[1], "testdepends") == 0) {
-               printf("ccan/str_talloc\n");
-               return 0;
-       }
 
        return 1;
 }
index 96381875781e6db100876b3ee9a0ce8052b7a19d..bcd728e610a2e7cdc342f4585f8f14a1b8f5c883 100644 (file)
  * byte after the end of the content will always be NUL.
  *
  * Example:
- *     #include <ccan/str_talloc/str_talloc.h>
- *     #include <ccan/talloc/talloc.h>
- *     ...
- *     // Return all of standard input, as lines.
- *     static char **read_stdin_as_lines(void)
+ *     // Return the first line.
+ *     static char *read_stdin_firstline(void)
  *     {
- *             char **lines, *all;
+ *             char *all, *nl;
  *
  *             all = grab_fd(NULL, 0, NULL);
  *             if (!all)
  *                     return NULL;
- *             lines = strsplit(NULL, all, "\n");
- *             talloc_free(all);
- *             return lines;
+ *             nl = strchr(all, '\n');
+ *             if (nl)
+ *                     *nl = '\0';
+ *             return all;
  *     }
  */
 void *grab_fd(const void *ctx, int fd, size_t *size);
@@ -45,17 +43,17 @@ void *grab_fd(const void *ctx, int fd, size_t *size);
  * after the end of the content will always be NUL.
  *
  * Example:
- *     // Return all of a given file, as lines.
- *     static char **read_file_as_lines(const char *filename)
+ *     static char *read_file_firstline(const char *filename)
  *     {
- *             char **lines, *all;
+ *             char *nl, *all;
  *
  *             all = grab_file(NULL, filename, NULL);
  *             if (!all)
  *                     return NULL;
- *             lines = strsplit(NULL, all, "\n");
- *             talloc_free(all);
- *             return lines;
+ *             nl = strchr(all, '\n');
+ *             if (nl)
+ *                     *nl = '\0';
+ *             return all;
  *     }
  */
 void *grab_file(const void *ctx, const char *filename, size_t *size);
index 060607d54fbd9dcb21fb85a4082dd689a0a82d20..c9f242609697423e38483af5b0181a5cd9b3fbc9 100644 (file)
@@ -7,7 +7,30 @@
 #include <sys/stat.h>
 #include <ccan/grab_file/grab_file.c>
 #include <ccan/tap/tap.h>
-#include <ccan/str_talloc/str_talloc.h>
+#include <string.h>
+
+static char **strsplit(const void *ctx, const char *string, const char *delims)
+{
+       char **lines = NULL;
+       unsigned int max = 64, num = 0;
+
+       lines = talloc_array(ctx, char *, max+1);
+
+       while (*string != '\0') {
+               unsigned int len = strcspn(string, delims);
+               lines[num] = talloc_array(lines, char, len + 1);
+               memcpy(lines[num], string, len);
+               lines[num][len] = '\0';
+               string += len;
+               string += strspn(string, delims) ? 1 : 0;
+               if (++num == max)
+                       lines = talloc_realloc(ctx, lines, char *, max*=2 + 1);
+       }
+       lines[num] = NULL;
+
+       /* Shrink, so talloc_get_size works */
+       return talloc_realloc(ctx, lines, char *, num+1);
+}
 
 int 
 main(int argc, char *argv[])