chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sd-bus: add proper monitoring API
[elogind.git]
/
src
/
libsystemd
/
sd-bus
/
bus-control.c
diff --git
a/src/libsystemd/sd-bus/bus-control.c
b/src/libsystemd/sd-bus/bus-control.c
index db0c11b0fe4811a0631cc64238a6aead1a4d5bc3..bb6683efff6e0b7ee32d663202327d2391de02af 100644
(file)
--- a/
src/libsystemd/sd-bus/bus-control.c
+++ b/
src/libsystemd/sd-bus/bus-control.c
@@
-1098,13
+1098,22
@@
int bus_add_match_internal_kernel(
return 0;
}
return 0;
}
+#define internal_match(bus, m) \
+ ((bus)->hello_flags & KDBUS_HELLO_MONITOR \
+ ? (isempty(m) ? "eavesdrop='true'" : strappenda((m), ",eavesdrop='true'")) \
+ : (m))
+
static int bus_add_match_internal_dbus1(
sd_bus *bus,
const char *match) {
static int bus_add_match_internal_dbus1(
sd_bus *bus,
const char *match) {
+ const char *e;
+
assert(bus);
assert(match);
assert(bus);
assert(match);
+ e = internal_match(bus, match);
+
return sd_bus_call_method(
bus,
"org.freedesktop.DBus",
return sd_bus_call_method(
bus,
"org.freedesktop.DBus",
@@
-1114,7
+1123,7
@@
static int bus_add_match_internal_dbus1(
NULL,
NULL,
"s",
NULL,
NULL,
"s",
-
match
);
+
e
);
}
int bus_add_match_internal(
}
int bus_add_match_internal(
@@
-1159,9
+1168,13
@@
static int bus_remove_match_internal_dbus1(
sd_bus *bus,
const char *match) {
sd_bus *bus,
const char *match) {
+ const char *e;
+
assert(bus);
assert(match);
assert(bus);
assert(match);
+ e = internal_match(bus, match);
+
return sd_bus_call_method(
bus,
"org.freedesktop.DBus",
return sd_bus_call_method(
bus,
"org.freedesktop.DBus",
@@
-1171,7
+1184,7
@@
static int bus_remove_match_internal_dbus1(
NULL,
NULL,
"s",
NULL,
NULL,
"s",
-
match
);
+
e
);
}
int bus_remove_match_internal(
}
int bus_remove_match_internal(