machine: split out manager_acquire_image() from image_object_find()

Preparation for the next commit. No functional change.
This commit is contained in:
Yu Watanabe
2024-05-20 01:03:14 +09:00
parent 96ac6d3fcc
commit 6d917da140
2 changed files with 45 additions and 26 deletions
+43 -26
View File
@@ -378,30 +378,17 @@ static int image_flush_cache(sd_event_source *s, void *userdata) {
return 0;
}
static int image_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
_cleanup_free_ char *e = NULL;
Manager *m = userdata;
Image *image = NULL;
const char *p;
int manager_acquire_image(Manager *m, const char *name, Image **ret) {
int r;
assert(bus);
assert(path);
assert(interface);
assert(found);
assert(m);
assert(name);
p = startswith(path, "/org/freedesktop/machine1/image/");
if (!p)
Image *existing = hashmap_get(m->image_cache, name);
if (existing) {
if (ret)
*ret = existing;
return 0;
e = bus_label_unescape(p);
if (!e)
return -ENOMEM;
image = hashmap_get(m->image_cache, e);
if (image) {
*found = image;
return 1;
}
if (!m->image_cache_defer_event) {
@@ -418,19 +405,49 @@ static int image_object_find(sd_bus *bus, const char *path, const char *interfac
if (r < 0)
return r;
r = image_find(IMAGE_MACHINE, e, NULL, &image);
if (r == -ENOENT)
return 0;
_cleanup_(image_unrefp) Image *image = NULL;
r = image_find(IMAGE_MACHINE, name, NULL, &image);
if (r < 0)
return r;
image->userdata = m;
r = hashmap_ensure_put(&m->image_cache, &image_hash_ops, image->name, image);
if (r < 0) {
image_unref(image);
if (r < 0)
return r;
if (ret)
*ret = image;
TAKE_PTR(image);
return 0;
}
static int image_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error) {
_cleanup_free_ char *e = NULL;
Manager *m = userdata;
Image *image;
const char *p;
int r;
assert(bus);
assert(path);
assert(interface);
assert(found);
p = startswith(path, "/org/freedesktop/machine1/image/");
if (!p)
return 0;
e = bus_label_unescape(p);
if (!e)
return -ENOMEM;
r = manager_acquire_image(m, e, &image);
if (r == -ENOENT)
return 0;
if (r < 0)
return r;
}
*found = image;
return 1;
+2
View File
@@ -2,10 +2,12 @@
#pragma once
#include "bus-object.h"
#include "discover-image.h"
#include "machined.h"
extern const BusObjectImplementation image_object;
int manager_acquire_image(Manager *m, const char *name, Image **ret);
char *image_bus_path(const char *name);
int bus_image_method_remove(sd_bus_message *message, void *userdata, sd_bus_error *error);