+ unsigned int i, lines_total, prev_total, count;
+ char **ret;
+ const char *reasoning;
+ char *why = NULL;
+
+ if (!prev)
+ return NULL;
+
+ /* If it looks internal, put prev at start. */
+ if (looks_internal(lines, &why)) {
+ count = 0;
+ reasoning = "seemed to belong inside a function";
+ } else {
+ /* Try inserting in first elided position */
+ for (count = 0; lines[count]; count++) {
+ if (strcmp(lines[count], "...") == 0)
+ break;
+ }
+ if (!lines[count]) {
+ /* Try at start anyway? */
+ count = 0;
+ reasoning = "didn't seem to belong inside"
+ " a function, so we prepended the previous"
+ " example";
+ } else {
+ reasoning = "didn't seem to belong inside"
+ " a function, so we put the previous example"
+ " at the first ...";
+
+ count++;
+ }
+ }
+
+ for (i = 0; lines[i]; i++);
+ lines_total = i;
+
+ for (i = 0; prev[i]; i++);
+ prev_total = i;
+
+ ret = talloc_array(ctx, char *, 1 +lines_total + prev_total + 1);
+ ret[0] = talloc_asprintf(ret, "/* The example %s, thus %s */\n",
+ why, reasoning);
+ memcpy(ret+1, lines, count * sizeof(ret[0]));
+ memcpy(ret+1 + count, prev, prev_total * sizeof(ret[0]));
+ memcpy(ret+1 + count + prev_total, lines + count,
+ (lines_total - count + 1) * sizeof(ret[0]));
+ return ret;
+}
+
+/* Only handles very simple comments. */
+static char *strip_comment(const void *ctx, const char *orig_line)
+{
+ char *p, *ret = talloc_strdup(ctx, orig_line);
+
+ p = strstr(ret, "/*");
+ if (!p)
+ p = strstr(ret, "//");
+ if (p)
+ *p = '\0';
+ return ret;
+}
+
+static char *mangle(struct manifest *m, char **lines)
+{
+ char *ret, *use_funcs = NULL, *why;