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()
This commit is contained in:
Lennart Poettering 2018-11-07 11:09:03 +01:00
parent 8a453c9dfc
commit 62d6a1cc9f
2 changed files with 35 additions and 19 deletions

View 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);
}

View 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);