aboutsummaryrefslogtreecommitdiffstats
path: root/wsutil
diff options
context:
space:
mode:
Diffstat (limited to 'wsutil')
-rw-r--r--wsutil/filesystem.c23
-rw-r--r--wsutil/filesystem.h12
2 files changed, 35 insertions, 0 deletions
diff --git a/wsutil/filesystem.c b/wsutil/filesystem.c
index ed8b8c18c2..a7b2329f90 100644
--- a/wsutil/filesystem.c
+++ b/wsutil/filesystem.c
@@ -2121,6 +2121,29 @@ done:
return FALSE;
}
+gchar *
+data_file_url(const gchar *filename)
+{
+ gchar *file_path;
+ gchar *uri;
+
+ /* Absolute path? */
+ if(g_path_is_absolute(filename)) {
+ file_path = g_strdup(filename);
+ } else if(running_in_build_directory()) {
+ file_path = g_strdup_printf("%s/doc/%s", get_datafile_dir(), filename);
+ } else {
+ file_path = g_strdup_printf("%s/%s", get_datafile_dir(), filename);
+ }
+
+ /* XXX - check, if the file is really existing, otherwise display a simple_dialog about the problem */
+
+ /* convert filename to uri */
+ uri = g_filename_to_uri(file_path, NULL, NULL);
+ g_free(file_path);
+ return uri;
+}
+
/*
* Editor modelines
*
diff --git a/wsutil/filesystem.h b/wsutil/filesystem.h
index 137f0dae63..a45367a69b 100644
--- a/wsutil/filesystem.h
+++ b/wsutil/filesystem.h
@@ -292,6 +292,18 @@ WS_DLL_PUBLIC gboolean files_identical(const char *fname1, const char *fname2);
WS_DLL_PUBLIC gboolean copy_file_binary_mode(const char *from_filename,
const char *to_filename);
+
+/*
+ * Given a filename return a filesystem URL. Relative paths are prefixed with
+ * the datafile directory path.
+ *
+ * @param filename A file name or path. Relative paths will be prefixed with
+ * the data file directory path.
+ * @return A filesystem URL for the file or NULL on failure. A non-NULL return
+ * value must be freed with g_free().
+ */
+WS_DLL_PUBLIC gchar* data_file_url(const gchar *filename);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */