summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2025-01-16 22:41:31 +0100
committerGitHub <noreply@github.com>2025-01-16 22:41:31 +0100
commit4e97e697c048786c02ece100ec975e5c5b011358 (patch)
treecf612179f7c1b461a52e11810439356b148f1bf3 /src
parentTwo readme tweaks (#36053) (diff)
parentfundamental-macro: conditionalize several gcc warning pragmas (diff)
downloadsystemd-4e97e697c048786c02ece100ec975e5c5b011358.tar.xz
systemd-4e97e697c048786c02ece100ec975e5c5b011358.zip
Several fixlets for GCC warnings (#36051)
Replaces #36043 and #36039.
Diffstat (limited to 'src')
-rw-r--r--src/basic/macro.h9
-rw-r--r--src/boot/meson.build6
-rw-r--r--src/fundamental/macro-fundamental.h22
-rw-r--r--src/nss-systemd/nss-systemd.c4
-rw-r--r--src/resolve/resolved-dns-dnssec.c15
-rw-r--r--src/shared/ethtool-util.c8
6 files changed, 41 insertions, 23 deletions
diff --git a/src/basic/macro.h b/src/basic/macro.h
index 68eb7bbd0e..026ec13637 100644
--- a/src/basic/macro.h
+++ b/src/basic/macro.h
@@ -30,15 +30,6 @@
#define _function_no_sanitize_float_cast_overflow_
#endif
-#if HAVE_WSTRINGOP_TRUNCATION
-# define DISABLE_WARNING_STRINGOP_TRUNCATION \
- _Pragma("GCC diagnostic push"); \
- _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
-#else
-# define DISABLE_WARNING_STRINGOP_TRUNCATION \
- _Pragma("GCC diagnostic push")
-#endif
-
/* test harness */
#define EXIT_TEST_SKIP 77
diff --git a/src/boot/meson.build b/src/boot/meson.build
index cc5102c551..f726996233 100644
--- a/src/boot/meson.build
+++ b/src/boot/meson.build
@@ -74,6 +74,12 @@ if conf.get('ENABLE_BOOTLOADER') != 1
endif
efi_conf = configuration_data()
+
+# import several configs from userspace
+foreach name : ['HAVE_WARNING_ZERO_LENGTH_BOUNDS', 'HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT']
+ efi_conf.set10(name, conf.get(name) == 1)
+endforeach
+
efi_conf.set10('ENABLE_TPM', get_option('tpm'))
foreach ctype : ['color-normal', 'color-entry', 'color-highlight', 'color-edit']
diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h
index 709657dd28..5eb31cd742 100644
--- a/src/fundamental/macro-fundamental.h
+++ b/src/fundamental/macro-fundamental.h
@@ -48,6 +48,28 @@
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waddress\"")
+#define DISABLE_WARNING_STRINGOP_TRUNCATION \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
+
+#if HAVE_WARNING_ZERO_LENGTH_BOUNDS
+# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wzero-length-bounds\"")
+#else
+# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \
+ _Pragma("GCC diagnostic push")
+#endif
+
+#if HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT
+# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \
+ _Pragma("GCC diagnostic push"); \
+ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"")
+#else
+# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \
+ _Pragma("GCC diagnostic push")
+#endif
+
#define REENABLE_WARNING \
_Pragma("GCC diagnostic pop")
diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c
index d686d920fc..683352fab9 100644
--- a/src/nss-systemd/nss-systemd.c
+++ b/src/nss-systemd/nss-systemd.c
@@ -101,6 +101,9 @@ typedef struct GetentData {
bool by_membership;
} GetentData;
+/* On current glibc PTHREAD_MUTEX_INITIALIZER is defined in a way incompatible with
+ * -Wzero-as-null-pointer-constant, work around this for now. */
+DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT;
static GetentData getpwent_data = {
.mutex = PTHREAD_MUTEX_INITIALIZER,
};
@@ -116,6 +119,7 @@ static GetentData getspent_data = {
static GetentData getsgent_data = {
.mutex = PTHREAD_MUTEX_INITIALIZER,
};
+REENABLE_WARNING;
static void setup_logging_once(void) {
static pthread_once_t once = PTHREAD_ONCE_INIT;
diff --git a/src/resolve/resolved-dns-dnssec.c b/src/resolve/resolved-dns-dnssec.c
index 09cc2cb731..aff185a2dd 100644
--- a/src/resolve/resolved-dns-dnssec.c
+++ b/src/resolve/resolved-dns-dnssec.c
@@ -15,11 +15,10 @@
#include "string-table.h"
#if PREFER_OPENSSL && OPENSSL_VERSION_MAJOR >= 3
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+DISABLE_WARNING_DEPRECATED_DECLARATIONS;
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(RSA*, RSA_free, NULL);
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_KEY*, EC_KEY_free, NULL);
-# pragma GCC diagnostic pop
+REENABLE_WARNING;
#endif
#define VERIFY_RRS_MAX 256
@@ -101,8 +100,7 @@ static int dnssec_rsa_verify_raw(
int r;
#if PREFER_OPENSSL
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ DISABLE_WARNING_DEPRECATED_DECLARATIONS;
_cleanup_(RSA_freep) RSA *rpubkey = NULL;
_cleanup_(EVP_PKEY_freep) EVP_PKEY *epubkey = NULL;
_cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL;
@@ -153,7 +151,7 @@ static int dnssec_rsa_verify_raw(
return log_debug_errno(SYNTHETIC_ERRNO(EIO),
"Signature verification failed: 0x%lx", ERR_get_error());
-# pragma GCC diagnostic pop
+ REENABLE_WARNING;
#else
gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
gcry_mpi_t n = NULL, e = NULL, s = NULL;
@@ -303,8 +301,7 @@ static int dnssec_ecdsa_verify_raw(
int k;
#if PREFER_OPENSSL
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ DISABLE_WARNING_DEPRECATED_DECLARATIONS;
_cleanup_(EC_GROUP_freep) EC_GROUP *ec_group = NULL;
_cleanup_(EC_POINT_freep) EC_POINT *p = NULL;
_cleanup_(EC_KEY_freep) EC_KEY *eckey = NULL;
@@ -365,7 +362,7 @@ static int dnssec_ecdsa_verify_raw(
return log_debug_errno(SYNTHETIC_ERRNO(EIO),
"Signature verification failed: 0x%lx", ERR_get_error());
-# pragma GCC diagnostic pop
+ REENABLE_WARNING;
#else
gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL;
gcry_mpi_t q = NULL, r = NULL, s = NULL;
diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c
index 51c75780cd..aeed917a6a 100644
--- a/src/shared/ethtool-util.c
+++ b/src/shared/ethtool-util.c
@@ -11,6 +11,7 @@
#include "extract-word.h"
#include "fd-util.h"
#include "log.h"
+#include "macro-fundamental.h"
#include "memory-util.h"
#include "socket-util.h"
#include "string-table.h"
@@ -452,12 +453,9 @@ static int get_stringset(int ethtool_fd, const char *ifname, enum ethtool_string
if (buffer.info.sset_mask == 0)
return -EOPNOTSUPP;
-#pragma GCC diagnostic push
-#if HAVE_ZERO_LENGTH_BOUNDS
-# pragma GCC diagnostic ignored "-Wzero-length-bounds"
-#endif
+ DISABLE_WARNING_ZERO_LENGTH_BOUNDS;
len = buffer.info.data[0];
-#pragma GCC diagnostic pop
+ REENABLE_WARNING;
if (len == 0)
return -EOPNOTSUPP;