X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=lib%2Fsystem%2Fsystem.c;h=ff4ae991221a9db0630a446194bbaed5f5cef3ab;hp=65bd6bf57bc5391cd6bc91aec5f8b48a9f553987;hb=823958fbbd17ab2c1b2a1779eb10351ca0a668c6;hpb=322a024f44bd6c2d665010588d74a681c9703431 diff --git a/lib/system/system.c b/lib/system/system.c index 65bd6bf..ff4ae99 100644 --- a/lib/system/system.c +++ b/lib/system/system.c @@ -17,13 +17,17 @@ #include "system.h" const struct pb_system_apps pb_system_apps = { - .cp = "/bin/cp", - .kexec = "/sbin/kexec", - .mount = "/bin/mount", - .sftp = "/usr/bin/sftp", - .tftp = "/usr/bin/tftp", - .umount = "/bin/umount", - .wget = "/usr/bin/wget", + .prefix = PREFIX, + .cp = HOST_PROG_CP, + .kexec = HOST_PROG_KEXEC, + .mount = HOST_PROG_MOUNT, + .shutdown = HOST_PROG_SHUTDOWN, + .sftp = HOST_PROG_SFTP, + .tftp = HOST_PROG_TFTP, + .umount = HOST_PROG_UMOUNT, + .wget = HOST_PROG_WGET, + .ip = HOST_PROG_IP, + .udhcpc = HOST_PROG_UDHCPC, }; int pb_mkdir_recursive(const char *dir) @@ -101,9 +105,10 @@ int pb_rmdir_recursive(const char *base, const char *dir) /** * pb_run_cmd - Run the supplied command. * @cmd_argv: An argument list array for execv. + * @wait: Wait for the child process to complete before returning. + * @dry_run: Don't actually fork and exec. */ - -int pb_run_cmd(const char *const *cmd_argv) +int pb_run_cmd(const char *const *cmd_argv, int wait, int dry_run) { #if defined(DEBUG) enum {do_debug = 1}; @@ -116,14 +121,19 @@ int pb_run_cmd(const char *const *cmd_argv) if (do_debug) { const char *const *p = cmd_argv; - pb_log("%s: ", __func__); + pb_log("%s: %s", __func__, (dry_run ? "(dry-run) " : "")); + while (*p) { pb_log("%s ", *p); p++; } pb_log("\n"); } else - pb_log("%s: %s\n", __func__, cmd_argv[0]); + pb_log("%s: %s%s\n", __func__, (dry_run ? "(dry-run) " : ""), + cmd_argv[0]); + + if (dry_run) + return 0; pid = fork(); @@ -132,6 +142,7 @@ int pb_run_cmd(const char *const *cmd_argv) return -1; } + if (pid == 0) { int log = fileno(pb_log_get_stream()); @@ -139,7 +150,6 @@ int pb_run_cmd(const char *const *cmd_argv) status = dup2(log, STDOUT_FILENO); assert(status != -1); - status = dup2(log, STDERR_FILENO); assert(status != -1); @@ -148,6 +158,9 @@ int pb_run_cmd(const char *const *cmd_argv) exit(EXIT_FAILURE); } + if (!wait && !waitpid(pid, &status, WNOHANG)) + return 0; + if (waitpid(pid, &status, 0) == -1) { pb_log("%s: waitpid failed: %s\n", __func__, strerror(errno));