From 3fdf89c75e2e78adbb480ad007fdee4242ad7d99 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Fri, 16 Feb 2018 16:22:30 -0500 Subject: [PATCH] core/file: Create a single file_write_path() function Similar to file_path(), I rely on the file ops struct to put files in the right place. Signed-off-by: Anna Schumaker --- core/file.c | 41 +++++++++++++++-------------------------- include/core/file.h | 5 ++--- tests/core/file.c | 4 ++-- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/core/file.c b/core/file.c index 535c3377..71e1f6aa 100644 --- a/core/file.c +++ b/core/file.c @@ -27,21 +27,6 @@ static gchar *__file_path(const gchar *base, const gchar *dir, return g_build_filename(base, OCARINA_NAME, dir ? dir : "", name, NULL); } -static gchar *__file_build_tmp(const gchar *base, const gchar *dir, - const gchar *name) -{ - gchar *tmp, *res; - - if (string_length(name) == 0) - return g_strdup(""); - - tmp = g_strdup_printf(".%s.tmp", name); - res = __file_path(base, dir, tmp); - g_free(tmp); - - return res; -} - static bool __file_exists(gchar *path) { bool ret = g_file_test(path, G_FILE_TEST_EXISTS); @@ -119,15 +104,19 @@ gchar *file_path(struct file *file) file->f_subdir, file->f_name, NULL); } -gchar *data_file_write_path(struct file *data) +gchar *file_write_path(struct file *file) { - return __file_build_tmp(g_get_user_data_dir(), NULL, data->f_name); -} + gchar *tmp, *res; -gchar *cache_file_write_path(struct file *cache) -{ - return __file_build_tmp(g_get_user_cache_dir(), cache->f_subdir, - cache->f_name); + if (string_length(file->f_name) == 0) + return g_strdup(""); + + tmp = g_strdup_printf(".%s.tmp", file->f_name); + res = g_build_filename(file->f_user_dir(), OCARINA_NAME, + file->f_subdir, tmp, NULL); + g_free(tmp); + + return res; } const unsigned int data_file_version(struct file *data) @@ -182,7 +171,7 @@ static bool __file_open_write(struct file *data) if (!__file_can_write(data)) return false; - data->f_file = __file_open(data_file_write_path(data), "w"); + data->f_file = __file_open(file_write_path(data), "w"); if (!data->f_file) return false; @@ -209,7 +198,7 @@ bool cache_file_open(struct file *cache, enum open_mode mode) if (!__file_mkdir(g_get_user_cache_dir(), cache->f_subdir)) return false; - cache->f_file = __file_open(cache_file_write_path(cache), "wb"); + cache->f_file = __file_open(file_write_path(cache), "wb"); return cache->f_file != NULL; } @@ -218,7 +207,7 @@ void data_file_close(struct file *data) struct data_file *file = &data->f_data; __file_close(data->f_file, file->f_mode == OPEN_WRITE ? file_path(data) : NULL, - file->f_mode == OPEN_WRITE ? data_file_write_path(data) : NULL); + file->f_mode == OPEN_WRITE ? file_write_path(data) : NULL); data->f_file = NULL; } @@ -226,7 +215,7 @@ void cache_file_close(struct file *cache) { __file_close(cache->f_file, file_path(cache), - cache_file_write_path(cache)); + file_write_path(cache)); cache->f_file = NULL; } diff --git a/include/core/file.h b/include/core/file.h index 3e9e39ce..27f3fe9e 100644 --- a/include/core/file.h +++ b/include/core/file.h @@ -76,10 +76,9 @@ gchar *file_path(struct file *); /* * Returns the path to the temporary file used for writes. - * This function allocates a new string that MUST be freed with g_free(). + * NOTE: This function allocates a new string that MUST be freed with g_free(). */ -gchar *data_file_write_path(struct file *); -gchar *cache_file_write_path(struct file *); +gchar *file_write_path(struct file *); /* Returns the version number of the file. */ const unsigned int data_file_version(struct file *); diff --git a/tests/core/file.c b/tests/core/file.c index d2413494..1bedc0de 100644 --- a/tests/core/file.c +++ b/tests/core/file.c @@ -13,7 +13,7 @@ static void test_verify_constructor(struct file *file, gchar *fpath, gchar *ftmp g_assert_cmpuint(data_file_version(file), ==, OCARINA_MINOR_VERSION); g_assert_cmpuint(file->f_data.f_mode, ==, OPEN_READ); g_assert_cmpstr_free(file_path(file), ==, fpath); - g_assert_cmpstr_free(data_file_write_path(file), ==, ftmp); + g_assert_cmpstr_free(file_write_path(file), ==, ftmp); } static void test_invalid_file(gconstpointer path) @@ -186,7 +186,7 @@ static void test_cache() g_assert_cmpstr(file.f_subdir, ==, "dir"); g_assert_cmpstr_free(file_path(&file), ==, filepath); - g_assert_cmpstr_free(cache_file_write_path(&file), ==, writepath); + g_assert_cmpstr_free(file_write_path(&file), ==, writepath); /* Test writing data to a cache file. */ g_assert_false(cache_file_exists(&file));