diff options
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.patch | 60 |
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 + |