*/
+#define _GNU_SOURCE
#include "watchdog.h"
#include "sysupgrade.h"
#include <ctype.h>
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <libubox/blobmsg.h>
-void sysupgrade_exec_upgraded(const char *prefix, char *path, char *command,
+void sysupgrade_exec_upgraded(const char *prefix, char *path,
+ const char *backup, char *command,
struct blob_attr *options)
{
char *wdt_fd = watchdog_fd();
setenv("WDTFD", wdt_fd, 1);
}
+ if (backup)
+ setenv("UPGRADE_BACKUP", backup, 1);
+
blobmsg_for_each_attr(option, options, rem) {
const char *prefix = "UPGRADE_OPT_";
char value[11];
execvp(argv[0], argv);
/* Cleanup on failure */
- fprintf(stderr, "Failed to exec upgraded.\n");
+ fprintf(stderr, "Failed to exec upgraded: %s\n", strerror(-errno));
unsetenv("WDTFD");
watchdog_set_cloexec(true);
ret = chroot(".");