X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Ftools.c;h=eeaff6f17f644233f7aa1772ab27c69aad69f81f;hp=16246593b8b7561534df56f7eb7cd533f884c8b0;hb=fcf6cedb90d4a39bb0876abc597c82580a16ec43;hpb=0f66da713a750c995bb59452a95f4a71fdd8a58c diff --git a/tools/tools.c b/tools/tools.c index 16246593..eeaff6f1 100644 --- a/tools/tools.c +++ b/tools/tools.c @@ -131,7 +131,7 @@ char *run_with_timeout(const void *ctx, const char *cmd, *timeout_ms = 0; else *timeout_ms -= ms; - + close(p[0]); if (tools_verbose) { printf("%s", ret); printf("Finished: %u ms, %s %u\n", ms, @@ -143,35 +143,35 @@ char *run_with_timeout(const void *ctx, const char *cmd, return ret; } -/* Returns output if command fails. */ -char *run_command(const void *ctx, unsigned int *time_ms, const char *fmt, ...) +/* Tallocs *output off ctx; return false if command fails. */ +bool run_command(const void *ctx, unsigned int *time_ms, char **output, + const char *fmt, ...) { va_list ap; - char *cmd, *contents; + char *cmd; bool ok; unsigned int default_time = default_timeout_ms; if (!time_ms) time_ms = &default_time; - else if (*time_ms == 0) - return talloc_strdup(ctx, "\n== TIMED OUT ==\n"); + else if (*time_ms == 0) { + *output = talloc_strdup(ctx, "\n== TIMED OUT ==\n"); + return false; + } va_start(ap, fmt); cmd = talloc_vasprintf(ctx, fmt, ap); va_end(ap); - contents = run_with_timeout(ctx, cmd, &ok, time_ms); - if (ok) { - talloc_free(contents); - return NULL; - } - - if (!contents) + *output = run_with_timeout(ctx, cmd, &ok, time_ms); + if (ok) + return true; + if (!*output) err(1, "Problem running child"); if (*time_ms == 0) - contents = talloc_asprintf_append(contents, - "\n== TIMED OUT ==\n"); - return contents; + *output = talloc_asprintf_append(*output, + "\n== TIMED OUT ==\n"); + return false; } static int unlink_all(char *dir) @@ -213,7 +213,7 @@ char *temp_dir(const void *ctx) char *maybe_temp_file(const void *ctx, const char *extension, bool keep, const char *srcname) { - size_t baselen; + unsigned baselen; char *f, *suffix = talloc_strdup(ctx, ""); struct stat st; unsigned int count = 0;