chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
bus: make sure sd_bus_emit_properties_changed_strv() doesn't return ENOENT if no...
[elogind.git]
/
src
/
libsystemd-bus
/
bus-objects.c
diff --git
a/src/libsystemd-bus/bus-objects.c
b/src/libsystemd-bus/bus-objects.c
index 30f6124b99a2791ec3743c08a18a8be574befd3b..b116a5dd10146ddc729abade07fd4bf7d11b3c05 100644
(file)
--- a/
src/libsystemd-bus/bus-objects.c
+++ b/
src/libsystemd-bus/bus-objects.c
@@
-1981,6
+1981,7
@@
static int emit_properties_changed_on_interface(
const char *path,
const char *interface,
bool require_fallback,
const char *path,
const char *interface,
bool require_fallback,
+ bool *found_interface,
char **names) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
char **names) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
@@
-1997,6
+1998,7
@@
static int emit_properties_changed_on_interface(
assert(prefix);
assert(path);
assert(interface);
assert(prefix);
assert(path);
assert(interface);
+ assert(found_interface);
n = hashmap_get(bus->nodes, prefix);
if (!n)
n = hashmap_get(bus->nodes, prefix);
if (!n)
@@
-2032,6
+2034,8
@@
static int emit_properties_changed_on_interface(
if (r == 0)
continue;
if (r == 0)
continue;
+ *found_interface = true;
+
if (names) {
/* If the caller specified a list of
* properties we include exactly those in the
if (names) {
/* If the caller specified a list of
* properties we include exactly those in the
@@
-2185,6
+2189,7
@@
_public_ int sd_bus_emit_properties_changed_strv(
char **names) {
BUS_DONT_DESTROY(bus);
char **names) {
BUS_DONT_DESTROY(bus);
+ bool found_interface = false;
char *prefix;
int r;
char *prefix;
int r;
@@
-2205,7
+2210,7
@@
_public_ int sd_bus_emit_properties_changed_strv(
do {
bus->nodes_modified = false;
do {
bus->nodes_modified = false;
- r = emit_properties_changed_on_interface(bus, path, path, interface, false, names);
+ r = emit_properties_changed_on_interface(bus, path, path, interface, false,
&found_interface,
names);
if (r != 0)
return r;
if (bus->nodes_modified)
if (r != 0)
return r;
if (bus->nodes_modified)
@@
-2213,7
+2218,7
@@
_public_ int sd_bus_emit_properties_changed_strv(
prefix = alloca(strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
prefix = alloca(strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
- r = emit_properties_changed_on_interface(bus, prefix, path, interface, true, names);
+ r = emit_properties_changed_on_interface(bus, prefix, path, interface, true,
&found_interface,
names);
if (r != 0)
return r;
if (bus->nodes_modified)
if (r != 0)
return r;
if (bus->nodes_modified)
@@
-2222,7
+2227,7
@@
_public_ int sd_bus_emit_properties_changed_strv(
} while (bus->nodes_modified);
} while (bus->nodes_modified);
- return -ENOENT;
+ return
found_interface ? 0 :
-ENOENT;
}
_public_ int sd_bus_emit_properties_changed(
}
_public_ int sd_bus_emit_properties_changed(