Browse Source

Fix binutils tools so that they can cope with the special /dev/null file when run on Windows systems.

PR 27252
 * bucomm.c (get_file_size): Add code to handle /dev/null on
 Windows systems.
 * elfedit.c (check_file): Likewise.
binutils-2_37-branch
Eli Zaretskii 6 years ago
committed by Nick Clifton
parent
commit
a7ad3cb1ff
  1. 7
      binutils/ChangeLog
  2. 15
      binutils/bucomm.c
  3. 14
      binutils/elfedit.c

7
binutils/ChangeLog

@ -1,3 +1,10 @@
2021-01-28 Eli Zaretskii <eliz@gnu.org>
PR 27252
* bucomm.c (get_file_size): Add code to handle /dev/null on
Windows systems.
* elfedit.c (check_file): Likewise.
2021-01-27 Nick Clifton <nickc@redhat.com>
* objcopy.c (copy_main): Remove conditional control of the calls

15
binutils/bucomm.c

@ -623,6 +623,21 @@ get_file_size (const char * file_name)
else if (statbuf.st_size < 0)
non_fatal (_("Warning: '%s' has negative size, probably it is too large"),
file_name);
#if defined (_WIN32) && !defined (__CYGWIN__)
else if (statbuf.st_size == 0)
{
/* MS-Windows 'stat' doesn't reports the null device as a
regular file; fix that. */
int fd = open (file_name, O_RDONLY | O_BINARY);
if (isatty (fd))
{
close (fd);
non_fatal (_("Warning: '%s' is not an ordinary file"),
/* libtool wants to see /dev/null in the output. */
strcasecmp (file_name, "nul") ? file_name : "/dev/null");
}
}
#endif
else
return statbuf.st_size;

14
binutils/elfedit.c

@ -721,6 +721,20 @@ check_file (const char *file_name, struct stat *statbuf_p)
return 1;
}
#if defined (_WIN32) && !defined (__CYGWIN__)
else if (statbuf_p->st_size == 0)
{
/* MS-Windows 'stat' doesn't reports the null device as a
regular file; fix that. */
int fd = open (file_name, O_RDONLY | O_BINARY);
if (isatty (fd))
{
statbuf_p->st_mode &= ~S_IFREG;
statbuf_p->st_mode |= S_IFCHR;
}
}
#endif
if (! S_ISREG (statbuf_p->st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);

Loading…
Cancel
Save