aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-06-29 12:59:49 +0000
committerNick Clifton <nickc@redhat.com>2012-06-29 12:59:49 +0000
commit34debcd10be022a25d66ef911b30c4ae9131cdc9 (patch)
tree2c1b9e31f952906d5460de3442fa524b3227bb92
parent5afcec7379df04b065548241039cc253f88ea634 (diff)
downloadgdb-34debcd10be022a25d66ef911b30c4ae9131cdc9.zip
gdb-34debcd10be022a25d66ef911b30c4ae9131cdc9.tar.gz
gdb-34debcd10be022a25d66ef911b30c4ae9131cdc9.tar.bz2
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').
-rw-r--r--binutils/ChangeLog9
-rw-r--r--binutils/ar.c31
-rw-r--r--binutils/bucomm.c6
3 files changed, 29 insertions, 17 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index c864bc4..2448972 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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>
* readelf.c (is_16bit_abs_reloc): Handle mn10200 reloc.
diff --git a/binutils/ar.c b/binutils/ar.c
index 13637f4..aceb9d1 100644
--- a/binutils/ar.c
+++ b/binutils/ar.c
@@ -937,10 +937,11 @@ open_inarch (const char *archive_filename, const char *file)
static void
print_contents (bfd *abfd)
{
- size_t ncopied = 0;
+ bfd_size_type ncopied = 0;
+ bfd_size_type size;
char *cbuf = (char *) xmalloc (BUFSIZE);
struct stat buf;
- size_t size;
+
if (bfd_stat_arch_elt (abfd, &buf) != 0)
/* xgettext:c-format */
fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
@@ -953,22 +954,22 @@ print_contents (bfd *abfd)
size = buf.st_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)
tocopy = BUFSIZE;
- nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd);
+ nread = bfd_bread (cbuf, tocopy, abfd);
if (nread != tocopy)
/* xgettext:c-format */
fatal (_("%s is not a valid archive"),
bfd_get_filename (bfd_my_archive (abfd)));
- /* fwrite in mingw32 may return int instead of size_t. Cast the
- return value to size_t to avoid comparison between signed and
+ /* fwrite in mingw32 may return int instead of bfd_size_type. Cast the
+ return value to bfd_size_type to avoid comparison between signed and
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));
ncopied += tocopy;
}
@@ -990,9 +991,9 @@ extract_file (bfd *abfd)
{
FILE *ostream;
char *cbuf = (char *) xmalloc (BUFSIZE);
- size_t nread, tocopy;
- size_t ncopied = 0;
- size_t size;
+ bfd_size_type nread, tocopy;
+ bfd_size_type ncopied = 0;
+ bfd_size_type size;
struct stat buf;
if (bfd_stat_arch_elt (abfd, &buf) != 0)
@@ -1027,7 +1028,7 @@ extract_file (bfd *abfd)
if (tocopy > BUFSIZE)
tocopy = BUFSIZE;
- nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd);
+ nread = bfd_bread (cbuf, tocopy, abfd);
if (nread != tocopy)
/* xgettext:c-format */
fatal (_("%s is not a valid archive"),
@@ -1049,10 +1050,10 @@ extract_file (bfd *abfd)
output_file = ostream;
}
- /* fwrite in mingw32 may return int instead of size_t. Cast
- the return value to size_t to avoid comparison between
+ /* fwrite in mingw32 may return int instead of bfd_size_type. Cast
+ the return value to bfd_size_type to avoid comparison between
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));
ncopied += tocopy;
}
diff --git a/binutils/bucomm.c b/binutils/bucomm.c
index 86cb6e4..bb3fb3f 100644
--- a/binutils/bucomm.c
+++ b/binutils/bucomm.c
@@ -427,16 +427,18 @@ print_arelt_descr (FILE *file, bfd *abfd, bfd_boolean verbose)
char timebuf[40];
time_t when = buf.st_mtime;
const char *ctime_result = (const char *) ctime (&when);
+ bfd_size_type size;
/* POSIX format: skip weekday and seconds from ctime output. */
sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20);
mode_string (buf.st_mode, modebuf);
modebuf[10] = '\0';
+ size = buf.st_size;
/* 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_size, timebuf);
+ size, timebuf);
}
}