From bc3fb45db30741a60d4e8904cbd4d6118fb85741 Mon Sep 17 00:00:00 2001 From: Joseph Lansdowne 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; } /a>/substitutes.scm
AgeCommit message (Expand)Author
2020-12-11install: Discover local substitute servers....* gnu/installer/substitutes.scm: New file. * gnu/installer/newt/substitutes.scm: New file. * gnu/local.mk (INSTALLER_MODULES): Add them. * po/guix/POTFILES.in: Add gnu/installer/newt/substitutes.scm. * gnu/installer/proxy.scm (with-silent-shepherd): Move to ... * gnu/installer/utils.scm: ... here. * gnu/installer/record.scm (<installer>)[substitutes-page]: New field. * gnu/installer/newt.scm (substitutes-page): New procedure, (newt-installer): register it. * gnu/installer.scm (installer-steps): Add "substitutes-page" step. * gnu/system/install.scm (%installation-services): Add avahi-service-type and enable substitute server discover in guix-service-type. [<name-service-switch>]: Set it to %mdns-host-lookup-nss. Mathieu Othacehe