From 14d5f25dd06901df741905b3c44879ef3fc65e05 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 24 Oct 2022 12:38:15 +0100 Subject: [PATCH] gfileutils: Mention possibility of relative paths in g_file_read_link() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s entirely possible that `g_file_read_link()` will return a relative path. Mention that in the documentation, and include a short example of how to make the path absolute for further computation. Signed-off-by: Philip Withnall --- glib/gfileutils.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/glib/gfileutils.c b/glib/gfileutils.c index 4ee16e894..f0c8f6776 100644 --- a/glib/gfileutils.c +++ b/glib/gfileutils.c @@ -2256,9 +2256,28 @@ g_build_filename (const gchar *first_element, * @error: return location for a #GError * * Reads the contents of the symbolic link @filename like the POSIX - * readlink() function. The returned string is in the encoding used + * readlink() function. + * + * The returned string is in the encoding used * for filenames. Use g_filename_to_utf8() to convert it to UTF-8. * + * The returned string may also be a relative path. Use g_build_filename() to + * convert it to an absolute path: + * |[ + * g_autoptr(GError) local_error = NULL; + * g_autofree gchar *link_target = g_file_read_link ("/etc/localtime", &local_error); + * + * if (local_error != NULL) + * g_error ("Error reading link: %s", local_error->message); + * + * if (!g_path_is_absolute (link_target)) + * { + * g_autofree gchar *absolute_link_target = g_build_filename ("/etc", link_target, NULL); + * g_free (link_target); + * link_target = g_steal_pointer (&absolute_link_target); + * } + * ]| + * * Returns: (type filename) (transfer full): A newly-allocated string with * the contents of the symbolic link, or %NULL if an error occurred. *