+
+#ifndef PETITBOOT_TEST
+static int mount_device(struct discover_device *dev)
+{
+ int rc;
+
+ if (!dev->device_path)
+ return -1;
+
+ if (!dev->mount_path)
+ dev->mount_path = join_paths(dev, mount_base(),
+ dev->device_path);
+
+ if (pb_mkdir_recursive(dev->mount_path))
+ pb_log("couldn't create mount directory %s: %s\n",
+ dev->mount_path, strerror(errno));
+
+ rc = process_run_simple(dev, pb_system_apps.mount,
+ dev->device_path, dev->mount_path,
+ "-o", "ro", NULL);
+
+ if (!rc)
+ return 0;
+
+ /* Retry mount without ro option. */
+ rc = process_run_simple(dev, pb_system_apps.mount,
+ dev->device_path, dev->mount_path, NULL);
+
+ if (!rc)
+ return 0;
+
+ pb_rmdir_recursive(mount_base(), dev->mount_path);
+ return -1;
+}
+
+static int umount_device(struct discover_device *dev)
+{
+ int status;
+
+ if (!dev->mount_path)
+ return 0;
+
+ status = process_run_simple(dev, pb_system_apps.umount,
+ dev->mount_path, NULL);
+
+ if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
+ return -1;
+
+ pb_rmdir_recursive(mount_base(), dev->mount_path);
+
+ return 0;
+}
+#else
+
+static int umount_device(struct discover_device *dev __attribute__((unused)))
+{
+ return 0;
+}
+
+static int __attribute__((unused)) mount_device(
+ struct discover_device *dev __attribute__((unused)))
+{
+ return 0;
+}
+
+#endif
+