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: add macro for iterating through body parts of a message
[elogind.git]
/
src
/
libsystemd-bus
/
sd-bus.c
diff --git
a/src/libsystemd-bus/sd-bus.c
b/src/libsystemd-bus/sd-bus.c
index 29487cbd317904f545b27b570c7ea5712695b55c..2537ba52d59c2ada3cb6734c47b1f170a81e23a7 100644
(file)
--- a/
src/libsystemd-bus/sd-bus.c
+++ b/
src/libsystemd-bus/sd-bus.c
@@
-31,6
+31,7
@@
#include "macro.h"
#include "strv.h"
#include "set.h"
#include "macro.h"
#include "strv.h"
#include "set.h"
+#include "missing.h"
#include "sd-bus.h"
#include "bus-internal.h"
#include "sd-bus.h"
#include "bus-internal.h"
@@
-55,6
+56,7
@@
static void bus_free(sd_bus *b) {
free(b->unique_name);
free(b->auth_buffer);
free(b->address);
free(b->unique_name);
free(b->auth_buffer);
free(b->address);
+ free(b->kernel);
free(b->exec_path);
strv_free(b->exec_argv);
free(b->exec_path);
strv_free(b->exec_argv);
@@
-84,9
+86,10
@@
static void bus_free(sd_bus *b) {
}
hashmap_free(b->object_callbacks);
}
hashmap_free(b->object_callbacks);
-
bus_match_free(&b->match_callbacks);
bus_match_free(&b->match_callbacks);
+ bus_kernel_flush_memfd(b);
+
free(b);
}
free(b);
}
@@
-279,7
+282,7
@@
static int bus_send_hello(sd_bus *bus) {
int bus_start_running(sd_bus *bus) {
assert(bus);
int bus_start_running(sd_bus *bus) {
assert(bus);
- if (bus->bus_client) {
+ if (bus->bus_client
&& !bus->is_kernel
) {
bus->state = BUS_HELLO;
return 1;
}
bus->state = BUS_HELLO;
return 1;
}
@@
-840,7
+843,7
@@
int sd_bus_open_system(sd_bus **ret) {
if (r < 0)
return r;
if (r < 0)
return r;
- e = getenv("DBUS_SYSTEM_BUS_ADDRESS");
+ e =
secure_
getenv("DBUS_SYSTEM_BUS_ADDRESS");
if (e) {
r = sd_bus_set_address(b, e);
if (r < 0)
if (e) {
r = sd_bus_set_address(b, e);
if (r < 0)
@@
-878,13
+881,13
@@
int sd_bus_open_user(sd_bus **ret) {
if (r < 0)
return r;
if (r < 0)
return r;
- e = getenv("DBUS_SESSION_BUS_ADDRESS");
+ e =
secure_
getenv("DBUS_SESSION_BUS_ADDRESS");
if (e) {
r = sd_bus_set_address(b, e);
if (r < 0)
goto fail;
} else {
if (e) {
r = sd_bus_set_address(b, e);
if (r < 0)
goto fail;
} else {
- e = getenv("XDG_RUNTIME_DIR");
+ e =
secure_
getenv("XDG_RUNTIME_DIR");
if (!e) {
r = -ENOENT;
goto fail;
if (!e) {
r = -ENOENT;
goto fail;
@@
-1583,6
+1586,10
@@
static int process_reply(sd_bus *bus, sd_bus_message *m) {
if (c->timeout != 0)
prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
if (c->timeout != 0)
prioq_remove(bus->reply_callbacks_prioq, c, &c->prioq_idx);
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
free(c);
r = c->callback(bus, 0, m, c->userdata);
free(c);
@@
-1610,6
+1617,10
@@
static int process_filter(sd_bus *bus, sd_bus_message *m) {
l->last_iteration = bus->iteration_counter;
l->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = l->callback(bus, 0, m, l->userdata);
if (r != 0)
return r;
r = l->callback(bus, 0, m, l->userdata);
if (r != 0)
return r;
@@
-1719,6
+1730,10
@@
static int process_object(sd_bus *bus, sd_bus_message *m) {
c->last_iteration = bus->iteration_counter;
c->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
@@
-1745,6
+1760,10
@@
static int process_object(sd_bus *bus, sd_bus_message *m) {
c->last_iteration = bus->iteration_counter;
c->last_iteration = bus->iteration_counter;
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
r = c->callback(bus, 0, m, c->userdata);
if (r != 0)
return r;
@@
-1823,13
+1842,9
@@
static int process_introspect(sd_bus *bus, sd_bus_message *m) {
if (p)
*p = 0;
if (p)
*p = 0;
- r = set_put(s, a);
- if (r < 0) {
- free(a);
-
- if (r != -EEXIST)
- return r;
- }
+ r = set_consume(s, a);
+ if (r < 0 && r != -EEXIST)
+ return r;
}
f = open_memstream(&introspection, &size);
}
f = open_memstream(&introspection, &size);
@@
-1929,6
+1944,10
@@
static int process_running(sd_bus *bus, sd_bus_message **ret) {
goto null_message;
if (ret) {
goto null_message;
if (ret) {
+ r = sd_bus_message_rewind(m, true);
+ if (r < 0)
+ return r;
+
*ret = m;
m = NULL;
return 1;
*ret = m;
m = NULL;
return 1;