From: Lennart Poettering Date: Wed, 20 Mar 2013 12:10:12 +0000 (+0100) Subject: bus: introduce bus_error_is_dirty() independently of sd_bus_error_is_set() X-Git-Tag: v199~132 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=fbfa72b0a1276366d50dce223c06efe9db9d6585 bus: introduce bus_error_is_dirty() independently of sd_bus_error_is_set() --- diff --git a/src/libsystemd-bus/bus-error.c b/src/libsystemd-bus/bus-error.c index 0832022ee..015fae70a 100644 --- a/src/libsystemd-bus/bus-error.c +++ b/src/libsystemd-bus/bus-error.c @@ -31,6 +31,13 @@ #include "sd-bus.h" #include "bus-error.h" +bool bus_error_is_dirty(sd_bus_error *e) { + if (!e) + return 0; + + return e->name || e->message || e->need_free; +} + void sd_bus_error_free(sd_bus_error *e) { if (!e) return; @@ -51,7 +58,7 @@ int sd_bus_error_set(sd_bus_error *e, const char *name, const char *format, ...) if (!e) return 0; - if (sd_bus_error_is_set(e)) + if (bus_error_is_dirty(e)) return -EINVAL; if (!name) return -EINVAL; @@ -81,7 +88,7 @@ int sd_bus_error_set(sd_bus_error *e, const char *name, const char *format, ...) int sd_bus_error_copy(sd_bus_error *dest, const sd_bus_error *e) { if (!dest) return 0; - if (sd_bus_error_is_set(dest)) + if (bus_error_is_dirty(dest)) return -EINVAL; if (!sd_bus_error_is_set(e)) return 0; @@ -113,18 +120,19 @@ int sd_bus_error_copy(sd_bus_error *dest, const sd_bus_error *e) { void sd_bus_error_set_const(sd_bus_error *e, const char *name, const char *message) { if (!e) return; - if (sd_bus_error_is_set(e)) + if (bus_error_is_dirty(e)) return; e->name = name; e->message = message; + e->need_free = false; } int sd_bus_error_is_set(const sd_bus_error *e) { if (!e) return 0; - return e->name || e->message || e->need_free; + return !!e->name; } int sd_bus_error_has_name(const sd_bus_error *e, const char *name) { diff --git a/src/libsystemd-bus/bus-error.h b/src/libsystemd-bus/bus-error.h index f49e6c739..c6e072eab 100644 --- a/src/libsystemd-bus/bus-error.h +++ b/src/libsystemd-bus/bus-error.h @@ -25,3 +25,5 @@ int bus_error_to_errno(const sd_bus_error *e); int bus_error_from_errno(sd_bus_error *e, int error); + +bool bus_error_is_dirty(sd_bus_error *e); diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index a1bae4d1a..5f3dbdb75 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -447,9 +447,7 @@ int sd_bus_message_new_method_error( sd_bus_message *t; int r; - if (!e) - return -EINVAL; - if (!e->name) + if (!sd_bus_error_is_set(e)) return -EINVAL; if (!m) return -EINVAL; diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c index 70288ee13..c5cbb5682 100644 --- a/src/libsystemd-bus/sd-bus.c +++ b/src/libsystemd-bus/sd-bus.c @@ -1131,7 +1131,7 @@ int sd_bus_send_with_reply_and_block( return -EINVAL; if (!m->header->type != SD_BUS_MESSAGE_TYPE_METHOD_CALL) return -EINVAL; - if (sd_bus_error_is_set(error)) + if (sd_bus_error_is_dirty(error)) return -EINVAL; r = sd_bus_send(bus, m, &serial); diff --git a/src/libsystemd-bus/sd-bus.h b/src/libsystemd-bus/sd-bus.h index d655f05dc..d892562b5 100644 --- a/src/libsystemd-bus/sd-bus.h +++ b/src/libsystemd-bus/sd-bus.h @@ -131,9 +131,9 @@ int sd_bus_get_owner_pid(sd_bus *bus, const char *name, pid_t *pid); int sd_bus_add_match(sd_bus *bus, const char *match); int sd_bus_remove_match(sd_bus *bus, const char *match); -/* Error objects */ +/* Error structures */ -#define SD_BUS_ERROR_INIT (NULL, NULL, false) +#define SD_BUS_ERROR_INIT (NULL, NULL, 0) void sd_bus_error_free(sd_bus_error *e); int sd_bus_error_set(sd_bus_error *e, const char *name, const char *format, ...);