PR binutils/14302

* bucomm.c (print_arelt_descr): Correctly report the archive size
	field (for 'ar tv').
	* ar.c (print_contents): Use correct types for archive element
	sizes (for 'ar p').
	(extract_file): Likewise (for 'ar x').
This commit is contained in:
Nick Clifton
2012-06-29 12:59:49 +00:00
parent 5afcec7379
commit 34debcd10b
3 changed files with 29 additions and 17 deletions

View File

@ -1,3 +1,12 @@
2012-06-29 Francois Gouget <fgouget@codeweavers.com>
PR binutils/14302
* bucomm.c (print_arelt_descr): Correctly report the archive size
field (for 'ar tv').
* ar.c (print_contents): Use correct types for archive element
sizes (for 'ar p').
(extract_file): Likewise (for 'ar x').
2012-06-29 Alan Modra <amodra@gmail.com> 2012-06-29 Alan Modra <amodra@gmail.com>
* readelf.c (is_16bit_abs_reloc): Handle mn10200 reloc. * readelf.c (is_16bit_abs_reloc): Handle mn10200 reloc.

View File

@ -937,10 +937,11 @@ open_inarch (const char *archive_filename, const char *file)
static void static void
print_contents (bfd *abfd) print_contents (bfd *abfd)
{ {
size_t ncopied = 0; bfd_size_type ncopied = 0;
bfd_size_type size;
char *cbuf = (char *) xmalloc (BUFSIZE); char *cbuf = (char *) xmalloc (BUFSIZE);
struct stat buf; struct stat buf;
size_t size;
if (bfd_stat_arch_elt (abfd, &buf) != 0) if (bfd_stat_arch_elt (abfd, &buf) != 0)
/* xgettext:c-format */ /* xgettext:c-format */
fatal (_("internal stat error on %s"), bfd_get_filename (abfd)); fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
@ -953,22 +954,22 @@ print_contents (bfd *abfd)
size = buf.st_size; size = buf.st_size;
while (ncopied < size) while (ncopied < size)
{ {
bfd_size_type nread;
bfd_size_type tocopy = size - ncopied;
size_t nread;
size_t tocopy = size - ncopied;
if (tocopy > BUFSIZE) if (tocopy > BUFSIZE)
tocopy = BUFSIZE; tocopy = BUFSIZE;
nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd); nread = bfd_bread (cbuf, tocopy, abfd);
if (nread != tocopy) if (nread != tocopy)
/* xgettext:c-format */ /* xgettext:c-format */
fatal (_("%s is not a valid archive"), fatal (_("%s is not a valid archive"),
bfd_get_filename (bfd_my_archive (abfd))); bfd_get_filename (bfd_my_archive (abfd)));
/* fwrite in mingw32 may return int instead of size_t. Cast the /* fwrite in mingw32 may return int instead of bfd_size_type. Cast the
return value to size_t to avoid comparison between signed and return value to bfd_size_type to avoid comparison between signed and
unsigned values. */ unsigned values. */
if ((size_t) fwrite (cbuf, 1, nread, stdout) != nread) if ((bfd_size_type) fwrite (cbuf, 1, nread, stdout) != nread)
fatal ("stdout: %s", strerror (errno)); fatal ("stdout: %s", strerror (errno));
ncopied += tocopy; ncopied += tocopy;
} }
@ -990,9 +991,9 @@ extract_file (bfd *abfd)
{ {
FILE *ostream; FILE *ostream;
char *cbuf = (char *) xmalloc (BUFSIZE); char *cbuf = (char *) xmalloc (BUFSIZE);
size_t nread, tocopy; bfd_size_type nread, tocopy;
size_t ncopied = 0; bfd_size_type ncopied = 0;
size_t size; bfd_size_type size;
struct stat buf; struct stat buf;
if (bfd_stat_arch_elt (abfd, &buf) != 0) if (bfd_stat_arch_elt (abfd, &buf) != 0)
@ -1027,7 +1028,7 @@ extract_file (bfd *abfd)
if (tocopy > BUFSIZE) if (tocopy > BUFSIZE)
tocopy = BUFSIZE; tocopy = BUFSIZE;
nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd); nread = bfd_bread (cbuf, tocopy, abfd);
if (nread != tocopy) if (nread != tocopy)
/* xgettext:c-format */ /* xgettext:c-format */
fatal (_("%s is not a valid archive"), fatal (_("%s is not a valid archive"),
@ -1049,10 +1050,10 @@ extract_file (bfd *abfd)
output_file = ostream; output_file = ostream;
} }
/* fwrite in mingw32 may return int instead of size_t. Cast /* fwrite in mingw32 may return int instead of bfd_size_type. Cast
the return value to size_t to avoid comparison between the return value to bfd_size_type to avoid comparison between
signed and unsigned values. */ signed and unsigned values. */
if ((size_t) fwrite (cbuf, 1, nread, ostream) != nread) if ((bfd_size_type) fwrite (cbuf, 1, nread, ostream) != nread)
fatal ("%s: %s", output_filename, strerror (errno)); fatal ("%s: %s", output_filename, strerror (errno));
ncopied += tocopy; ncopied += tocopy;
} }

View File

@ -427,16 +427,18 @@ print_arelt_descr (FILE *file, bfd *abfd, bfd_boolean verbose)
char timebuf[40]; char timebuf[40];
time_t when = buf.st_mtime; time_t when = buf.st_mtime;
const char *ctime_result = (const char *) ctime (&when); const char *ctime_result = (const char *) ctime (&when);
bfd_size_type size;
/* POSIX format: skip weekday and seconds from ctime output. */ /* POSIX format: skip weekday and seconds from ctime output. */
sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20); sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20);
mode_string (buf.st_mode, modebuf); mode_string (buf.st_mode, modebuf);
modebuf[10] = '\0'; modebuf[10] = '\0';
size = buf.st_size;
/* POSIX 1003.2/D11 says to skip first character (entry type). */ /* POSIX 1003.2/D11 says to skip first character (entry type). */
fprintf (file, "%s %ld/%ld %6ld %s ", modebuf + 1, fprintf (file, "%s %ld/%ld %6" BFD_VMA_FMT "u %s ", modebuf + 1,
(long) buf.st_uid, (long) buf.st_gid, (long) buf.st_uid, (long) buf.st_gid,
(long) buf.st_size, timebuf); size, timebuf);
} }
} }