* 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);
  * 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);
 
 #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[])