ACTION_COPY_TO,
ACTION_DISCOVER,
} arg_action = ACTION_DISSECT;
-static const char *arg_image = NULL;
-static const char *arg_path = NULL;
+static char *arg_image = NULL;
+static char *arg_path = NULL;
static const char *arg_source = NULL;
static const char *arg_target = NULL;
static DissectImageFlags arg_flags =
static char **arg_argv = NULL;
static char *arg_loop_ref = NULL;
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_path, freep);
STATIC_DESTRUCTOR_REGISTER(arg_verity_settings, verity_settings_done);
STATIC_DESTRUCTOR_REGISTER(arg_argv, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_loop_ref, freep);
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path as only argument.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
+
arg_flags |= DISSECT_IMAGE_READ_ONLY;
break;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path and mount point path as only arguments.");
- arg_image = argv[optind];
- arg_path = argv[optind + 1];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
+
+ r = parse_path_argument(argv[optind+1], /* suppress_root= */ false, &arg_path);
+ if (r < 0)
+ return r;
+
arg_flags |= DISSECT_IMAGE_REQUIRE_ROOT;
break;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected a mount point path as only argument.");
- arg_path = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_path);
+ if (r < 0)
+ return r;
break;
case ACTION_ATTACH:
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path as only argument.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
break;
case ACTION_DETACH:
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path or loopback device as only argument.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
break;
case ACTION_LIST:
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path as only argument.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
+
arg_flags |= DISSECT_IMAGE_READ_ONLY | DISSECT_IMAGE_REQUIRE_ROOT;
break;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path, a source path and an optional destination path as only arguments.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
arg_source = argv[optind + 1];
arg_target = argc > optind + 2 ? argv[optind + 2] : "-" /* this means stdout */ ;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path, an optional source path and a destination path as only arguments.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
if (argc > optind + 2) {
arg_source = argv[optind + 1];
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Expected an image file path and an optional command line.");
- arg_image = argv[optind];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
+
if (argc > optind + 1) {
arg_argv = strv_copy(argv + optind + 1);
if (!arg_argv)
if (fake)
return 0;
- arg_image = argv[optind];
- arg_path = argv[optind+1];
+ r = parse_path_argument(argv[optind], /* suppress_root= */ false, &arg_image);
+ if (r < 0)
+ return r;
+
+ r = parse_path_argument(argv[optind+1], /* suppress_root= */ false, &arg_path);
+ if (r < 0)
+ return r;
arg_flags |= DISSECT_IMAGE_REQUIRE_ROOT;
arg_action = ACTION_MOUNT;
return table_log_add_error(r);
if (p->partno < 0) /* no partition table, naked file system */ {
- r = table_add_cell(t, NULL, TABLE_STRING, arg_image);
+ r = table_add_cell(t, NULL, TABLE_PATH_BASENAME, arg_image);
if (r < 0)
return table_log_add_error(r);