@@ -, +, @@ 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'). --- a/binutils/ar.c +++ a/binutils/ar.c @@ -937,10 +937,10 @@ open_inarch (const char *archive_filename, const char *file) static void print_contents (bfd *abfd) { - size_t ncopied = 0; + bfd_size_type ncopied = 0; char *cbuf = (char *) xmalloc (BUFSIZE); struct stat buf; - size_t size; + bfd_size_type size; if (bfd_stat_arch_elt (abfd, &buf) != 0) /* xgettext:c-format */ fatal (_("internal stat error on %s"), bfd_get_filename (abfd)); @@ -954,12 +954,12 @@ print_contents (bfd *abfd) while (ncopied < size) { - size_t nread; - size_t tocopy = size - ncopied; + bfd_size_type nread; + bfd_size_type 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"), @@ -990,9 +990,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 +1027,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"), --- a/binutils/bucomm.c +++ a/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); } }