if (!url)
return 0;
- *result = load_url_async(task, url, boot_process, task);
+ *result = load_url_async(task, url, boot_process, task, NULL,
+ task->status_arg);
if (!*result) {
update_status(task->status_fn, task->status_arg,
STATUS_ERROR, _("Error loading %s"), name);
*/
struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
- load_url_complete async_cb, void *async_data)
+ load_url_complete async_cb, void *async_data,
+ waiter_cb stdout_cb, void *stdout_data)
{
struct load_url_result *result;
struct load_task *task;
task->async_data = async_data;
task->process->exit_cb = load_url_process_exit;
task->process->data = task;
+ task->process->stdout_cb = stdout_cb;
+ task->process->stdout_data = stdout_data;
+ }
+
+ /* Make sure we save output for any task that has a custom handler */
+ if (task->process->stdout_cb) {
+ task->process->add_stderr = true;
+ task->process->keep_stdout = true;
}
switch (url->scheme) {
struct load_url_result *load_url(void *ctx, struct pb_url *url)
{
- return load_url_async(ctx, url, NULL, NULL);
+ return load_url_async(ctx, url, NULL, NULL, NULL, NULL);
}
void load_url_async_cancel(struct load_url_result *res)
#define PATHS_H
#include <url/url.h>
+#include <waiter/waiter.h>
+#include <process/process.h>
/**
* Utility function for joining two paths. Adds a / between a and b if
/* Load a (potentially remote) file, and return a guaranteed-local name */
struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
- load_url_complete complete, void *data);
+ load_url_complete complete, void *data,
+ waiter_cb stdout_cb, void *stdout_data);
/* Cancel a pending load */
void load_url_async_cancel(struct load_url_result *res);
if (!url)
continue;
- if (load_url_async(conf, url, pxe_conf_parse_cb, conf))
+ if (load_url_async(conf, url, pxe_conf_parse_cb, conf,
+ NULL, NULL))
break;
}
/* we have a complete URL; use this and we're done. */
result = load_url_async(conf->dc, conf->dc->conf_url,
- pxe_conf_parse_cb, conf);
+ pxe_conf_parse_cb, conf, NULL, ctx);
if (!result) {
pb_log("load_url_async fails for %s\n",
dc->conf_url->path);
}
struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
- load_url_complete async_cb, void *async_data)
+ load_url_complete async_cb, void *async_data,
+ waiter_cb stdout_cb, void *stdout_data)
{
struct conf_context *conf = async_data;
struct parser_test *test = conf->dc->test_data;
struct test_file *file;
int fd;
+ /* Ignore the stdout callback for tests */
+ (void)stdout_cb;
+ (void)stdout_data;
+
fd = mkstemp(tmp);
if (fd < 0)