chiark / gitweb /
Make bus errno mappings non-static
[elogind.git] / src / systemd / sd-bus.h
index c95b5e7ab0388cafdb7cc810274654ba71e2b145..21a6412f0e9bfb0e3d2f95f1b1a4ef8aa710000c 100644 (file)
@@ -334,14 +334,24 @@ typedef struct sd_bus_name_error_mapping sd_bus_name_error_mapping;
 
 #define SD_BUS_ERROR_MAKE_CONST(name, message) ((const sd_bus_error) {(name), (message), 0})
 #define SD_BUS_ERROR_NULL SD_BUS_ERROR_MAKE_CONST(NULL, NULL)
+
 #ifndef SD_BUS_ERROR_MAPPING
 #  define _SD_BUS_ERROR_XCONCAT(x, y) x ## y
 #  define _SD_BUS_ERROR_CONCAT(x, y) _SD_BUS_ERROR_XCONCAT(x, y)
-#  define SD_BUS_ERROR_MAPPING \
-        __attribute((__section__("sd_bus_errnomap"))) __attribute((__used__)) \
-        static const sd_bus_name_error_mapping _SD_BUS_ERROR_CONCAT(_sd_bus_errno_mapping_, __COUNTER__)[]
+#  define SD_BUS_ERROR_MAPPING(name)                                    \
+        __attribute((__section__("sd_bus_errnomap")))                   \
+        __attribute((__used__))                                         \
+        const sd_bus_name_error_mapping _SD_BUS_ERROR_CONCAT(_sd_bus_errno_mapping_, name)[]
+#  define SD_BUS_ERROR_MAPPING_USE(name)                                \
+        extern                                                          \
+        const sd_bus_name_error_mapping _SD_BUS_ERROR_CONCAT(_sd_bus_errno_mapping_, name)[]; \
+        __attribute((__used__))                                         \
+        static const sd_bus_name_error_mapping*                         \
+        _SD_BUS_ERROR_CONCAT(sd_bus_name_error_mapping_ref, __COUNTER__) \
+        = _SD_BUS_ERROR_CONCAT(_sd_bus_errno_mapping_, name);
 #endif
 
+
 void sd_bus_error_free(sd_bus_error *e);
 int sd_bus_error_set(sd_bus_error *e, const char *name, const char *message);
 int sd_bus_error_setf(sd_bus_error *e, const char *name, const char *format, ...)  _sd_printf_(3, 4);