]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/specifier: clarify and add test for missing data
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 8 Mar 2022 10:38:46 +0000 (11:38 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Mar 2022 14:17:56 +0000 (16:17 +0200)
In systemd.unit we document that unset fields resolve to "". But we didn't
directly test this, so let's do that. Also, we return -ENOENT if the file
is missing, which we didn't document or test.

src/shared/specifier.c
src/test/test-specifier.c

index a02012407ba518640fc25725a2c005941dd404bd..df52f8cf8183b5263b755ed58bb56222dfd91d89 100644 (file)
@@ -269,7 +269,9 @@ int specifier_architecture(char specifier, const void *data, const char *root, c
 }
 
 /* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid
- * otherwise. We'll return an empty value or NULL in that case from the functions below. */
+ * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the
+ * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the
+ * installation. */
 
 int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
         assert(ret);
index 231625de958ccb453be5197144a99a2b24cc5d94..5ece520e9b4ce48191bc2c8cbab841253327c887 100644 (file)
@@ -138,4 +138,18 @@ TEST(specifiers) {
         }
 }
 
+TEST(specifiers_missing_data_ok) {
+        _cleanup_free_ char *resolved = NULL;
+
+        assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
+        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
+        assert_se(streq(resolved, "-----"));
+
+        assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
+        assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT);
+        assert_se(streq(resolved, "-----"));
+
+        assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
+}
+
 DEFINE_TEST_MAIN(LOG_DEBUG);