Browse Source

grab_file: don't use str_talloc for tests.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 11 years ago
parent
commit
4c2395707d
3 changed files with 37 additions and 20 deletions
  1. 0 4
      ccan/grab_file/_info
  2. 13 15
      ccan/grab_file/grab_file.h
  3. 24 1
      ccan/grab_file/test/run-grab.c

+ 0 - 4
ccan/grab_file/_info

@@ -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;
 }

+ 13 - 15
ccan/grab_file/grab_file.h

@@ -15,20 +15,18 @@
  * 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);

+ 24 - 1
ccan/grab_file/test/run-grab.c

@@ -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[])