static void iso_backing_file(char *s, const char *name) {
sd_bus_error error = SD_BUS_ERROR_NULL;
sd_bus_message *mess = NULL;
sd_bus *iso_bus = NULL;
int r;
const uint8_t bytes;
char obj_path[PATH_MAX + 1] = "/org/freedesktop/UDisks2/block_devices/";
r = sd_bus_open_system(&iso_bus);
if (r < 0) {
WARN(strerror(-r));
return;
}
strcat(obj_path, strrchr(name, '/') + 1);
INFO("getting BackingFile property on bus.");
r = sd_bus_get_property(iso_bus,
"org.freedesktop.UDisks2",
obj_path,
"org.freedesktop.UDisks2.Loop",
"BackingFile",
&error,
&mess,
"ay");
if (r < 0) {
WARN(error.message);
} else {
r = sd_bus_message_enter_container(mess, SD_BUS_TYPE_ARRAY, "y");
if (r < 0) {
WARN(strerror(-r));
} else {
while ((sd_bus_message_read(mess, "y", &bytes)) > 0) {
sprintf(s + strlen(s), "%c", (char)bytes);
}
}
}
close_bus(&error, mess, iso_bus);
}