summaryrefslogtreecommitdiffstats
path: root/PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch
diff options
context:
space:
mode:
Diffstat (limited to 'PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch')
-rw-r--r--PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch b/PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch
new file mode 100644
index 0000000..7b6a6be
--- /dev/null
+++ b/PATCHES/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch
@@ -0,0 +1,60 @@
+From 233bc23e32c5213255d8391dede53aa0b61ec23f Mon Sep 17 00:00:00 2001
+From: Ray Donnelly <mingw.android@gmail.com>
+Date: Wed, 5 Aug 2015 23:36:09 +0100
+Subject: [PATCH 04/15] Windows: Use '/' not '\' in progpath and leave case
+ as-is
+
+Windows can handle both '/' and '\' dirseps. GCC will
+have been built using Cygwin, MSYS* or cross-compiled
+from a system where dirsep is '/' so it is cleaner to
+force the dirseps to be '/' and keep the case as-is.
+
+This way, the value will be consistent with the build
+system and string operations, be they internal to GCC
+or external to it (e.g. processing map files with sed)
+have a better chance of working as expected.
+
+A concrete instance of when this matters is when cross
+compiling GNU/Linux glibc on Windows.
+---
+ libiberty/lrealpath.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/libiberty/lrealpath.c b/libiberty/lrealpath.c
+index b27c8de..8165984 100644
+--- a/libiberty/lrealpath.c
++++ b/libiberty/lrealpath.c
+@@ -138,15 +138,26 @@ lrealpath (const char *filename)
+ {
+ char buf[MAX_PATH];
+ char* basename;
++ char* slash;
+ DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
+ if (len == 0 || len > MAX_PATH - 1)
+ return strdup (filename);
+ else
+ {
+- /* The file system is case-preserving but case-insensitive,
+- Canonicalize to lowercase, using the codepage associated
+- with the process locale. */
+- CharLowerBuff (buf, len);
++ /* Turn all back slashes back into forward slashes
++ and don't make it lowercase.
++ Rationale:
++ Windows is as happy with / as it is with \. This will
++ have been built using Cygwin, MSYS* or cross-compiled
++ from a system where dirsep is / so it is cleaner just
++ to keep the dirseps as / (and the case un-modified).
++ This way, the value will be consistent with the build
++ system and string operations (be they internal to this
++ software or external to it, e.g. processing map files
++ with sed) work as expected. */
++ slash = buf;
++ while ((slash = strchr(slash,'\\')) != NULL)
++ *slash = '/';
+ return strdup (buf);
+ }
+ }
+--
+2.8.1
+