edje_cc: Fix parsing including file path in EDC on Windows. 82/53582/5
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Tue, 8 Dec 2015 02:01:11 +0000 (11:01 +0900)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Tue, 2 Aug 2016 03:46:06 +0000 (20:46 -0700)
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.

Change-Id: Ib98ab261a2c47debd89449c8bef283f00f1534dc

src/bin/edje/edje_cc_parse.c
src/bin/edje/edje_cc_sources.c

index 5f405df..4fa97eb 100644 (file)
@@ -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);
index 734fbfe..47f7665 100644 (file)
@@ -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);
 }