diff options
author | Michael Vetter <jubalh@iodoru.org> | 2020-12-09 09:13:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-09 09:13:31 +0100 |
commit | f10edd202f64237d3d941da2da173f56d115f7ac (patch) | |
tree | 3c4ec87fec42498b299c4ce1828a7ccbc04b51aa /src/common.c | |
parent | 7a319df6c80c472adcf416c8737e7b156854352b (diff) | |
parent | 5179b253c4ac7283a2c73cb5bc0da440c8012de1 (diff) | |
download | profani-tty-f10edd202f64237d3d941da2da173f56d115f7ac.tar.gz |
Merge pull request #1447 from profanity-im/omemomediasharing-impr
omemo media sharing related polishing
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/common.c b/src/common.c index 10be280a..327b3586 100644 --- a/src/common.c +++ b/src/common.c @@ -629,18 +629,40 @@ _basename_from_url(const char* url) } gchar* +get_expanded_path(const char *path) +{ + GString* exp_path = g_string_new(""); + gchar *result; + + if (strlen(path) >= 2 && path[0] == '~' && path[1] == '/') { + g_string_printf(exp_path, "%s/%s", getenv("HOME"), path+2); + } else { + g_string_printf(exp_path, "%s", path+2); + } + + result = exp_path->str; + g_string_free(exp_path, FALSE); + + return result; +} + +gchar* unique_filename_from_url(const char* url, const char* path) { + gchar *realpath; + // Default to './' as path when none has been provided. if (path == NULL) { - path = "./"; + realpath = "./"; + } else { + realpath = get_expanded_path(path); } // Resolves paths such as './../.' for path. - GFile* target = g_file_new_for_commandline_arg(path); + GFile* target = g_file_new_for_commandline_arg(realpath); gchar* filename = NULL; - if (_has_directory_suffix(path) || g_file_test(path, G_FILE_TEST_IS_DIR)) { + if (_has_directory_suffix(realpath) || g_file_test(realpath, G_FILE_TEST_IS_DIR)) { // The target should be used as a directory. Assume that the basename // should be derived from the URL. char* basename = _basename_from_url(url); @@ -654,11 +676,13 @@ unique_filename_from_url(const char* url, const char* path) gchar* unique_filename = _unique_filename(filename); if (unique_filename == NULL) { g_free(filename); + g_free(realpath); return NULL; } g_object_unref(target); g_free(filename); + g_free(realpath); return unique_filename; } |