]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
specifiers: introduce common macros for generating specifier tables
authorLennart Poettering <lennart@poettering.net>
Fri, 20 Nov 2020 14:15:24 +0000 (15:15 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 25 Nov 2020 05:13:02 +0000 (14:13 +0900)
In many cases the tables are largely the same, hence define a common set
of macros to generate the common parts.

This adds in a couple of missing specifiers here and there, so is more
thant just refactoring: it actually fixes accidental omissions.

Note that some entries that look like they could be unified under these
macros can't really be unified, since they are slightly different. For
example in the DNSSD service logic we want to use the DNSSD hostname for
%H rather than the unmodified kernel one.

src/core/unit-printf.c
src/partition/repart.c
src/shared/install-printf.c
src/shared/specifier.h
src/sysusers/sysusers.c
src/test/test-specifier.c
src/test/test-strv.c
src/tmpfiles/tmpfiles.c

index 27f09b3491b480a4f59887eaca98b96e77c03ba6..ba3e6456b7a49840096faebda302cb48d0a619c3 100644 (file)
@@ -203,20 +203,9 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) {
                 { 'i', specifier_string,              u->instance },
                 { 'j', specifier_last_component,      NULL },
 
-                { 'g', specifier_group_name,          NULL },
-                { 'G', specifier_group_id,            NULL },
-                { 'U', specifier_user_id,             NULL },
-                { 'u', specifier_user_name,           NULL },
-
-                { 'm', specifier_machine_id,          NULL },
-                { 'b', specifier_boot_id,             NULL },
-                { 'H', specifier_host_name,           NULL },
-                { 'v', specifier_kernel_release,      NULL },
-                { 'a', specifier_architecture,        NULL },
-                { 'o', specifier_os_id,               NULL },
-                { 'w', specifier_os_version_id,       NULL },
-                { 'B', specifier_os_build_id,         NULL },
-                { 'W', specifier_os_variant_id,       NULL },
+                COMMON_CREDS_SPECIFIERS,
+
+                COMMON_SYSTEM_SPECIFIERS,
                 {}
         };
 
@@ -279,21 +268,13 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
                 { 'C', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_CACHE) },
                 { 'L', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
                 { 'E', specifier_special_directory,        UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) },
-                { 'T', specifier_tmp_dir,                  NULL },
-                { 'V', specifier_var_tmp_dir,              NULL },
+                COMMON_TMP_SPECIFIERS,
 
-                { 'g', specifier_group_name,               NULL },
-                { 'G', specifier_group_id,                 NULL },
-                { 'U', specifier_user_id,                  NULL },
-                { 'u', specifier_user_name,                NULL },
+                COMMON_CREDS_SPECIFIERS,
                 { 'h', specifier_user_home,                NULL },
                 { 's', specifier_user_shell,               NULL },
 
-                { 'm', specifier_machine_id,               NULL },
-                { 'H', specifier_host_name,                NULL },
-                { 'l', specifier_short_host_name,          NULL },
-                { 'b', specifier_boot_id,                  NULL },
-                { 'v', specifier_kernel_release,           NULL },
+                COMMON_SYSTEM_SPECIFIERS,
                 {}
         };
 
index 40e0d6895c5c30efbd4bdc820dceb5ba7b08ca74..6db413ed5e2b568ccbca4f7a47f7ad6f6c9376e7 100644 (file)
@@ -918,16 +918,7 @@ static int config_parse_type(
 }
 
 static const Specifier specifier_table[] = {
-        { 'm', specifier_machine_id,      NULL },
-        { 'b', specifier_boot_id,         NULL },
-        { 'H', specifier_host_name,       NULL },
-        { 'l', specifier_short_host_name, NULL },
-        { 'v', specifier_kernel_release,  NULL },
-        { 'a', specifier_architecture,    NULL },
-        { 'o', specifier_os_id,           NULL },
-        { 'w', specifier_os_version_id,   NULL },
-        { 'B', specifier_os_build_id,     NULL },
-        { 'W', specifier_os_variant_id,   NULL },
+        COMMON_SYSTEM_SPECIFIERS,
         {}
 };
 
index af350a63a5c763e694c9fd89f3930f4154b1e5cb..7f60359c78abe65b4d3df1d41853fd2c350bc5f8 100644 (file)
@@ -127,20 +127,9 @@ int install_full_printf(const UnitFileInstallInfo *i, const char *format, char *
                 { 'i', specifier_instance,            NULL },
                 { 'j', specifier_last_component,      NULL },
 
-                { 'g', specifier_group_name,          NULL },
-                { 'G', specifier_group_id,            NULL },
-                { 'U', specifier_user_id,             NULL },
-                { 'u', specifier_user_name,           NULL },
-
-                { 'm', specifier_machine_id,          NULL },
-                { 'b', specifier_boot_id,             NULL },
-                { 'H', specifier_host_name,           NULL },
-                { 'v', specifier_kernel_release,      NULL },
-                { 'a', specifier_architecture,        NULL },
-                { 'o', specifier_os_id,               NULL },
-                { 'w', specifier_os_version_id,       NULL },
-                { 'B', specifier_os_build_id,         NULL },
-                { 'W', specifier_os_variant_id,       NULL },
+                COMMON_CREDS_SPECIFIERS,
+
+                COMMON_SYSTEM_SPECIFIERS,
                 {}
         };
 
index f3c038a1f166577daf623cf22c7a73d50a89fb53..e01ee67db3c544546fa8784f5e44d0caf8f7c9a9 100644 (file)
@@ -36,6 +36,30 @@ int specifier_user_shell(char specifier, const void *data, const void *userdata,
 int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
 int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
 
+/* Typically, in places where one of the above specifier is to be resolved the other similar ones are to be
+ * resolved, too. Hence let's define common macros for the relevant array entries. */
+#define COMMON_SYSTEM_SPECIFIERS                  \
+        { 'm', specifier_machine_id,      NULL }, \
+        { 'b', specifier_boot_id,         NULL }, \
+        { 'H', specifier_host_name,       NULL }, \
+        { 'l', specifier_short_host_name, NULL }, \
+        { 'v', specifier_kernel_release,  NULL }, \
+        { 'a', specifier_architecture,    NULL }, \
+        { 'o', specifier_os_id,           NULL }, \
+        { 'w', specifier_os_version_id,   NULL }, \
+        { 'B', specifier_os_build_id,     NULL }, \
+        { 'W', specifier_os_variant_id,   NULL }
+
+#define COMMON_CREDS_SPECIFIERS                   \
+        { 'g', specifier_group_name,      NULL }, \
+        { 'G', specifier_group_id,        NULL }, \
+        { 'U', specifier_user_id,         NULL }, \
+        { 'u', specifier_user_name,       NULL }
+
+#define COMMON_TMP_SPECIFIERS                     \
+        { 'T', specifier_tmp_dir,         NULL }, \
+        { 'V', specifier_var_tmp_dir,     NULL }
+
 static inline char* specifier_escape(const char *string) {
         return strreplace(string, "%", "%%");
 }
index 9a8838d5eb81dc6eb744e0d3c015b2bf55b0557a..6b0acd529e48ce7f9e5e4841e0190f96ddb50ad4 100644 (file)
@@ -1391,18 +1391,8 @@ static bool item_equal(Item *a, Item *b) {
 static int parse_line(const char *fname, unsigned line, const char *buffer) {
 
         static const Specifier specifier_table[] = {
-                { 'm', specifier_machine_id,      NULL },
-                { 'b', specifier_boot_id,         NULL },
-                { 'H', specifier_host_name,       NULL },
-                { 'l', specifier_short_host_name, NULL },
-                { 'v', specifier_kernel_release,  NULL },
-                { 'a', specifier_architecture,    NULL },
-                { 'o', specifier_os_id,           NULL },
-                { 'w', specifier_os_version_id,   NULL },
-                { 'B', specifier_os_build_id,     NULL },
-                { 'W', specifier_os_variant_id,   NULL },
-                { 'T', specifier_tmp_dir,         NULL },
-                { 'V', specifier_var_tmp_dir,     NULL },
+                COMMON_SYSTEM_SPECIFIERS,
+                COMMON_TMP_SPECIFIERS,
                 {}
         };
 
index b1e8a61021e8395248e2b26d9db83471a74e0636..2648c1c3f516377835358e5bfb1cb3f64bc6f60b 100644 (file)
@@ -47,25 +47,12 @@ static void test_specifier_escape_strv(void) {
 
 /* Any specifier functions which don't need an argument. */
 static const Specifier specifier_table[] = {
-        { 'm', specifier_machine_id,      NULL },
-        { 'b', specifier_boot_id,         NULL },
-        { 'H', specifier_host_name,       NULL },
-        { 'l', specifier_short_host_name, NULL },
-        { 'v', specifier_kernel_release,  NULL },
-        { 'a', specifier_architecture,    NULL },
-        { 'o', specifier_os_id,           NULL },
-        { 'w', specifier_os_version_id,   NULL },
-        { 'B', specifier_os_build_id,     NULL },
-        { 'W', specifier_os_variant_id,   NULL },
-
-        { 'g', specifier_group_name,      NULL },
-        { 'G', specifier_group_id,        NULL },
-        { 'U', specifier_user_id,         NULL },
-        { 'u', specifier_user_name,       NULL },
+        COMMON_SYSTEM_SPECIFIERS,
+
+        COMMON_CREDS_SPECIFIERS,
         { 'h', specifier_user_home,       NULL },
 
-        { 'T', specifier_tmp_dir,         NULL },
-        { 'V', specifier_var_tmp_dir,     NULL },
+        COMMON_TMP_SPECIFIERS,
         {}
 };
 
index 0c46af05cca0e8a9883768df09f3c8ebd82fd52f..6b5005f9fc9cedf6a90d556e48d4585e36a76117 100644 (file)
@@ -11,15 +11,7 @@ static void test_specifier_printf(void) {
         static const Specifier table[] = {
                 { 'X', specifier_string,         (char*) "AAAA" },
                 { 'Y', specifier_string,         (char*) "BBBB" },
-                { 'm', specifier_machine_id,     NULL },
-                { 'b', specifier_boot_id,        NULL },
-                { 'H', specifier_host_name,      NULL },
-                { 'v', specifier_kernel_release, NULL },
-                { 'a', specifier_architecture,   NULL },
-                { 'o', specifier_os_id,          NULL },
-                { 'w', specifier_os_version_id,  NULL },
-                { 'B', specifier_os_build_id,    NULL },
-                { 'W', specifier_os_variant_id,  NULL },
+                COMMON_SYSTEM_SPECIFIERS,
                 {}
         };
 
index eb63bc38073a8ff35571ead10d8c2d0c02843777..684762c842b5a27b1206cdb22f1252873f4bdbe5 100644 (file)
@@ -199,18 +199,14 @@ static const Specifier specifier_table[] = {
         { 'B', specifier_os_build_id,     NULL },
         { 'W', specifier_os_variant_id,   NULL },
 
-        { 'g', specifier_group_name,      NULL },
-        { 'G', specifier_group_id,        NULL },
-        { 'U', specifier_user_id,         NULL },
-        { 'u', specifier_user_name,       NULL },
+        COMMON_CREDS_SPECIFIERS,
         { 'h', specifier_user_home,       NULL },
 
         { 't', specifier_directory,       UINT_TO_PTR(DIRECTORY_RUNTIME) },
         { 'S', specifier_directory,       UINT_TO_PTR(DIRECTORY_STATE) },
         { 'C', specifier_directory,       UINT_TO_PTR(DIRECTORY_CACHE) },
         { 'L', specifier_directory,       UINT_TO_PTR(DIRECTORY_LOGS) },
-        { 'T', specifier_tmp_dir,         NULL },
-        { 'V', specifier_var_tmp_dir,     NULL },
+        COMMON_TMP_SPECIFIERS,
         {}
 };