X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fsd-bus.c;h=89172e6369c3dd5ea8d69fbdfc366c4028faf2c0;hp=8b8ce3c03e6a1df096e31a8974e6ef08434a0d8b;hb=2100fa1099b086411270a2876dde0532ea2806fa;hpb=f10dda3b82dd493eada52bcc52b790a1cc1094e6 diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c index 8b8ce3c03..89172e636 100644 --- a/src/libsystemd-bus/sd-bus.c +++ b/src/libsystemd-bus/sd-bus.c @@ -436,8 +436,11 @@ static int parse_unix_address(sd_bus *b, const char **p, char **guid) { static int parse_tcp_address(sd_bus *b, const char **p, char **guid) { _cleanup_free_ char *host = NULL, *port = NULL, *family = NULL; - struct addrinfo hints, *result; int r; + struct addrinfo *result, hints = { + .ai_socktype = SOCK_STREAM, + .ai_flags = AI_ADDRCONFIG, + }; assert(b); assert(p); @@ -475,10 +478,6 @@ static int parse_tcp_address(sd_bus *b, const char **p, char **guid) { if (!host || !port) return -EINVAL; - zero(hints); - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_ADDRCONFIG; - if (family) { if (streq(family, "ipv4")) hints.ai_family = AF_INET; @@ -966,7 +965,7 @@ static int dispatch_wqueue(sd_bus *bus) { } else if (r == 0) /* Didn't do anything this time */ return ret; - else if (bus->windex >= bus->wqueue[0]->size) { + else if (bus->windex >= bus_message_size(bus->wqueue[0])) { /* Fully written. Let's drop the entry from * the queue. * @@ -1067,7 +1066,7 @@ int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) { if (r < 0) { sd_bus_close(bus); return r; - } else if (idx < m->size) { + } else if (idx < bus_message_size(m)) { /* Wasn't fully written. So let's remember how * much was written. Note that the first entry * of the wqueue array is always allocated so @@ -1314,7 +1313,12 @@ int sd_bus_send_with_reply_and_block( /* Found a match! */ if (incoming->header->type == SD_BUS_MESSAGE_TYPE_METHOD_RETURN) { - *reply = incoming; + + if (reply) + *reply = incoming; + else + sd_bus_message_unref(incoming); + return 0; } @@ -1932,7 +1936,7 @@ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) { } static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec) { - struct pollfd p[2]; + struct pollfd p[2] = {}; int r, e, n; struct timespec ts; usec_t until, m; @@ -1963,9 +1967,7 @@ static int bus_poll(sd_bus *bus, bool need_more, uint64_t timeout_usec) { if (timeout_usec != (uint64_t) -1 && (m == (uint64_t) -1 || timeout_usec < m)) m = timeout_usec; - zero(p); p[0].fd = bus->input_fd; - if (bus->output_fd == bus->input_fd) { p[0].events = e; n = 1;