#include <sys/stat.h>
#include <sys/wait.h>
+#include <pb-config/pb-config.h>
#include <talloc/talloc.h>
#include <list/list.h>
#include <log/log.h>
#include <types/types.h>
#include <system/system.h>
+#include <process/process.h>
#include <url/url.h>
#include "device-handler.h"
struct waitset *waitset;
struct waiter *timeout_waiter;
- bool default_enabled;
+ bool autoboot_enabled;
unsigned int sec_to_boot;
struct discover_boot_option *default_boot_option;
static int mount_device(struct discover_device *dev)
{
- const char *argv[6];
+ int rc;
if (!dev->device_path)
return -1;
pb_log("couldn't create mount directory %s: %s\n",
dev->mount_path, strerror(errno));
- argv[0] = pb_system_apps.mount;
- argv[1] = dev->device_path;
- argv[2] = dev->mount_path;
- argv[3] = "-o";
- argv[4] = "ro";
- argv[5] = NULL;
-
- if (pb_run_cmd(argv, 1, 0)) {
-
- /* Retry mount without ro option. */
+ rc = process_run_simple(dev, pb_system_apps.mount,
+ dev->device_path, dev->mount_path,
+ "-o", "ro", NULL);
- argv[0] = pb_system_apps.mount;
- argv[1] = dev->device_path;
- argv[2] = dev->mount_path;
- argv[3] = NULL;
+ if (!rc)
+ return 0;
- if (pb_run_cmd(argv, 1, 0))
- goto out_rmdir;
- }
+ /* Retry mount without ro option. */
+ rc = process_run_simple(dev, pb_system_apps.mount,
+ dev->device_path, dev->mount_path, NULL);
- return 0;
+ if (!rc)
+ return 0;
-out_rmdir:
pb_rmdir_recursive(mount_base(), dev->mount_path);
return -1;
}
static int umount_device(struct discover_device *dev)
{
int status;
- pid_t pid;
if (!dev->mount_path)
return 0;
- pid = fork();
- if (pid == -1) {
- pb_log("%s: fork failed: %s\n", __func__, strerror(errno));
- return -1;
- }
-
- if (pid == 0) {
- execl(pb_system_apps.umount, pb_system_apps.umount,
- dev->mount_path, NULL);
- exit(EXIT_FAILURE);
- }
-
- if (waitpid(pid, &status, 0) == -1) {
- pb_log("%s: waitpid failed: %s\n", __func__,
- strerror(errno));
- return -1;
- }
+ status = process_run_simple(dev, pb_system_apps.umount,
+ dev->mount_path, NULL);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
return -1;
handler->waitset = waitset;
handler->dry_run = dry_run;
handler->default_boot_option = NULL;
- handler->default_enabled = true;
+ handler->autoboot_enabled = config_get()->autoboot_enabled;
list_init(&handler->unresolved_boot_options);
/* set up our mount point base */
status.progress = -1;
status.detail = NULL;
status.message = talloc_asprintf(handler,
- "Booting %s in %d sec", opt->option->name, sec);
+ "Booting %s in %u sec", opt->option->name, sec);
discover_server_notify_boot_status(handler->server, &status);
if (handler->default_boot_option)
return;
- if (!handler->default_enabled)
+ if (!handler->autoboot_enabled)
return;
- pb_log("Boot option %s set as default\n", opt->option->id);
-
handler->default_boot_option = opt;
handler->sec_to_boot = DEFAULT_BOOT_TIMEOUT_SEC;
+
+ pb_log("Boot option %s set as default, timeout %u sec.\n",
+ opt->option->id, handler->sec_to_boot);
+
default_timeout(handler);
}
waiter_remove(handler->timeout_waiter);
handler->timeout_waiter = NULL;
- handler->default_enabled = false;
+ handler->autoboot_enabled = false;
/* we only send status if we had a default boot option queued */
if (!handler->default_boot_option)