summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-08-06 18:54:03 +0200
committerSven Eden <sven.eden@prydeworx.com>2018-10-29 10:18:33 +0100
commit2634a16622743398028be2a2a2b35b381af876cf (patch)
treeeaa78707220f5f65a129c72eb1ce26a9be886294 /src
parentd58d87e248af100e9c23a7c767847b7fb56ba6ef (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.c22
-rw-r--r--src/libelogind/sd-bus/bus-error.h2
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);