From a05171d39ffcb945fc7e4f4862d8ac89a181f143 Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Tue, 8 Dec 2015 11:01:11 +0900 Subject: [PATCH] edje_cc: Fix parsing including file path in EDC on Windows. On Windows, including file path in EDC has not been parsed correctly because '\' has not been used for path separator. This commit fixes edje_cc complie to use '\' as path separator on Windows. --- src/bin/edje/edje_cc_parse.c | 4 ++++ src/bin/edje/edje_cc_sources.c | 30 ++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c index 5f405dfc7f..4fa97eb2cb 100644 --- a/src/bin/edje/edje_cc_parse.c +++ b/src/bin/edje/edje_cc_parse.c @@ -925,6 +925,10 @@ compile(void) strncpy(inc, file_in, 4000); inc[4001] = 0; p = strrchr(inc, '/'); +#ifdef _WIN32 + char *p_backslash = strrchr(inc, '\\'); + if (p_backslash > p) p = p_backslash; +#endif if (!p) strcpy(inc, "./"); else *p = 0; fd = eina_file_mkstemp("edje_cc.edc-tmp-XXXXXX", &tmpn); diff --git a/src/bin/edje/edje_cc_sources.c b/src/bin/edje/edje_cc_sources.c index 734fbfe711..47f76653d8 100644 --- a/src/bin/edje/edje_cc_sources.c +++ b/src/bin/edje/edje_cc_sources.c @@ -153,12 +153,23 @@ source_fetch_file(const char *fil, const char *filname) /* get the directory of the current file * if we haven't already done so */ - if ((!dir) && (strrchr(fil, '/'))) + if (!dir) { - dir = mem_strdup(fil); - slash = strrchr(dir, '/'); - *slash = '\0'; - dir_len = strlen(dir); + if (strrchr(fil, '/')) + { + dir = mem_strdup(fil); + slash = strrchr(dir, '/'); + } +#ifdef _WIN32 + if (strrchr(fil, '\\')) + { + if (!dir) dir = mem_strdup(fil); + char *backslash = strrchr(dir, '\\'); + if (backslash > slash) slash = backslash; + } +#endif + if (slash) *slash = '\0'; + if (dir) dir_len = strlen(dir); } l = pp - p + dir_len + 1; @@ -211,7 +222,14 @@ source_fetch(void) { snprintf(buf, sizeof (buf), "%s", ptr + 1); } - +#ifdef _WIN32 + char *ptr_backslash = strrchr(file_in, '\\'); + if (ptr_backslash) + { + if (ptr_backslash > ptr) + snprintf(buf, sizeof (buf), "%s", ptr_backslash + 1); + } +#endif source_fetch_file(file_in, buf[0] ? buf : file_in); }