]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: unify how we pick OS pretty name to display
authorLennart Poettering <lennart@poettering.net>
Mon, 23 Jan 2023 11:28:38 +0000 (12:28 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 24 Jan 2023 14:32:42 +0000 (15:32 +0100)
src/analyze/analyze-plot.c
src/basic/os-util.c
src/basic/os-util.h
src/core/main.c
src/firstboot/firstboot.c
src/hostname/hostnamed.c
src/journal-remote/journal-gatewayd.c

index 24f4add099f49e916d408fc35479a887dc11bb7b..8aca691b3d67206e5115a6190971df0db4cc6560 100644 (file)
@@ -6,6 +6,7 @@
 #include "bus-error.h"
 #include "bus-map-properties.h"
 #include "format-table.h"
+#include "os-util.h"
 #include "sort-util.h"
 #include "version.h"
 
@@ -283,7 +284,7 @@ static int produce_plot_as_svg(
         svg("<text x=\"20\" y=\"50\">%s</text>", pretty_times);
         if (host)
                 svg("<text x=\"20\" y=\"30\">%s %s (%s %s %s) %s %s</text>",
-                    isempty(host->os_pretty_name) ? "Linux" : host->os_pretty_name,
+                    os_release_pretty_name(host->os_pretty_name, NULL),
                     strempty(host->hostname),
                     strempty(host->kernel_name),
                     strempty(host->kernel_release),
index 9c21dc3bdc56e2cd7df725a0ab96e965180fb87e..7b84dcb702141af4130bcc60272ee5f481f09792 100644 (file)
@@ -370,3 +370,12 @@ int os_release_support_ended(const char *support_end, bool quiet) {
         usec_t ts = now(CLOCK_REALTIME);
         return DIV_ROUND_UP(ts, USEC_PER_SEC) > (usec_t) eol;
 }
+
+const char *os_release_pretty_name(const char *pretty_name, const char *name) {
+        /* Distills a "pretty" name to show from os-release data. First argument is supposed to be the
+         * PRETTY_NAME= field, the second one the NAME= field. This function is trivial, of course, and
+         * exists mostly to ensure we use the same logic wherever possible. */
+
+        return empty_to_null(pretty_name) ?:
+                empty_to_null(name) ?: "Linux";
+}
index d22f5ab8e7ba9e0c07fa6224435bd2ca0c59ddb4..1239f6f6b7a312bcf1e053b4555ff19f355db5c8 100644 (file)
@@ -33,3 +33,5 @@ int load_os_release_pairs(const char *root, char ***ret);
 int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret);
 
 int os_release_support_ended(const char *support_end, bool quiet);
+
+const char *os_release_pretty_name(const char *pretty_name, const char *name);
index 94055f08de90ec01b18610f77b51fe25ec777bd3..19e4f235b250372cd7b946a76c7fbb64762c6b37 100644 (file)
@@ -1371,7 +1371,7 @@ static int os_release_status(void) {
                 return log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
                                       "Failed to read os-release file, ignoring: %m");
 
-        const char *label = empty_to_null(pretty_name) ?: empty_to_null(name) ?: "Linux";
+        const char *label = os_release_pretty_name(pretty_name, name);
 
         if (show_status_on(arg_show_status)) {
                 if (log_get_show_color())
index 651415568d6caed7ed84a2a43f8958243151916b..45bb386da2b0a169b54e559790fa8a2f7dfc2661 100644 (file)
@@ -97,7 +97,7 @@ static bool press_any_key(void) {
 }
 
 static void print_welcome(void) {
-        _cleanup_free_ char *pretty_name = NULL, *ansi_color = NULL;
+        _cleanup_free_ char *pretty_name = NULL, *os_name = NULL, *ansi_color = NULL;
         static bool done = false;
         const char *pn, *ac;
         int r;
@@ -111,12 +111,13 @@ static void print_welcome(void) {
         r = parse_os_release(
                         arg_root,
                         "PRETTY_NAME", &pretty_name,
+                        "NAME", &os_name,
                         "ANSI_COLOR", &ansi_color);
         if (r < 0)
                 log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, r,
                                "Failed to read os-release file, ignoring: %m");
 
-        pn = isempty(pretty_name) ? "Linux" : pretty_name;
+        pn = os_release_pretty_name(pretty_name, os_name);
         ac = isempty(ansi_color) ? "0" : ansi_color;
 
         if (colors_enabled())
index a9782de4ff9a5396966e3eb7295535f69776d6a6..a17ecd2b9b070a3b1a2ecb1494274067728464b8 100644 (file)
@@ -146,6 +146,7 @@ static void context_read_machine_info(Context *c) {
 }
 
 static void context_read_os_release(Context *c) {
+        _cleanup_free_ char *os_name = NULL, *os_pretty_name = NULL;
         struct stat current_stat = {};
         int r;
 
@@ -162,12 +163,16 @@ static void context_read_os_release(Context *c) {
                       (UINT64_C(1) << PROP_OS_HOME_URL));
 
         r = parse_os_release(NULL,
-                             "PRETTY_NAME", &c->data[PROP_OS_PRETTY_NAME],
+                             "PRETTY_NAME", &os_pretty_name,
+                             "NAME", &os_name,
                              "CPE_NAME", &c->data[PROP_OS_CPE_NAME],
                              "HOME_URL", &c->data[PROP_OS_HOME_URL]);
         if (r < 0 && r != -ENOENT)
                 log_warning_errno(r, "Failed to read os-release file, ignoring: %m");
 
+        if (free_and_strdup(&c->data[PROP_OS_PRETTY_NAME], os_release_pretty_name(os_pretty_name, os_name)) < 0)
+                log_oom();
+
         c->etc_os_release_stat = current_stat;
 }
 
index 747e0be743b0cd09322d4c88ab8505c76c1a37e0..a792c75ccaf4ab4e8976c1f8c4497a2c3c87c7dc 100644 (file)
@@ -732,7 +732,7 @@ static int request_handler_machine(
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
         RequestMeta *m = ASSERT_PTR(connection_cls);
         int r;
-        _cleanup_free_ char* hostname = NULL, *os_name = NULL;
+        _cleanup_free_ char* hostname = NULL, *pretty_name = NULL, *os_name = NULL;
         uint64_t cutoff_from = 0, cutoff_to = 0, usage = 0;
         sd_id128_t mid, bid;
         _cleanup_free_ char *v = NULL, *json = NULL;
@@ -763,7 +763,10 @@ static int request_handler_machine(
         if (r < 0)
                 return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %m");
 
-        (void) parse_os_release(NULL, "PRETTY_NAME", &os_name);
+        (void) parse_os_release(
+                        NULL,
+                        "PRETTY_NAME", &pretty_name,
+                        "NAME=", &os_name);
         (void) get_virtualization(&v);
 
         r = asprintf(&json,
@@ -778,7 +781,7 @@ static int request_handler_machine(
                      SD_ID128_FORMAT_VAL(mid),
                      SD_ID128_FORMAT_VAL(bid),
                      hostname_cleanup(hostname),
-                     os_name ? os_name : "Linux",
+                     os_release_pretty_name(pretty_name, os_name),
                      v ? v : "bare",
                      usage,
                      cutoff_from,