summaryrefslogtreecommitdiff
path: root/src/shared/pretty-print.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-11-07 11:09:03 +0100
committerLennart Poettering <lennart@poettering.net>2018-11-30 16:46:10 +0100
commit62d6a1cc9f89734db245f208643c052ce6e1e56c (patch)
treedcfaf883593ee1f10e675f16f78fe7d1798d4b6f /src/shared/pretty-print.c
parent8a453c9dfca19e229f9ef3bc026dc2a775246875 (diff)
downloadsystemd-62d6a1cc9f89734db245f208643c052ce6e1e56c.tar.gz
terminal-util: split out file:// generation from terminal_urlify_path()
This way we can use it at other places, for example when preparing URLs for format_table_set_url()
Diffstat (limited to 'src/shared/pretty-print.c')
-rw-r--r--src/shared/pretty-print.c52
1 files changed, 33 insertions, 19 deletions
diff --git a/src/shared/pretty-print.c b/src/shared/pretty-print.c
index 1086018645..de6274a3da 100644
--- a/src/shared/pretty-print.c
+++ b/src/shared/pretty-print.c
@@ -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);
}