summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2021-11-10 12:51:23 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-11-10 12:51:23 +0000
commitb5b0222ae0569526f96af1876dd162efcb4ca937 (patch)
tree056ad35665792a20c4516a3846f4ec5fabee582d
parent173c9cdbe161a5a1abd1a76756ebfa77c2767fd2 (diff)
downloadefl-b5b0222ae0569526f96af1876dd162efcb4ca937.tar.gz
Eina: sanitize eina_path output on Windows
Summary: * remove additional \ character * use only / as path separator Test Plan: compilation and run test program : ``` { elm_app_bin_dir_get(); printf("%s\n", eina_vpath_resolve("(:tmp:)/foo")); printf("%s\n", eina_vpath_resolve("(:home:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.desktop:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.documents:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.downloads:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.music:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.pictures:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.public:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.templates:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.videos:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.data:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.config:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.cache:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.run:)/foo")); printf("%s\n", eina_vpath_resolve("(:usr.tmp:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.dir:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.bin:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.lib:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.data:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.locale:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.config:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.local:)/foo")); printf("%s\n", eina_vpath_resolve("(:app.tmp:)/foo")); } ``` before patch : ``` C:\Documents\msys2\tmp/foo C:\Users\vincent.torri/foo C:\Users\vincent.torri\Desktop/foo C:\Users\vincent.torri\Documents/foo C:\Users\vincent.torri\Downloads/foo C:\Users\vincent.torri\Music/foo C:\Users\vincent.torri\Pictures/foo C:\Users\Public\/foo C:\Users\vincent.torri\AppData\Roaming\Microsoft\Windows\Templates/foo C:\Users\vincent.torri\Videos/foo C:\Users\vincent.torri\AppData\Local\/foo C:\Users\vincent.torri\AppData\Roaming\/foo C:\Users\vincent.torri\AppData\Local\/foo C:\Users\vincent.torri\AppData\Roaming/foo C:\Users\vincent.torri\AppData\Local\Temp/foo C:/Documents/msys2/opt/entice_64/bin/foo C:/Documents/msys2/opt/entice_64/bin/foo C:/Documents/msys2/opt/entice_64/lib/foo C:/Documents/msys2/opt/entice_64/share/foo C:/Documents/msys2/opt/entice_64/share/foo C:\Users\vincent.torri\AppData\Roaming\/entice/foo C:\Users\vincent.torri\AppData\Local\/entice/foo C:\Users\vincent.torri\AppData\Local\Temp/entice/foo ``` after patch ``` C:/Documents/msys2/tmp/foo C:/Users/vincent.torri/foo C:/Users/vincent.torri/Desktop/foo C:/Users/vincent.torri/Documents/foo C:/Users/vincent.torri/Downloads/foo C:/Users/vincent.torri/Music/foo C:/Users/vincent.torri/Pictures/foo C:/Users/Public/foo C:/Users/vincent.torri/AppData/Roaming/Microsoft/Windows/Templates/foo C:/Users/vincent.torri/Videos/foo C:/Users/vincent.torri/AppData/Local/foo C:/Users/vincent.torri/AppData/Roaming/foo C:/Users/vincent.torri/AppData/Local/foo C:/Users/vincent.torri/AppData/Roaming/foo C:/Users/vincent.torri/AppData/Local/Temp/foo C:/Documents/msys2/opt/entice_64/bin/foo C:/Documents/msys2/opt/entice_64/bin/foo C:/Documents/msys2/opt/entice_64/lib/foo C:/Documents/msys2/opt/entice_64/share/foo C:/Documents/msys2/opt/entice_64/share/foo C:/Users/vincent.torri/AppData/Roaming/entice/foo C:/Users/vincent.torri/AppData/Local/entice/foo C:/Users/vincent.torri/AppData/Local/Temp/entice/foo ``` Reviewers: raster Reviewed By: raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D12306
-rw-r--r--src/lib/eina/eina_file_common.c2
-rw-r--r--src/lib/eina/eina_file_win32.c2
-rw-r--r--src/lib/eina/eina_private.h17
-rw-r--r--src/lib/eina/eina_util.c6
-rw-r--r--src/lib/eina/eina_vpath_xdg.c9
-rw-r--r--src/lib/evil/evil_stdio.h15
6 files changed, 32 insertions, 19 deletions
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c
index d93d2ef7b7..9e7cd081d3 100644
--- a/src/lib/eina/eina_file_common.c
+++ b/src/lib/eina/eina_file_common.c
@@ -126,7 +126,7 @@ _eina_file_escape(char *path, size_t len)
return NULL;
#ifdef _WIN32
- EVIL_PATH_SEP_WIN32_TO_UNIX(path);
+ EINA_PATH_TO_UNIX(path);
#endif
while ((p = strchr(p, '/')))
diff --git a/src/lib/eina/eina_file_win32.c b/src/lib/eina/eina_file_win32.c
index 455d583b96..ddce2137ec 100644
--- a/src/lib/eina/eina_file_win32.c
+++ b/src/lib/eina/eina_file_win32.c
@@ -550,7 +550,7 @@ eina_file_cleanup(Eina_Tmpstr *path)
if (!result)
return NULL;
- EVIL_PATH_SEP_WIN32_TO_UNIX(result);
+ EINA_PATH_TO_UNIX(result);
return result;
}
diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h
index 9d4da033ce..0de9dd8f81 100644
--- a/src/lib/eina/eina_private.h
+++ b/src/lib/eina/eina_private.h
@@ -35,6 +35,23 @@
#include "eina_accessor.h"
#include "eina_stringshare.h"
+#ifdef _WIN32
+
+# define EINA_PATH_SEP_SWAP(p, s1, s2) \
+ do { \
+ char *iter = p; \
+ while (*iter) \
+ { \
+ if (*iter == s1) \
+ *iter = s2; \
+ iter++; \
+ } \
+ } while (0)
+
+# define EINA_PATH_TO_UNIX(p) EINA_PATH_SEP_SWAP(p, '\\', '/')
+# define EINA_PATH_TO_WIN32(p) EINA_PATH_SEP_SWAP(p, '/', '\\')
+#endif
+
#ifndef ABS
# define ABS(x) ((x) < 0 ? -(x) : (x))
#endif
diff --git a/src/lib/eina/eina_util.c b/src/lib/eina/eina_util.c
index a003eb8fdb..036b85a382 100644
--- a/src/lib/eina/eina_util.c
+++ b/src/lib/eina/eina_util.c
@@ -91,6 +91,9 @@ eina_environment_home_get(void)
}
#endif
home = strdup(home);
+#ifdef _WIN32
+ EINA_PATH_TO_UNIX(home);
+#endif
return home;
}
@@ -130,5 +133,8 @@ eina_environment_tmp_get(void)
#endif
tmp = strdup(tmp);
+#ifdef _WIN32
+ EINA_PATH_TO_UNIX(tmp);
+#endif
return tmp;
}
diff --git a/src/lib/eina/eina_vpath_xdg.c b/src/lib/eina/eina_vpath_xdg.c
index d300a8da1f..f9cecc5b1f 100644
--- a/src/lib/eina/eina_vpath_xdg.c
+++ b/src/lib/eina/eina_vpath_xdg.c
@@ -42,6 +42,7 @@ eina_xdg_env_init(void)
if (!s) s = home; \
} else s = home; \
FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\%s", s, (char *)_dir); \
+ EINA_PATH_TO_UNIX(_meta); \
(&user)->_meta = _meta;
# define ENV_SET(_env, _meta) \
@@ -50,7 +51,8 @@ eina_xdg_env_init(void)
s = getenv(_env); \
if (!s) s = home; \
} else s = home; \
- FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\", s); \
+ FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s", s); \
+ EINA_PATH_TO_UNIX(_meta); \
(&user)->_meta = _meta;
ENV_DIR_SET(NULL, "Desktop", desktop);
@@ -68,7 +70,10 @@ eina_xdg_env_init(void)
if (!(s = getenv("APPDATA")))
user.run = NULL;
else
- user.run = s;
+ {
+ EINA_PATH_TO_UNIX(s);
+ user.run = s;
+ }
#else /* _WIN32 */
# if defined(HAVE_GETUID) && defined(HAVE_GETEUID)
# define ENV_HOME_SET(_env, _dir, _meta) \
diff --git a/src/lib/evil/evil_stdio.h b/src/lib/evil/evil_stdio.h
index 4a2ed57fd3..f948c674a6 100644
--- a/src/lib/evil/evil_stdio.h
+++ b/src/lib/evil/evil_stdio.h
@@ -12,21 +12,6 @@
* @{
*/
-#define EVIL_PATH_SEP_SWAP(p, s1, s2) \
- do { \
- char *_evil_path_tmp; \
- _evil_path_tmp = p; \
- while (*_evil_path_tmp) \
- { \
- if (*_evil_path_tmp == s1) \
- *_evil_path_tmp = s2; \
- _evil_path_tmp++; \
- } \
- } while (0)
-
-#define EVIL_PATH_SEP_WIN32_TO_UNIX(p) EVIL_PATH_SEP_SWAP(p, '\\', '/')
-#define EVIL_PATH_SEP_UNIX_TO_WIN32(p) EVIL_PATH_SEP_SWAP(p, '/', '\\')
-
/**
* @brief Emulate the rename() function on Windows.