]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nss-systemd,strv: use a common definition of a non-NULL but empty strv
authorLennart Poettering <lennart@amutable.com>
Fri, 27 Feb 2026 22:34:58 +0000 (23:34 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 1 Mar 2026 07:51:14 +0000 (08:51 +0100)
Follow-up for: 239903d44c12f10b5fe7c1f8457ae5203e47d8cc

src/basic/macro.h
src/basic/strv.c
src/basic/strv.h
src/nss-systemd/nss-systemd.c

index b53805d5b81d695cf9389b1e15b11f9642bce79d..7001c331399d6b8396a2faa42f179f497ddc5adb 100644 (file)
@@ -152,7 +152,6 @@ static inline unsigned long ALIGN_POWER2(unsigned long u) {
         } while (false)
 
 #define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
-#define STRV_EMPTY ((char*[1]) { NULL })
 #define STRV_MAKE_CONST(...) ((const char* const*) ((const char*[]) { __VA_ARGS__, NULL }))
 
 /* Pointers range from NULL to POINTER_MAX */
index d930770f9e048f396962e8dff8bb0ab4b3c71bd9..6cbc9633ae175332a4de6aef03aee1102f68b933 100644 (file)
@@ -1297,3 +1297,5 @@ char** strv_filter_prefix(char * const *l, const char *prefix) {
 
         return TAKE_PTR(f);
 }
+
+const char* const strv_empty[] = { NULL };
index 4f7d5a82a4dbe7009c7dd91e9031f50f264876c7..7249d8a311767ced1b6add61bb8df9f2deeab2d6 100644 (file)
@@ -221,3 +221,9 @@ int string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const c
 int strv_rebreak_lines(char **l, size_t width, char ***ret);
 
 char** strv_filter_prefix(char * const *l, const char *prefix);
+
+/* whenever we need to initialize something with a constant non-NULL, but empty strv, we can use this shared
+ * one */
+extern const char* const strv_empty[1];
+
+#define STRV_EMPTY ((char**) strv_empty)
index 11384dbad8446dc548693a3e06907d64851c379c..6ed97f31a68f9a7e025835e9e1d7c6b9385c805f 100644 (file)
@@ -69,28 +69,28 @@ static const struct group root_group = {
         .gr_name = (char*) "root",
         .gr_gid = 0,
         .gr_passwd = (char*) PASSWORD_SEE_SHADOW,
-        .gr_mem = (char*[]) { NULL },
+        .gr_mem = STRV_EMPTY,
 };
 
 static const struct sgrp root_sgrp = {
         .sg_namp = (char*) "root",
         .sg_passwd = (char*) PASSWORD_LOCKED_AND_INVALID,
-        .sg_adm = (char*[]) { NULL },
-        .sg_mem = (char*[]) { NULL },
+        .sg_adm = STRV_EMPTY,
+        .sg_mem = STRV_EMPTY,
 };
 
 static const struct group nobody_group = {
         .gr_name = (char*) NOBODY_GROUP_NAME,
         .gr_gid = GID_NOBODY,
         .gr_passwd = (char*) PASSWORD_LOCKED_AND_INVALID,
-        .gr_mem = (char*[]) { NULL },
+        .gr_mem = STRV_EMPTY,
 };
 
 static const struct sgrp nobody_sgrp = {
         .sg_namp = (char*) NOBODY_GROUP_NAME,
         .sg_passwd = (char*) PASSWORD_LOCKED_AND_INVALID,
-        .sg_adm = (char*[]) { NULL },
-        .sg_mem = (char*[]) { NULL },
+        .sg_adm = STRV_EMPTY,
+        .sg_mem = STRV_EMPTY,
 };
 
 typedef struct GetentData {