} 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 */
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)
.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 {