static int image_new(
ImageType t,
+ ImageClass c,
const char *pretty,
const char *path,
const char *filename,
*i = (Image) {
.n_ref = 1,
.type = t,
+ .class = c,
.read_only = read_only,
.crtime = crtime,
.mtime = mtime,
}
static int image_make(
+ ImageClass c,
const char *pretty,
int dfd,
const char *path,
return r;
r = image_new(IMAGE_SUBVOLUME,
+ c,
pretty,
path,
filename,
/* It's just a normal directory. */
r = image_new(IMAGE_DIRECTORY,
+ c,
pretty,
path,
filename,
}
r = image_new(IMAGE_RAW,
+ c,
pretty,
path,
filename,
}
r = image_new(IMAGE_BLOCK,
+ c,
pretty,
path,
filename,
if (!S_ISREG(st.st_mode))
continue;
- r = image_make(name, dirfd(d), resolved, raw, &st, ret);
+ r = image_make(class, name, dirfd(d), resolved, raw, &st, ret);
} else {
if (!S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode))
continue;
- r = image_make(name, dirfd(d), resolved, name, &st, ret);
+ r = image_make(class, name, dirfd(d), resolved, name, &st, ret);
}
if (IN_SET(r, -ENOENT, -EMEDIUMTYPE))
continue;
}
if (class == IMAGE_MACHINE && streq(name, ".host")) {
- r = image_make(".host", AT_FDCWD, NULL, empty_to_root(root), NULL, ret);
+ r = image_make(class, ".host", AT_FDCWD, NULL, empty_to_root(root), NULL, ret);
if (r < 0)
return r;
* overridden by another, different image earlier in the search path */
if (path_equal(path, "/"))
- return image_make(".host", AT_FDCWD, NULL, "/", NULL, ret);
+ return image_make(IMAGE_MACHINE, ".host", AT_FDCWD, NULL, "/", NULL, ret);
- return image_make(NULL, AT_FDCWD, NULL, path, NULL, ret);
+ return image_make(_IMAGE_CLASS_INVALID, NULL, AT_FDCWD, NULL, path, NULL, ret);
}
int image_find_harder(ImageClass class, const char *name_or_path, const char *root, Image **ret) {
if (hashmap_contains(h, pretty))
continue;
- r = image_make(pretty, dirfd(d), resolved, de->d_name, &st, &image);
+ r = image_make(class, pretty, dirfd(d), resolved, de->d_name, &st, &image);
if (IN_SET(r, -ENOENT, -EMEDIUMTYPE))
continue;
if (r < 0)
if (class == IMAGE_MACHINE && !hashmap_contains(h, ".host")) {
_cleanup_(image_unrefp) Image *image = NULL;
- r = image_make(".host", AT_FDCWD, NULL, empty_to_root("/"), NULL, &image);
+ r = image_make(IMAGE_MACHINE, ".host", AT_FDCWD, NULL, empty_to_root("/"), NULL, &image);
if (r < 0)
return r;