if (!c)
break;
+ fflush(stdout);
if (pipe(p) != 0)
err(1, "Pipe failed");
c->pid = fork();
tlist_for_each_safe(&running, c, next, list) {
if (FD_ISSET(c->output_fd, &in)) {
int old_len, len;
+ /* This length includes nul terminator! */
old_len = talloc_array_length(c->output);
c->output = talloc_realloc(c, c->output, char,
old_len + 1024);
- len = read(c->output_fd, c->output + old_len, 1024);
+ len = read(c->output_fd, c->output + old_len - 1, 1024);
if (len < 0)
err(1, "Reading from async command");
c->output = talloc_realloc(c, c->output, char,
old_len + len);
+ c->output[old_len + len - 1] = '\0';
if (len == 0) {
struct rusage ru;
wait4(c->pid, &c->status, 0, &ru);
talloc_free(c);
return (void *)ctx;
}
+
+/* Compile and link single C file, with object files, async. */
+void compile_and_link_async(const void *ctx, unsigned int time_ms,
+ const char *cfile, const char *ccandir,
+ const char *objs, const char *compiler,
+ const char *cflags,
+ const char *libs, const char *outfile)
+{
+ if (compile_verbose)
+ printf("Compiling and linking (async) %s\n", outfile);
+ run_command_async(ctx, time_ms,
+ "%s %s -I%s -o %s %s %s %s",
+ compiler, cflags,
+ ccandir, outfile, cfile, objs, libs);
+}