Fix another path length problem opening files on Win32 systems.
PR 25713 * bfdio.c (_bfd_real_fopen): For Win32 convert relative paths to absolute paths and check to see if they are longer than MAX_PATH.
This commit is contained in:
parent
78e4948694
commit
17d60030ae
@ -1,3 +1,9 @@
|
|||||||
|
2021-01-07 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR 25713
|
||||||
|
* bfdio.c (_bfd_real_fopen): For Win32 convert relative paths to
|
||||||
|
absolute paths and check to see if they are longer than MAX_PATH.
|
||||||
|
|
||||||
2021-01-07 Philipp Tomsich <prt@gnu.org>
|
2021-01-07 Philipp Tomsich <prt@gnu.org>
|
||||||
|
|
||||||
* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zihintpause.
|
* elfxx-riscv.c (riscv_std_z_ext_strtab): Added zihintpause.
|
||||||
|
23
bfd/bfdio.c
23
bfd/bfdio.c
@ -116,14 +116,33 @@ _bfd_real_fopen (const char *filename, const char *modes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#elif defined (_WIN32)
|
#elif defined (_WIN32)
|
||||||
size_t filelen = strlen (filename) + 1;
|
size_t filelen;
|
||||||
|
|
||||||
|
/* PR 25713: Handle extra long path names.
|
||||||
|
For relative paths, convert them to absolute, in case that version is too long. */
|
||||||
|
if (! IS_ABSOLUTE_PATH (filename) && (strstr (filename, ".o") != NULL))
|
||||||
|
{
|
||||||
|
char cwd[1024];
|
||||||
|
|
||||||
|
getcwd (cwd, sizeof (cwd));
|
||||||
|
filelen = strlen (cwd) + 1;
|
||||||
|
strncat (cwd, "\\", sizeof (cwd) - filelen);
|
||||||
|
++ filelen;
|
||||||
|
strncat (cwd, filename, sizeof (cwd) - filelen);
|
||||||
|
|
||||||
|
filename = cwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
filelen = strlen (filename) + 1;
|
||||||
|
|
||||||
if (filelen > MAX_PATH - 1)
|
if (filelen > MAX_PATH - 1)
|
||||||
{
|
{
|
||||||
FILE * file;
|
FILE * file;
|
||||||
char * fullpath = (char *) malloc (filelen + 8);
|
char * fullpath;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
fullpath = (char *) malloc (filelen + 8);
|
||||||
|
|
||||||
/* Add a Microsoft recommended prefix that
|
/* Add a Microsoft recommended prefix that
|
||||||
will allow the extra-long path to work. */
|
will allow the extra-long path to work. */
|
||||||
strcpy (fullpath, "\\\\?\\");
|
strcpy (fullpath, "\\\\?\\");
|
||||||
|
Loading…
Reference in New Issue
Block a user