if (r == 0)
return 1; /* Will call us back */
- /* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */
- assert_se(hashmap_remove_value(m->image_cache, image->name, image));
-
- r = image_rename(image, new_name);
- if (r < 0) {
- image_unref(image);
- return r;
- }
-
- /* Then save the object again in the cache. */
- assert_se(hashmap_put(m->image_cache, image->name, image) > 0);
+ r = rename_image_and_update_cache(m, image, new_name);
+ if (r < 0)
+ return sd_bus_error_set_errnof(error, r, "Failed to rename image: %m");
return sd_bus_reply_method_return(message, NULL);
}
TAKE_PTR(image);
return 0;
}
+
+int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name) {
+ int r;
+
+ assert(m);
+ assert(image);
+ assert(new_name);
+
+ /* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */
+ assert_se(hashmap_remove_value(m->image_cache, image->name, image));
+
+ r = image_rename(image, new_name);
+ if (r < 0) {
+ image = image_unref(image);
+ return r;
+ }
+
+ /* Then save the object again in the cache. */
+ r = hashmap_put(m->image_cache, image->name, image);
+ if (r < 0) {
+ image = image_unref(image);
+ log_debug_errno(r, "Failed to put renamed image into cache, ignoring: %m");
+ }
+
+ return 0;
+}
int machine_get_addresses(Machine* machine, struct local_address **ret_addresses);
int machine_get_os_release(Machine *machine, char ***ret_os_release);
int manager_acquire_image(Manager *m, const char *name, Image **ret);
+int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name);