From d36d9567709c8dfe1810ef6fc39cb5cc24e4a8f5 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 30 Sep 2016 22:03:34 +0200 Subject: [PATCH] libgimpconfig: add gimp_file_new_for_config_path() and _get_config_path() Which turn a UTF-8 encoded config path directly into a GFile and back, using gimp_config_path_expand() and _unexpand(). --- libgimpconfig/gimpconfig-path.c | 79 +++++++++++++++++++++++++++++++++ libgimpconfig/gimpconfig-path.h | 5 +++ libgimpconfig/gimpconfig.def | 2 + 3 files changed, 86 insertions(+) diff --git a/libgimpconfig/gimpconfig-path.c b/libgimpconfig/gimpconfig-path.c index 05479c89f5..95205dec69 100644 --- a/libgimpconfig/gimpconfig-path.c +++ b/libgimpconfig/gimpconfig-path.c @@ -410,6 +410,85 @@ gimp_config_path_unexpand (const gchar *path, return gimp_config_path_unexpand_only (path); } +/** + * gimp_file_new_for_config_path: + * @path: a NUL-terminated string in UTF-8 encoding + * @error: return location for errors + * + * Expands @path using gimp_config_path_expand() and returns a #GFile + * for the expanded path. + * + * To reverse the expansion, use gimp_file_get_config_path(). + * + * Return value: a newly allocated #GFile, or %NULL if the expansion failed. + * + * Since: 2.10 + **/ +GFile * +gimp_file_new_for_config_path (const gchar *path, + GError **error) +{ + GFile *file = NULL; + gchar *expanded; + + g_return_val_if_fail (path != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + expanded = gimp_config_path_expand (path, TRUE, error); + + if (expanded) + { + file = g_file_new_for_path (expanded); + g_free (expanded); + } + + return file; +} + +/** + * gimp_file_new_for_config_path: + * @file: a #GFile + * @error: return location for errors + * + * Unexpands @file's path using gimp_config_path_unexpand() and + * returns the unexpanded path. + * + * The inverse operation of gimp_file_new_for_config_path(). + * + * Return value: a newly allocated NUL-terminated UTF-8 string, or %NULL if + * unexpanding failed. + * + * Since: 2.10 + **/ +gchar * +gimp_file_get_config_path (GFile *file, + GError **error) +{ + gchar *unexpanded = NULL; + gchar *path; + + g_return_val_if_fail (G_IS_FILE (file), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + path = g_file_get_path (file); + + if (path) + { + unexpanded = gimp_config_path_unexpand (path, TRUE, error); + g_free (path); + } + else + { + g_set_error_literal (error, 0, 0, + _("File has no path represantation")); + } + + return unexpanded; +} + + +/* private functions */ + #define SUBSTS_ALLOC 4 static gchar * diff --git a/libgimpconfig/gimpconfig-path.h b/libgimpconfig/gimpconfig-path.h index 783124a585..eae987211f 100644 --- a/libgimpconfig/gimpconfig-path.h +++ b/libgimpconfig/gimpconfig-path.h @@ -84,6 +84,11 @@ gchar * gimp_config_path_unexpand (const gchar *path, gboolean recode, GError **error) G_GNUC_MALLOC; +GFile * gimp_file_new_for_config_path (const gchar *path, + GError **error) G_GNUC_MALLOC; +gchar * gimp_file_get_config_path (GFile *file, + GError **error) G_GNUC_MALLOC; + gchar * gimp_config_build_data_path (const gchar *name) G_GNUC_MALLOC; gchar * gimp_config_build_writable_path (const gchar *name) G_GNUC_MALLOC; gchar * gimp_config_build_plug_in_path (const gchar *name) G_GNUC_MALLOC; diff --git a/libgimpconfig/gimpconfig.def b/libgimpconfig/gimpconfig.def index f4c49468e1..5e4fc5bef5 100644 --- a/libgimpconfig/gimpconfig.def +++ b/libgimpconfig/gimpconfig.def @@ -70,6 +70,8 @@ EXPORTS gimp_config_writer_printf gimp_config_writer_revert gimp_config_writer_string + gimp_file_get_config_path + gimp_file_new_for_config_path gimp_param_config_path_get_type gimp_param_spec_config_path gimp_param_spec_config_path_type