]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal-util: split out file:// generation from terminal_urlify_path()
authorLennart Poettering <lennart@poettering.net>
Wed, 7 Nov 2018 10:09:03 +0000 (11:09 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 30 Nov 2018 15:46:10 +0000 (16:46 +0100)
This way we can use it at other places, for example when preparing URLs
for format_table_set_url()

src/shared/pretty-print.c
src/shared/pretty-print.h

index 108601864550576d6b9ccca6b6f6cf7ff5cc9697..de6274a3dab91b568791811dce7ecd01ea2a343c 100644 (file)
@@ -60,10 +60,38 @@ int terminal_urlify(const char *url, const char *text, char **ret) {
         return 0;
 }
 
-int terminal_urlify_path(const char *path, const char *text, char **ret) {
+int file_url_from_path(const char *path, char **ret) {
         _cleanup_free_ char *absolute = NULL;
         struct utsname u;
-        const char *url;
+        char *url = NULL;
+        int r;
+
+        if (uname(&u) < 0)
+                return -errno;
+
+        if (!path_is_absolute(path)) {
+                r = path_make_absolute_cwd(path, &absolute);
+                if (r < 0)
+                        return r;
+
+                path = absolute;
+        }
+
+        /* As suggested by https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda, let's include the local
+         * hostname here. Note that we don't use gethostname_malloc() or gethostname_strict() since we are interested
+         * in the raw string the kernel has set, whatever it may be, under the assumption that terminals are not overly
+         * careful with validating the strings either. */
+
+        url = strjoin("file://", u.nodename, path);
+        if (!url)
+                return -ENOMEM;
+
+        *ret = url;
+        return 0;
+}
+
+int terminal_urlify_path(const char *path, const char *text, char **ret) {
+        _cleanup_free_ char *url = NULL;
         int r;
 
         assert(path);
@@ -88,23 +116,9 @@ int terminal_urlify_path(const char *path, const char *text, char **ret) {
                 return 0;
         }
 
-        if (uname(&u) < 0)
-                return -errno;
-
-        if (!path_is_absolute(path)) {
-                r = path_make_absolute_cwd(path, &absolute);
-                if (r < 0)
-                        return r;
-
-                path = absolute;
-        }
-
-        /* As suggested by https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda, let's include the local
-         * hostname here. Note that we don't use gethostname_malloc() or gethostname_strict() since we are interested
-         * in the raw string the kernel has set, whatever it may be, under the assumption that terminals are not overly
-         * careful with validating the strings either. */
-
-        url = strjoina("file://", u.nodename, path);
+        r = file_url_from_path(path, &url);
+        if (r < 0)
+                return r;
 
         return terminal_urlify(url, text, ret);
 }
index cf9a70dd9e6abd7128563aa9055a38f9bd8675db..12ab9acf58ba41fcb3a039d2fbc98d31ab2af590 100644 (file)
@@ -3,6 +3,8 @@
 
 void print_separator(void);
 
+int file_url_from_path(const char *path, char **ret);
+
 int terminal_urlify(const char *url, const char *text, char **ret);
 int terminal_urlify_path(const char *path, const char *text, char **ret);
 int terminal_urlify_man(const char *page, const char *section, char **ret);