mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-12 09:17:44 +03:00
shared: split out code that maps properties to local structs
Just some refactoring, no code changes.
This commit is contained in:
parent
9b71e4ab90
commit
807542bece
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "analyze-security.h"
|
#include "analyze-security.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-unit-util.h"
|
#include "bus-unit-util.h"
|
||||||
#include "bus-util.h"
|
#include "bus-util.h"
|
||||||
#include "env-util.h"
|
#include "env-util.h"
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "build.h"
|
#include "build.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-unit-util.h"
|
#include "bus-unit-util.h"
|
||||||
#include "calendarspec.h"
|
#include "calendarspec.h"
|
||||||
#include "conf-files.h"
|
#include "conf-files.h"
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "alloc-util.h"
|
#include "alloc-util.h"
|
||||||
#include "architecture.h"
|
#include "architecture.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-util.h"
|
#include "bus-map-properties.h"
|
||||||
#include "hostname-util.h"
|
#include "hostname-util.h"
|
||||||
#include "main-func.h"
|
#include "main-func.h"
|
||||||
#include "pretty-print.h"
|
#include "pretty-print.h"
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "fd-util.h"
|
#include "fd-util.h"
|
||||||
#include "fileio.h"
|
#include "fileio.h"
|
||||||
#include "kbd-util.h"
|
#include "kbd-util.h"
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "alloc-util.h"
|
#include "alloc-util.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-unit-procs.h"
|
#include "bus-unit-procs.h"
|
||||||
#include "cgroup-show.h"
|
#include "cgroup-show.h"
|
||||||
#include "cgroup-util.h"
|
#include "cgroup-util.h"
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "bus-common-errors.h"
|
#include "bus-common-errors.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-unit-procs.h"
|
#include "bus-unit-procs.h"
|
||||||
#include "bus-unit-util.h"
|
#include "bus-unit-util.h"
|
||||||
#include "bus-wait-for-jobs.h"
|
#include "bus-wait-for-jobs.h"
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "bus-common-errors.h"
|
#include "bus-common-errors.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "dns-domain.h"
|
#include "dns-domain.h"
|
||||||
#include "escape.h"
|
#include "escape.h"
|
||||||
#include "format-table.h"
|
#include "format-table.h"
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "alloc-util.h"
|
#include "alloc-util.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-unit-util.h"
|
#include "bus-unit-util.h"
|
||||||
#include "bus-wait-for-jobs.h"
|
#include "bus-wait-for-jobs.h"
|
||||||
#include "calendarspec.h"
|
#include "calendarspec.h"
|
||||||
|
229
src/shared/bus-map-properties.c
Normal file
229
src/shared/bus-map-properties.c
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
|
||||||
|
#include "bus-map-properties.h"
|
||||||
|
#include "alloc-util.h"
|
||||||
|
#include "strv.h"
|
||||||
|
#include "bus-message.h"
|
||||||
|
|
||||||
|
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);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (n == 0)
|
||||||
|
*p = SD_ID128_NULL;
|
||||||
|
else if (n == 16)
|
||||||
|
memcpy((*p).bytes, v, n);
|
||||||
|
else
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
|
||||||
|
char type;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = sd_bus_message_peek_type(m, &type, NULL);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_STRING:
|
||||||
|
case SD_BUS_TYPE_OBJECT_PATH: {
|
||||||
|
const char **p = userdata;
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, type, &s);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (isempty(s))
|
||||||
|
s = NULL;
|
||||||
|
|
||||||
|
if (flags & BUS_MAP_STRDUP)
|
||||||
|
return free_and_strdup((char **) userdata, s);
|
||||||
|
|
||||||
|
*p = s;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_ARRAY: {
|
||||||
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
|
char ***p = userdata;
|
||||||
|
|
||||||
|
r = bus_message_read_strv_extend(m, &l);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return strv_extend_strv(p, l, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_BOOLEAN: {
|
||||||
|
int b;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, type, &b);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (flags & BUS_MAP_BOOLEAN_AS_BOOL)
|
||||||
|
*(bool*) userdata = b;
|
||||||
|
else
|
||||||
|
*(int*) userdata = b;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_INT32:
|
||||||
|
case SD_BUS_TYPE_UINT32: {
|
||||||
|
uint32_t u, *p = userdata;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, type, &u);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*p = u;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_INT64:
|
||||||
|
case SD_BUS_TYPE_UINT64: {
|
||||||
|
uint64_t t, *p = userdata;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, type, &t);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*p = t;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SD_BUS_TYPE_DOUBLE: {
|
||||||
|
double d, *p = userdata;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, type, &d);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*p = d;
|
||||||
|
return 0;
|
||||||
|
}}
|
||||||
|
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bus_message_map_all_properties(
|
||||||
|
sd_bus_message *m,
|
||||||
|
const struct bus_properties_map *map,
|
||||||
|
unsigned flags,
|
||||||
|
sd_bus_error *error,
|
||||||
|
void *userdata) {
|
||||||
|
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(m);
|
||||||
|
assert(map);
|
||||||
|
|
||||||
|
r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
|
||||||
|
const struct bus_properties_map *prop;
|
||||||
|
const char *member;
|
||||||
|
const char *contents;
|
||||||
|
void *v;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &member);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
for (i = 0, prop = NULL; map[i].member; i++)
|
||||||
|
if (streq(map[i].member, member)) {
|
||||||
|
prop = &map[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prop) {
|
||||||
|
r = sd_bus_message_peek_type(m, NULL, &contents);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
v = (uint8_t *)userdata + prop->offset;
|
||||||
|
if (map[i].set)
|
||||||
|
r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
|
||||||
|
else
|
||||||
|
r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = sd_bus_message_exit_container(m);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
} else {
|
||||||
|
r = sd_bus_message_skip(m, "v");
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = sd_bus_message_exit_container(m);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return sd_bus_message_exit_container(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
int bus_map_all_properties(
|
||||||
|
sd_bus *bus,
|
||||||
|
const char *destination,
|
||||||
|
const char *path,
|
||||||
|
const struct bus_properties_map *map,
|
||||||
|
unsigned flags,
|
||||||
|
sd_bus_error *error,
|
||||||
|
sd_bus_message **reply,
|
||||||
|
void *userdata) {
|
||||||
|
|
||||||
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(bus);
|
||||||
|
assert(destination);
|
||||||
|
assert(path);
|
||||||
|
assert(map);
|
||||||
|
assert(reply || (flags & BUS_MAP_STRDUP));
|
||||||
|
|
||||||
|
r = sd_bus_call_method(
|
||||||
|
bus,
|
||||||
|
destination,
|
||||||
|
path,
|
||||||
|
"org.freedesktop.DBus.Properties",
|
||||||
|
"GetAll",
|
||||||
|
error,
|
||||||
|
&m,
|
||||||
|
"s", "");
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = bus_message_map_all_properties(m, map, flags, error, userdata);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (reply)
|
||||||
|
*reply = sd_bus_message_ref(m);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
24
src/shared/bus-map-properties.h
Normal file
24
src/shared/bus-map-properties.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "sd-bus.h"
|
||||||
|
|
||||||
|
typedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
|
||||||
|
|
||||||
|
struct bus_properties_map {
|
||||||
|
const char *member;
|
||||||
|
const char *signature;
|
||||||
|
bus_property_set_t set;
|
||||||
|
size_t offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
BUS_MAP_STRDUP = 1 << 0, /* If set, each "s" message is duplicated. Thus, each pointer needs to be freed. */
|
||||||
|
BUS_MAP_BOOLEAN_AS_BOOL = 1 << 1, /* If set, each "b" message is written to a bool pointer. If not set, "b" is written to a int pointer. */
|
||||||
|
};
|
||||||
|
|
||||||
|
int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
|
||||||
|
|
||||||
|
int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, unsigned flags, sd_bus_error *error, void *userdata);
|
||||||
|
int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map,
|
||||||
|
unsigned flags, sd_bus_error *error, sd_bus_message **reply, void *userdata);
|
@ -701,229 +701,6 @@ int bus_print_all_properties(
|
|||||||
return bus_message_print_all_properties(reply, func, filter, value, all, found_properties);
|
return bus_message_print_all_properties(reply, func, filter, value, all, found_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
*p = SD_ID128_NULL;
|
|
||||||
else if (n == 16)
|
|
||||||
memcpy((*p).bytes, v, n);
|
|
||||||
else
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
|
|
||||||
char type;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = sd_bus_message_peek_type(m, &type, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_STRING:
|
|
||||||
case SD_BUS_TYPE_OBJECT_PATH: {
|
|
||||||
const char **p = userdata;
|
|
||||||
const char *s;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, type, &s);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (isempty(s))
|
|
||||||
s = NULL;
|
|
||||||
|
|
||||||
if (flags & BUS_MAP_STRDUP)
|
|
||||||
return free_and_strdup((char **) userdata, s);
|
|
||||||
|
|
||||||
*p = s;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_ARRAY: {
|
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
|
||||||
char ***p = userdata;
|
|
||||||
|
|
||||||
r = bus_message_read_strv_extend(m, &l);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return strv_extend_strv(p, l, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_BOOLEAN: {
|
|
||||||
int b;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, type, &b);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (flags & BUS_MAP_BOOLEAN_AS_BOOL)
|
|
||||||
*(bool*) userdata = b;
|
|
||||||
else
|
|
||||||
*(int*) userdata = b;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_INT32:
|
|
||||||
case SD_BUS_TYPE_UINT32: {
|
|
||||||
uint32_t u, *p = userdata;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, type, &u);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
*p = u;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_INT64:
|
|
||||||
case SD_BUS_TYPE_UINT64: {
|
|
||||||
uint64_t t, *p = userdata;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, type, &t);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
*p = t;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case SD_BUS_TYPE_DOUBLE: {
|
|
||||||
double d, *p = userdata;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, type, &d);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
*p = d;
|
|
||||||
return 0;
|
|
||||||
}}
|
|
||||||
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
int bus_message_map_all_properties(
|
|
||||||
sd_bus_message *m,
|
|
||||||
const struct bus_properties_map *map,
|
|
||||||
unsigned flags,
|
|
||||||
sd_bus_error *error,
|
|
||||||
void *userdata) {
|
|
||||||
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(m);
|
|
||||||
assert(map);
|
|
||||||
|
|
||||||
r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
|
|
||||||
const struct bus_properties_map *prop;
|
|
||||||
const char *member;
|
|
||||||
const char *contents;
|
|
||||||
void *v;
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &member);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
for (i = 0, prop = NULL; map[i].member; i++)
|
|
||||||
if (streq(map[i].member, member)) {
|
|
||||||
prop = &map[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prop) {
|
|
||||||
r = sd_bus_message_peek_type(m, NULL, &contents);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
v = (uint8_t *)userdata + prop->offset;
|
|
||||||
if (map[i].set)
|
|
||||||
r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
|
|
||||||
else
|
|
||||||
r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = sd_bus_message_exit_container(m);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
} else {
|
|
||||||
r = sd_bus_message_skip(m, "v");
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_bus_message_exit_container(m);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return sd_bus_message_exit_container(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
int bus_map_all_properties(
|
|
||||||
sd_bus *bus,
|
|
||||||
const char *destination,
|
|
||||||
const char *path,
|
|
||||||
const struct bus_properties_map *map,
|
|
||||||
unsigned flags,
|
|
||||||
sd_bus_error *error,
|
|
||||||
sd_bus_message **reply,
|
|
||||||
void *userdata) {
|
|
||||||
|
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(bus);
|
|
||||||
assert(destination);
|
|
||||||
assert(path);
|
|
||||||
assert(map);
|
|
||||||
assert(reply || (flags & BUS_MAP_STRDUP));
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
|
||||||
bus,
|
|
||||||
destination,
|
|
||||||
path,
|
|
||||||
"org.freedesktop.DBus.Properties",
|
|
||||||
"GetAll",
|
|
||||||
error,
|
|
||||||
&m,
|
|
||||||
"s", "");
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
r = bus_message_map_all_properties(m, map, flags, error, userdata);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (reply)
|
|
||||||
*reply = sd_bus_message_ref(m);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **ret) {
|
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **ret) {
|
||||||
_cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
|
_cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
@ -22,26 +22,6 @@ typedef enum BusTransport {
|
|||||||
_BUS_TRANSPORT_INVALID = -1
|
_BUS_TRANSPORT_INVALID = -1
|
||||||
} BusTransport;
|
} BusTransport;
|
||||||
|
|
||||||
typedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
|
|
||||||
|
|
||||||
struct bus_properties_map {
|
|
||||||
const char *member;
|
|
||||||
const char *signature;
|
|
||||||
bus_property_set_t set;
|
|
||||||
size_t offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
BUS_MAP_STRDUP = 1 << 0, /* If set, each "s" message is duplicated. Thus, each pointer needs to be freed. */
|
|
||||||
BUS_MAP_BOOLEAN_AS_BOOL = 1 << 1, /* If set, each "b" message is written to a bool pointer. If not set, "b" is written to a int pointer. */
|
|
||||||
};
|
|
||||||
|
|
||||||
int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
|
|
||||||
|
|
||||||
int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, unsigned flags, sd_bus_error *error, void *userdata);
|
|
||||||
int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map,
|
|
||||||
unsigned flags, sd_bus_error *error, sd_bus_message **reply, void *userdata);
|
|
||||||
|
|
||||||
int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name);
|
int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name);
|
||||||
|
|
||||||
typedef bool (*check_idle_t)(void *userdata);
|
typedef bool (*check_idle_t)(void *userdata);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
|
||||||
#include "bus-util.h"
|
#include "bus-map-properties.h"
|
||||||
#include "bus-wait-for-units.h"
|
#include "bus-wait-for-units.h"
|
||||||
#include "hashmap.h"
|
#include "hashmap.h"
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
|
@ -31,6 +31,8 @@ shared_sources = files('''
|
|||||||
bus-locator.h
|
bus-locator.h
|
||||||
bus-log-control-api.c
|
bus-log-control-api.c
|
||||||
bus-log-control-api.h
|
bus-log-control-api.h
|
||||||
|
bus-map-properties.c
|
||||||
|
bus-map-properties.h
|
||||||
bus-object.c
|
bus-object.c
|
||||||
bus-object.h
|
bus-object.h
|
||||||
bus-polkit.c
|
bus-polkit.c
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "bus-common-errors.h"
|
#include "bus-common-errors.h"
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-message.h"
|
#include "bus-message.h"
|
||||||
#include "bus-unit-procs.h"
|
#include "bus-unit-procs.h"
|
||||||
#include "bus-unit-util.h"
|
#include "bus-unit-util.h"
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "format-table.h"
|
#include "format-table.h"
|
||||||
#include "in-addr-util.h"
|
#include "in-addr-util.h"
|
||||||
#include "main-func.h"
|
#include "main-func.h"
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-locator.h"
|
#include "bus-locator.h"
|
||||||
#include "bus-log-control-api.h"
|
#include "bus-log-control-api.h"
|
||||||
|
#include "bus-map-properties.h"
|
||||||
#include "bus-polkit.h"
|
#include "bus-polkit.h"
|
||||||
#include "clock-util.h"
|
#include "clock-util.h"
|
||||||
#include "conf-files.h"
|
#include "conf-files.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user