_cleanup_free_ char *path = NULL;
Manager *m = ASSERT_PTR(userdata);
sd_id128_t id;
- const void *a;
Unit *u;
- size_t sz;
int r;
assert(message);
/* Anyone can call this method */
- r = sd_bus_message_read_array(message, 'y', &a, &sz);
- if (r < 0)
- return r;
- if (sz == 0)
- id = SD_ID128_NULL;
- else if (sz == 16)
- memcpy(&id, a, sz);
- else
+ if (bus_message_read_id128(message, &id) < 0)
return sd_bus_error_set(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid invocation ID");
if (sd_id128_is_null(id)) {
static int print_image_machine_id(sd_bus *bus, const char *name) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
- sd_id128_t id = SD_ID128_NULL;
- const void *p;
- size_t size;
+ sd_id128_t id;
int r;
r = bus_call_method(bus, bus_machine_mgr, "GetImageMachineID", NULL, &reply, "s", name);
if (r < 0)
return r;
- r = sd_bus_message_read_array(reply, 'y', &p, &size);
+ r = bus_message_read_id128(reply, &id);
if (r < 0)
return r;
- if (size == sizeof(sd_id128_t))
- memcpy(&id, p, size);
-
if (!sd_id128_is_null(id))
printf(" Machine ID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(id));
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
_cleanup_free_ char *object = NULL;
- const void *p;
- size_t l;
int r;
assert(bus);
if (r < 0)
return log_error_errno(r, "Failed to request invocation ID for unit: %s", bus_error_message(&error, r));
- r = sd_bus_message_read_array(reply, 'y', &p, &l);
+ r = bus_message_read_id128(reply, ret);
if (r < 0)
return bus_log_parse_error(r);
- if (l == 0) {
- *ret = SD_ID128_NULL;
- return 0; /* no uuid set */
- }
-
- if (l != sizeof(sd_id128_t))
- return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid UUID size, %zu != %zu.", l, sizeof(sd_id128_t));
-
- memcpy(ret, p, l);
- return !sd_id128_is_null(*ret);
+ return 0;
}
static void set_window_title(PTYForward *f) {
int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
sd_id128_t *p = userdata;
- const void *v;
- size_t n;
int r;
- r = sd_bus_message_read_array(m, SD_BUS_TYPE_BYTE, &v, &n);
+ r = bus_message_read_id128(m, p);
if (r < 0)
return bus_log_parse_error_debug(r);
- if (n == 0)
- *p = SD_ID128_NULL;
- else if (n == 16)
- memcpy((*p).bytes, v, n);
- else
- return -EINVAL;
-
return 0;
}
return bus_creds_get_pidref(creds, ret);
}
+
+int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret) {
+ const void *a;
+ size_t sz;
+ int r;
+
+ assert(m);
+
+ r = sd_bus_message_read_array(m, 'y', &a, &sz);
+ if (r < 0)
+ return r;
+
+ switch (sz) {
+ case 0:
+ if (ret)
+ *ret = SD_ID128_NULL;
+ break;
+
+ case sizeof(sd_id128_t):
+ if (ret)
+ memcpy(ret, a, sz);
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
int bus_creds_get_pidref(sd_bus_creds *c, PidRef *ret);
int bus_query_sender_pidref(sd_bus_message *m, PidRef *ret);
+
+int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret);