diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index fd9d2ffd..68153270 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -4854,18 +4854,12 @@ gboolean cmd_sendfile(ProfWin* window, const char* const command, gchar** args) { jabber_conn_status_t conn_status = connection_get_status(); - char* filename = args[0]; + gchar* filename; char* alt_scheme = NULL; char* alt_fragment = NULL; // expand ~ to $HOME - if (filename[0] == '~' && filename[1] == '/') { - if (asprintf(&filename, "%s/%s", getenv("HOME"), filename + 2) == -1) { - return TRUE; - } - } else { - filename = strdup(filename); - } + filename = get_expanded_path(args[0]); if (access(filename, R_OK) != 0) { cons_show_error("Uploading '%s' failed: File not found!", filename); diff --git a/src/common.c b/src/common.c index 10be280a..327b3586 100644 --- a/src/common.c +++ b/src/common.c @@ -628,19 +628,41 @@ _basename_from_url(const char* url) return basename; } +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; } diff --git a/src/common.h b/src/common.h index 088ba953..44a61a79 100644 --- a/src/common.h +++ b/src/common.h @@ -108,5 +108,6 @@ gboolean call_external(gchar** argv, gchar*** const output_ptr, gchar*** const e gchar** format_call_external_argv(const char* template, const char* url, const char* filename); gchar* unique_filename_from_url(const char* url, const char* path); +gchar* get_expanded_path(const char *path); #endif diff --git a/src/config/preferences.c b/src/config/preferences.c index 9d7d4f7b..98ac5a0d 100644 --- a/src/config/preferences.c +++ b/src/config/preferences.c @@ -182,6 +182,11 @@ _prefs_load(void) g_key_file_set_string(prefs, PREF_GROUP_EXECUTABLES, "avatar.cmd", value); g_key_file_remove_key(prefs, PREF_GROUP_LOGGING, "avatar.cmd", NULL); } + + // 0.10 will have omemo media sharing. so disabling of senfile introduced in 0.9 is not needed (#1270) + if (g_key_file_has_key(prefs, PREF_GROUP_OMEMO, "sendfile", NULL)) { + g_key_file_remove_key(prefs, PREF_GROUP_OMEMO, "sendfile", NULL); + } _save_prefs();