#include <mntent.h>
#include <sys/stat.h>
#include <sys/wait.h>
+#include <sys/mount.h>
#include <talloc/talloc.h>
#include <list/list.h>
goto err_free;
}
- rc = process_run_simple(dev, pb_system_apps.mount,
- dev->device_path, dev->mount_path,
- "-t", fstype, "-o", "ro", NULL);
+ pb_log("mounting device %s read-only\n", dev->device_path);
+ errno = 0;
+ rc = mount(dev->device_path, dev->mount_path, fstype,
+ MS_RDONLY | MS_SILENT, "");
if (!rc) {
dev->mounted = true;
dev->mounted_rw = false;
return 0;
}
- pb_log("couldn't mount device %s: mount failed with rc %d\n",
- dev->device_path, rc);
+ pb_log("couldn't mount device %s: mount failed: %s\n",
+ dev->device_path, strerror(errno));
pb_rmdir_recursive(mount_base(), dev->mount_path);
err_free:
static int umount_device(struct discover_device *dev)
{
- int status;
+ int rc;
if (!dev->mounted || !dev->unmount)
return 0;
- status = process_run_simple(dev, pb_system_apps.umount,
- dev->mount_path, NULL);
-
- if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
+ pb_log("unmounting device %s\n", dev->device_path);
+ rc = umount(dev->mount_path);
+ if (rc)
return -1;
dev->mounted = false;
if (dev->mounted_rw)
return 0;
- rc = process_run_simple(dev, pb_system_apps.mount, dev->mount_path,
- "-o", "remount,rw", NULL);
+ pb_log("remounting device %s read-write\n", dev->device_path);
+ rc = mount(dev->device_path, dev->mount_path, "",
+ MS_REMOUNT | MS_SILENT, "");
if (rc)
return -1;
if (!release)
return;
- process_run_simple(dev, pb_system_apps.mount, dev->mount_path,
- "-o", "remount,ro", NULL);
+ pb_log("remounting device %s read-only\n", dev->device_path);
+ mount(dev->device_path, dev->mount_path, "",
+ MS_REMOUNT | MS_RDONLY | MS_SILENT, "");
dev->mounted_rw = false;
}