summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2020-01-07 16:21:31 +0100
committerJulian Andres Klode <julian.klode@canonical.com>2020-01-07 16:24:16 +0100
commitf2ad6eb0c579f1c825aa1efec192b4d4eb5e6171 (patch)
treed22e13ea32624ac3a0e783af4c480ec54bf1fbfa
parent507f9ae50fb0078d41ac308ab8e68caacab2acd2 (diff)
Avoid #define _error, use anonymous C++ struct instead
Replace the macro with an anonymous struct that provides an inline operator->() returning the _error pointer. This change is ABI compatible, and the inline macro is not exported. We should consider if we want to avoid the function call and directly export the thread_local variable instead, when we do break ABI. Closes: #948338
-rw-r--r--apt-pkg/contrib/error.h4
-rw-r--r--apt-pkg/contrib/macros.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h
index d0f450742..b6291572e 100644
--- a/apt-pkg/contrib/error.h
+++ b/apt-pkg/contrib/error.h
@@ -360,6 +360,8 @@ private: /*{{{*/
// The 'extra-ansi' syntax is used to help with collisions.
GlobalError *_GetErrorObj();
-#define _error _GetErrorObj()
+static struct {
+ inline GlobalError* operator ->() { return _GetErrorObj(); }
+} _error APT_UNUSED APT_PKG_590("Consider rewriting this");
#endif
diff --git a/apt-pkg/contrib/macros.h b/apt-pkg/contrib/macros.h
index 4d9f780c7..c19cb313d 100644
--- a/apt-pkg/contrib/macros.h
+++ b/apt-pkg/contrib/macros.h
@@ -79,6 +79,7 @@
#define APT_NORETURN __attribute__((noreturn))
#define APT_PRINTF(n) __attribute__((format(printf, n, n + 1)))
#define APT_WEAK __attribute__((weak));
+ #define APT_UNUSED __attribute__((unused))
#else
#define APT_DEPRECATED
#define APT_DEPRECATED_MSG
@@ -87,6 +88,7 @@
#define APT_NORETURN
#define APT_PRINTF(n)
#define APT_WEAK
+ #define APT_UNUSED
#endif
#if APT_GCC_VERSION > 0x0302