mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
8244aea182
* gnu/packages/file-systems.scm (curlftpfs)[source]: Add patches. * gnu/packages/patches/curlftpfs-fix-error-closing-file.patch, gnu/packages/patches/curlftpfs-fix-file-names.patch, gnu/packages/patches/curlftpfs-fix-memory-leak.patch, gnu/packages/patches/curlftpfs-fix-no_verify_hostname.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them.
76 lines
2.3 KiB
Diff
76 lines
2.3 KiB
Diff
From bc3fb45db30741a60d4e8904cbd4d6118fb85741 Mon Sep 17 00:00:00 2001
|
|
From: Joseph Lansdowne <j49137@gmail.com>
|
|
Date: Sun, 31 Mar 2019 19:25:26 +0100
|
|
Subject: [PATCH] fix filenames with url-reserved characters
|
|
|
|
---
|
|
ChangeLog | 2 +-
|
|
path_utils.c | 28 +++++++++++++++++-----------
|
|
2 files changed, 18 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/path_utils.c b/path_utils.c
|
|
index db3d7e4..4f747bb 100644
|
|
--- a/path_utils.c
|
|
+++ b/path_utils.c
|
|
@@ -39,9 +39,11 @@ char* get_full_path(const char* path) {
|
|
path = converted_path;
|
|
}
|
|
|
|
- ret = g_strdup_printf("%s%s", ftpfs.host, path);
|
|
+ const char *const escaped_path = g_uri_escape_string(path, "/", FALSE);
|
|
+ ret = g_strdup_printf("%s%s", ftpfs.host, escaped_path);
|
|
|
|
free(converted_path);
|
|
+ free((char *) escaped_path);
|
|
|
|
return ret;
|
|
}
|
|
@@ -58,9 +60,12 @@ char* get_fulldir_path(const char* path) {
|
|
path = converted_path;
|
|
}
|
|
|
|
- ret = g_strdup_printf("%s%s%s", ftpfs.host, path, strlen(path) ? "/" : "");
|
|
+ const char *const escaped_path = g_uri_escape_string(path, "/", FALSE);
|
|
+ ret = g_strdup_printf(
|
|
+ "%s%s%s", ftpfs.host, escaped_path, strlen(escaped_path) ? "/" : "");
|
|
|
|
free(converted_path);
|
|
+ free((char *) escaped_path);
|
|
|
|
return ret;
|
|
}
|
|
@@ -71,24 +76,25 @@ char* get_dir_path(const char* path) {
|
|
const char *lastdir;
|
|
|
|
++path;
|
|
-
|
|
- lastdir = strrchr(path, '/');
|
|
- if (lastdir == NULL) lastdir = path;
|
|
|
|
- if (ftpfs.codepage && (lastdir - path > 0)) {
|
|
- converted_path = g_strndup(path, lastdir - path);
|
|
+ if (ftpfs.codepage) {
|
|
+ converted_path = g_strdup(path);
|
|
convert_charsets(ftpfs.iocharset, ftpfs.codepage, &converted_path);
|
|
path = converted_path;
|
|
- lastdir = path + strlen(path);
|
|
}
|
|
|
|
+ const char *const escaped_path = g_uri_escape_string(path, "/", FALSE);
|
|
+ lastdir = strrchr(escaped_path, '/');
|
|
+ if (lastdir == NULL) lastdir = escaped_path;
|
|
+
|
|
ret = g_strdup_printf("%s%.*s%s",
|
|
ftpfs.host,
|
|
- lastdir - path,
|
|
- path,
|
|
- lastdir - path ? "/" : "");
|
|
+ lastdir - escaped_path,
|
|
+ escaped_path,
|
|
+ lastdir - escaped_path ? "/" : "");
|
|
|
|
free(converted_path);
|
|
+ free((char *) escaped_path);
|
|
|
|
return ret;
|
|
}
|