]> git.ozlabs.org Git - petitboot/blobdiff - discover/paths.c
discover/paths: Add stdout callback parameter for load_url_async()
[petitboot] / discover / paths.c
index 1269dded35b73960c6b3d51c00efcd1b6e6aaafa..ad42b5b7760858e7cd3ab6d7217d855e91b72f15 100644 (file)
@@ -47,6 +47,7 @@ char *join_paths(void *alloc_ctx, const char *a, const char *b)
        return full_path;
 }
 
+#ifndef PETITBOOT_TEST
 
 static char *local_name(void *ctx)
 {
@@ -369,7 +370,8 @@ static void load_local(struct load_task *task)
  */
 
 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;
@@ -382,12 +384,21 @@ struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
        task->async = async_cb != NULL;
        task->result = talloc_zero(ctx, struct load_url_result);
        task->result->task = task;
+       task->result->url = url;
        task->process = process_create(task);
        if (task->async) {
                task->async_cb = async_cb;
                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) {
@@ -428,7 +439,7 @@ struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
 
 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)
@@ -449,3 +460,33 @@ void load_url_async_cancel(struct load_url_result *res)
        res->status = LOAD_CANCELLED;
        process_stop_async(task->process);
 }
+
+#else
+
+static void __attribute__((unused)) load_local(
+               struct load_task *task __attribute__((unused)))
+{
+}
+static void __attribute__((unused)) load_wget(
+               struct load_task *task __attribute__((unused)),
+               int flags __attribute__((unused)))
+{
+}
+static void __attribute__((unused)) load_tftp(
+               struct load_task *task __attribute__((unused)))
+{
+}
+static void __attribute__((unused)) load_sftp(
+               struct load_task *task __attribute__((unused)))
+{
+}
+static void __attribute__((unused)) load_nfs(
+               struct load_task *task __attribute__((unused)))
+{
+}
+static void __attribute__((unused)) load_url_process_exit(
+               struct process *process __attribute__((unused)))
+{
+}
+
+#endif