upgraded: register stage2 process in uloop as intended
[project/procd.git] / upgraded / upgraded.c
index 303edb7..6bc5ad8 100644 (file)
@@ -12,6 +12,8 @@
  * GNU General Public License for more details.
  */
 
+#define _GNU_SOURCE
+
 #include <sys/reboot.h>
 
 #include <fcntl.h>
@@ -41,10 +43,10 @@ static void upgrade_proc_cb(struct uloop_process *proc, int ret)
 
 static void sysupgrade(char *path, char *command)
 {
-       char *args[] = { "/sbin/sysupgrade", "nand", NULL, NULL, NULL };
+       char *args[] = { "/lib/upgrade/stage2", NULL, NULL, NULL };
 
-       args[2] = path;
-       args[3] = command;
+       args[1] = path;
+       args[2] = command;
        upgrade_proc.cb = upgrade_proc_cb;
        upgrade_proc.pid = fork();
        if (!upgrade_proc.pid) {
@@ -56,6 +58,8 @@ static void sysupgrade(char *path, char *command)
                fprintf(stderr, "Failed to start sysupgrade\n");
                uloop_end();
        }
+
+       uloop_process_add(&upgrade_proc);
 }
 
 int main(int argc, char **argv)
@@ -81,14 +85,14 @@ int main(int argc, char **argv)
        }
        close(fd);
 
-       if (argc != 2 && argc != 3) {
+       if (argc != 3) {
                fprintf(stderr, "sysupgrade stage 2 failed, invalid command line\n");
                return -1;
        }
 
        uloop_init();
        watchdog_init(0);
-       sysupgrade(argv[1], (argc == 3) ? argv[2] : NULL);
+       sysupgrade(argv[1], argv[2]);
        uloop_run();
 
        reboot(RB_AUTOBOOT);