diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-08-06 18:54:03 +0200 |
---|---|---|
committer | Sven Eden <sven.eden@prydeworx.com> | 2018-10-29 10:18:33 +0100 |
commit | 2634a16622743398028be2a2a2b35b381af876cf (patch) | |
tree | eaa78707220f5f65a129c72eb1ce26a9be886294 /src | |
parent | d58d87e248af100e9c23a7c767847b7fb56ba6ef (diff) |
sd-bus: add new API call sd_bus_error_move()
This new call move an sd_bus_error into another one.
(cherry picked from commit 190128e407eb24a445554c0e1f956a1d51f97338)
In the backport, the new function is made non-public, declared in bus-error.h
not sd-bus.h.
Diffstat (limited to 'src')
-rw-r--r-- | src/libelogind/sd-bus/bus-error.c | 22 | ||||
-rw-r--r-- | src/libelogind/sd-bus/bus-error.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/libelogind/sd-bus/bus-error.c b/src/libelogind/sd-bus/bus-error.c index ec359ac13..f0673225c 100644 --- a/src/libelogind/sd-bus/bus-error.c +++ b/src/libelogind/sd-bus/bus-error.c @@ -310,6 +310,28 @@ finish: return -bus_error_name_to_errno(e->name); } +int sd_bus_error_move(sd_bus_error *dest, sd_bus_error *e) { + int r; + + if (!sd_bus_error_is_set(e)) { + + if (dest) + *dest = SD_BUS_ERROR_NULL; + + return 0; + } + + r = -bus_error_name_to_errno(e->name); + + if (dest) { + *dest = *e; + *e = SD_BUS_ERROR_NULL; + } else + sd_bus_error_free(e); + + return r; +} + _public_ int sd_bus_error_set_const(sd_bus_error *e, const char *name, const char *message) { if (!name) return 0; diff --git a/src/libelogind/sd-bus/bus-error.h b/src/libelogind/sd-bus/bus-error.h index 93cb9acd9..45146fe81 100644 --- a/src/libelogind/sd-bus/bus-error.h +++ b/src/libelogind/sd-bus/bus-error.h @@ -47,3 +47,5 @@ int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_lis #define BUS_ERROR_MAP_END_MARKER -'x' BUS_ERROR_MAP_ELF_USE(bus_standard_errors); + +int sd_bus_error_move(sd_bus_error *dest, sd_bus_error *e); |