aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog9
-rw-r--r--bfd/bfdio.c42
2 files changed, 30 insertions, 21 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 843bdc8..4925fff 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2022-03-01 Torbjörn Svensson <torbjorn.svensson@st.com>
+ Fred Eisele <fredrick.eisele@gmail.com>
+
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Fix typo.
+
2022-03-01 Nick Clifton <nickc@redhat.com>
PR 28848
@@ -6,9 +12,10 @@
TAG_FP_arch set then reset the TAG_ABI_HardFP_use.
2022-02-28 Torbjörn Svensson <torbjorn.svensson@st.com>
+ Fred Eisele <fredrick.eisele@gmail.com>
PR 25713
- * bfdio.c (_bfd_real_fopen): Fix handling of parhs longer than 260
+ * bfdio.c (_bfd_real_fopen): Fix handling of paths longer than 260
characters on Windows hosts.
2022-02-28 Nick Clifton <nickc@redhat.com>
diff --git a/bfd/bfdio.c b/bfd/bfdio.c
index 82310ff..5c9a655 100644
--- a/bfd/bfdio.c
+++ b/bfd/bfdio.c
@@ -116,45 +116,47 @@ _bfd_real_fopen (const char *filename, const char *modes)
}
#elif defined (_WIN32)
- /* PR 25713: Handle extra long path names possibly containing '..' and '.'. */
-
- wchar_t **lpFilePart = {NULL};
- const wchar_t prefix[] = L"\\\\?\\";
- const wchar_t ccs[] = L", ccs=UNICODE";
- const size_t partPathLen = strlen(filename) + 1;
+ /* PR 25713: Handle extra long path names possibly containing '..' and '.'. */
+ wchar_t ** lpFilePart = {NULL};
+ const wchar_t prefix[] = L"\\\\?\\";
+ const wchar_t ccs[] = L", ccs=UNICODE";
+ const size_t partPathLen = strlen (filename) + 1;
/* Converting the partial path from ascii to unicode.
- 1) get the length: Calling with lpWideCharStr set to null returns the length.
- 2) convert the string: Calling with cbMultiByte set to -1 includes the terminating null. */
- size_t partPathWSize = MultiByteToWideChar (CP_UTF8, 0, partPathOrig, -1, NULL, 0);
- wchar_t *partPath = calloc (partPathWSize, sizeof(wchar_t));
+ 1) Get the length: Calling with lpWideCharStr set to null returns the length.
+ 2) Convert the string: Calling with cbMultiByte set to -1 includes the terminating null. */
+ size_t partPathWSize = MultiByteToWideChar (CP_UTF8, 0, filename, -1, NULL, 0);
+ wchar_t * partPath = calloc (partPathWSize, sizeof(wchar_t));
+ size_t ix;
- MultiByteToWideChar (CP_UTF8, 0, partPathOrig, -1, partPath, partPathWSize);
+ MultiByteToWideChar (CP_UTF8, 0, filename, -1, partPath, partPathWSize);
/* Convert any UNIX style path separators into the DOS i.e. backslash separator. */
- size_t ix;
for (ix = 0; ix < partPathLen; ix++)
if (IS_UNIX_DIR_SEPARATOR(filename[ix]))
partPath[ix] = '\\';
/* Getting the full path from the provided partial path.
- 1) get the length:
- 2) resolve the path. */
- long fullPathWSize = GetFullPathNameW (partPath, 0, NULL, lpFilePart);
- wchar_t *fullPath = calloc (fullPathWSize + sizeof(prefix) + 1, sizeof(wchar_t));
+ 1) Get the length.
+ 2) Resolve the path. */
+ long fullPathWSize = GetFullPathNameW (partPath, 0, NULL, lpFilePart);
+ wchar_t * fullPath = calloc (fullPathWSize + sizeof(prefix) + 1, sizeof(wchar_t));
wcscpy (fullPath, prefix);
- int prefixLen = sizeof(prefix) / sizeof(wchar_t);
- wchar_t* fullPathOffset = fullPath + prefixLen - 1;
+
+ int prefixLen = sizeof(prefix) / sizeof(wchar_t);
+ wchar_t * fullPathOffset = fullPath + prefixLen - 1;
+
GetFullPathNameW (partPath, fullPathWSize, fullPathOffset, lpFilePart);
free (partPath);
/* It is non-standard for modes to exceed 16 characters. */
- wchar_t modesW[16 + sizeof(ccs)];
+ wchar_t modesW[16 + sizeof(ccs)];
+
MultiByteToWideChar (CP_UTF8, 0, modes, -1, modesW, sizeof(modesW));
wcscat (modesW, ccs);
- FILE* file = _wfopen (fullPath, mdesW);
+ FILE * file = _wfopen (fullPath, modesW);
free (fullPath);
return close_on_exec (file);