From 62d6a1cc9f89734db245f208643c052ce6e1e56c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Nov 2018 11:09:03 +0100 Subject: [PATCH] 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() --- src/shared/pretty-print.c | 52 +++++++++++++++++++++++++-------------- src/shared/pretty-print.h | 2 ++ 2 files changed, 35 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); } diff --git a/src/shared/pretty-print.h b/src/shared/pretty-print.h index cf9a70dd9e..12ab9acf58 100644 --- a/src/shared/pretty-print.h +++ b/src/shared/pretty-print.h @@ -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);