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 <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
22854b2f25
commit
3fdf89c75e
41
core/file.c
41
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 *);
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue
Block a user