From cfbe9343ae61403b7db94ff21c7a67371b6a6474 Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Mon, 2 May 2011 20:32:54 +0200 Subject: [PATCH] Convert Windows slash to C slash in the disk mount point. --- elem.c | 2 +- util.c | 17 +++++++++++++++++ util.h | 7 +++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/elem.c b/elem.c index 8266472e..30f90538 100644 --- a/elem.c +++ b/elem.c @@ -268,7 +268,7 @@ struct snapraid_disk* disk_alloc(const char* name, const char* dir) disk = malloc_nofail(sizeof(struct snapraid_disk)); pathcpy(disk->name, sizeof(disk->name), name); - pathcpy(disk->dir, sizeof(disk->dir), dir); + pathimport(disk->dir, sizeof(disk->dir), dir); /* ensure that the dir terminate with "/" if it isn't empty */ pathslash(disk->dir, sizeof(disk->dir)); diff --git a/util.c b/util.c index eafb0bf8..83bbf427 100644 --- a/util.c +++ b/util.c @@ -178,6 +178,23 @@ void pathcpy(char* str, size_t size, const char* src) memcpy(str, src, len + 1); } +void pathimport(char* str, size_t size, const char* src) +{ +#ifdef _WIN32 + size_t len; +#endif + + pathcpy(str, size, src); + +#ifdef _WIN32 + /* convert last \ to / */ + len = strlen(str); + if (len && str[len-1] == '\\') { + str[len-1] = '/'; + } +#endif +} + void pathprint(char* str, size_t size, const char* format, ...) { size_t len; diff --git a/util.h b/util.h index 71230fe6..0b74af28 100644 --- a/util.h +++ b/util.h @@ -82,6 +82,13 @@ char* strdechex(void* void_data, unsigned data_len, char* str); */ void pathcpy(char* str, size_t size, const char* src); +/** + * Imports a path limiting the size. + * In Windows, the last slash, if present, is converted to the C standard. + * Aborts if too long. + */ +void pathimport(char* str, size_t size, const char* src); + /** * Prints a path. * Aborts if too long.