[libsecret/nielsdg/extract-get-secret-file-func: 1/2] file-backend: Extract function to return GFile




commit e1e5a39953ee03d421ff490b9f34f9e2d55e3dbe
Author: Niels De Graef <nielsdegraef gmail com>
Date:   Sat May 21 20:23:10 2022 +0200

    file-backend: Extract function to return GFile
    
    A small cleanup

 libsecret/secret-file-backend.c | 88 +++++++++++++++++++++++------------------
 1 file changed, 50 insertions(+), 38 deletions(-)
---
diff --git a/libsecret/secret-file-backend.c b/libsecret/secret-file-backend.c
index 7145f72..9c9dc12 100644
--- a/libsecret/secret-file-backend.c
+++ b/libsecret/secret-file-backend.c
@@ -60,6 +60,51 @@ enum {
        PROP_FLAGS
 };
 
+/* Gets the GFile for this backend and makes sure the parent dirs exist */
+static GFile *
+get_secret_file (GCancellable *cancellable, GError **error)
+{
+       const char *envvar = NULL;
+       char *path = NULL;
+       GFile *file = NULL;
+       GFile *dir = NULL;
+       gboolean ret;
+
+       envvar = g_getenv ("SECRET_FILE_TEST_PATH");
+       if (envvar != NULL && *envvar != '\0') {
+               path = g_strdup (envvar);
+       } else {
+               path = g_build_filename (g_get_user_data_dir (),
+                                        "keyrings",
+                                        SECRET_COLLECTION_DEFAULT ".keyring",
+                                        NULL);
+       }
+
+       file = g_file_new_for_path (path);
+       g_free (path);
+
+       dir = g_file_get_parent (file);
+       if (dir == NULL) {
+               g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                            "not a valid path");
+               g_object_unref (file);
+               return NULL;
+       }
+
+       ret = g_file_make_directory_with_parents (dir, cancellable, error);
+       g_object_unref (dir);
+       if (!ret) {
+               if (!g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS)) {
+                       g_object_unref (file);
+                       return NULL;
+               }
+
+               g_clear_error (error);
+       }
+
+       return file;
+}
+
 static void
 secret_file_backend_init (SecretFileBackend *self)
 {
@@ -426,55 +471,22 @@ secret_file_backend_real_init_async (GAsyncInitable *initable,
                                     GAsyncReadyCallback callback,
                                     gpointer user_data)
 {
-       gchar *path;
-       GFile *file;
-       GFile *dir;
+       const char *envvar = NULL;
+       GFile *file = NULL;
        SecretValue *password;
-       const gchar *envvar;
        GTask *task;
        GError *error = NULL;
        InitClosure *init;
-       gboolean ret;
 
        task = g_task_new (initable, cancellable, callback, user_data);
 
-       envvar = g_getenv ("SECRET_FILE_TEST_PATH");
-       if (envvar != NULL && *envvar != '\0')
-               path = g_strdup (envvar);
-       else {
-               path = g_build_filename (g_get_user_data_dir (),
-                                        "keyrings",
-                                        SECRET_COLLECTION_DEFAULT ".keyring",
-                                        NULL);
-       }
-
-       file = g_file_new_for_path (path);
-       g_free (path);
-
-       dir = g_file_get_parent (file);
-       if (dir == NULL) {
-               g_task_return_new_error (task,
-                                        G_IO_ERROR,
-                                        G_IO_ERROR_INVALID_ARGUMENT,
-                                        "not a valid path");
-               g_object_unref (file);
+       file = get_secret_file (cancellable, &error);
+       if (file == NULL) {
+               g_task_return_error (task, g_steal_pointer (&error));
                g_object_unref (task);
                return;
        }
 
-       ret = g_file_make_directory_with_parents (dir, cancellable, &error);
-       g_object_unref (dir);
-       if (!ret) {
-               if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
-                       g_clear_error (&error);
-               else {
-                       g_task_return_error (task, error);
-                       g_object_unref (file);
-                       g_object_unref (task);
-                       return;
-               }
-       }
-
        envvar = g_getenv ("SECRET_FILE_TEST_PASSWORD");
        if (envvar != NULL && *envvar != '\0') {
                password = secret_value_new (envvar, -1, "text/plain");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]