Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Jun 2013 14:16:52 +0000 (UTC)
From:      "Pedro F. Giffuni" <pfg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r251225 - head/contrib/binutils/bfd
Message-ID:  <201306011416.r51EGq41024554@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pfg
Date: Sat Jun  1 14:16:51 2013
New Revision: 251225
URL: http://svnweb.freebsd.org/changeset/base/251225

Log:
  BFD: Use time_t instead of long for archive timestamps.
  
  This basically follows the suggestion in the binutils code and is more
  in line with what BSD ar(1) does.
  
  Obtained from:	OpenBSD
  MFC after:	2 weeks.

Modified:
  head/contrib/binutils/bfd/archive.c
  head/contrib/binutils/bfd/bfd-in2.h
  head/contrib/binutils/bfd/bfdio.c
  head/contrib/binutils/bfd/coff-rs6000.c
  head/contrib/binutils/bfd/ecoff.c
  head/contrib/binutils/bfd/libbfd-in.h
  head/contrib/binutils/bfd/libbfd.h

Modified: head/contrib/binutils/bfd/archive.c
==============================================================================
--- head/contrib/binutils/bfd/archive.c	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/archive.c	Sat Jun  1 14:16:51 2013	(r251225)
@@ -1390,8 +1390,8 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, c
   /* ar headers are space padded, not null padded!  */
   memset (hdr, ' ', sizeof (struct ar_hdr));
 
-  _bfd_ar_spacepad (hdr->ar_date, sizeof (hdr->ar_date), "%-12ld",
-                    status.st_mtime);
+  _bfd_ar_spacepad (hdr->ar_date, sizeof (hdr->ar_date), "%-12lld",
+                    (long long)status.st_mtime);
 #ifdef HPUX_LARGE_AR_IDS
   /* HP has a very "special" way to handle UID/GID's with numeric values
      > 99999.  */
@@ -1458,6 +1458,11 @@ bfd_generic_stat_arch_elt (bfd *abfd, st
   if (aloser == hdr->arelt)	      			\
     return -1;
 
+#define fooll(arelt, stelt, size)			\
+  buf->stelt = strtoll (hdr->arelt, &aloser, size);	\
+  if (aloser == hdr->arelt)	      			\
+    return -1;
+
   /* Some platforms support special notations for large IDs.  */
 #ifdef HPUX_LARGE_AR_IDS
 # define foo2(arelt, stelt, size)					\
@@ -1484,7 +1489,7 @@ bfd_generic_stat_arch_elt (bfd *abfd, st
 # define foo2(arelt, stelt, size) foo (arelt, stelt, size)
 #endif
 
-  foo (ar_date, st_mtime, 10);
+  fooll (ar_date, st_mtime, 10);
   foo2 (ar_uid, st_uid, 10);
   foo2 (ar_gid, st_gid, 10);
   foo (ar_mode, st_mode, 8);

Modified: head/contrib/binutils/bfd/bfd-in2.h
==============================================================================
--- head/contrib/binutils/bfd/bfd-in2.h	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/bfd-in2.h	Sat Jun  1 14:16:51 2013	(r251225)
@@ -38,6 +38,7 @@ extern "C" {
 
 #include "ansidecl.h"
 #include "symcat.h"
+#include <time.h>	/* time_t */
 #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
 #ifndef SABER
 /* This hack is to avoid a problem with some strict ANSI C preprocessors.
@@ -1141,7 +1142,7 @@ bfd_boolean bfd_fill_in_gnu_debuglink_se
 
 
 /* Extracted from bfdio.c.  */
-long bfd_get_mtime (bfd *abfd);
+time_t bfd_get_mtime (bfd *abfd);
 
 file_ptr bfd_get_size (bfd *abfd);
 

Modified: head/contrib/binutils/bfd/bfdio.c
==============================================================================
--- head/contrib/binutils/bfd/bfdio.c	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/bfdio.c	Sat Jun  1 14:16:51 2013	(r251225)
@@ -377,7 +377,7 @@ FUNCTION
 	bfd_get_mtime
 
 SYNOPSIS
-	long bfd_get_mtime (bfd *abfd);
+	time_t bfd_get_mtime (bfd *abfd);
 
 DESCRIPTION
 	Return the file modification time (as read from the file system, or
@@ -385,7 +385,7 @@ DESCRIPTION
 
 */
 
-long
+time_t
 bfd_get_mtime (bfd *abfd)
 {
   struct stat buf;

Modified: head/contrib/binutils/bfd/coff-rs6000.c
==============================================================================
--- head/contrib/binutils/bfd/coff-rs6000.c	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/coff-rs6000.c	Sat Jun  1 14:16:51 2013	(r251225)
@@ -1548,7 +1548,7 @@ _bfd_xcoff_stat_arch_elt (abfd, s)
     {
       struct xcoff_ar_hdr *hdrp = arch_xhdr (abfd);
 
-      s->st_mtime = strtol (hdrp->date, (char **) NULL, 10);
+      s->st_mtime = strtoll (hdrp->date, (char **) NULL, 10);
       s->st_uid = strtol (hdrp->uid, (char **) NULL, 10);
       s->st_gid = strtol (hdrp->gid, (char **) NULL, 10);
       s->st_mode = strtol (hdrp->mode, (char **) NULL, 8);
@@ -1558,7 +1558,7 @@ _bfd_xcoff_stat_arch_elt (abfd, s)
     {
       struct xcoff_ar_hdr_big *hdrp = arch_xhdr_big (abfd);
 
-      s->st_mtime = strtol (hdrp->date, (char **) NULL, 10);
+      s->st_mtime = strtoll (hdrp->date, (char **) NULL, 10);
       s->st_uid = strtol (hdrp->uid, (char **) NULL, 10);
       s->st_gid = strtol (hdrp->gid, (char **) NULL, 10);
       s->st_mode = strtol (hdrp->mode, (char **) NULL, 8);
@@ -1678,6 +1678,7 @@ xcoff_write_armap_old (abfd, elength, ma
 static char buff20[XCOFFARMAGBIG_ELEMENT_SIZE + 1];
 #define FMT20  "%-20lld"
 #define FMT12  "%-12d"
+#define FMT12_LL  "%-12lld"
 #define FMT12_OCTAL  "%-12o"
 #define FMT4  "%-4d"
 #define PRINT20(d, v) \
@@ -1688,6 +1689,10 @@ static char buff20[XCOFFARMAGBIG_ELEMENT
   sprintf (buff20, FMT12, (int)(v)), \
   memcpy ((void *) (d), buff20, 12)
 
+#define PRINT12_LL(d, v) \
+  sprintf (buff20, FMT12_LL, (long long)(v)), \
+  memcpy ((void *) (d), buff20, 12)
+
 #define PRINT12_OCTAL(d, v) \
   sprintf (buff20, FMT12_OCTAL, (unsigned int)(v)), \
   memcpy ((void *) (d), buff20, 12)
@@ -2152,7 +2157,7 @@ xcoff_write_archive_contents_old (abfd)
 	    }
 
 	  sprintf (ahdrp->size, "%ld", (long) s.st_size);
-	  sprintf (ahdrp->date, "%ld", (long) s.st_mtime);
+	  sprintf (ahdrp->date, "%lld", (long long) s.st_mtime);
 	  sprintf (ahdrp->uid, "%ld", (long) s.st_uid);
 	  sprintf (ahdrp->gid, "%ld", (long) s.st_gid);
 	  sprintf (ahdrp->mode, "%o", (unsigned int) s.st_mode);
@@ -2388,7 +2393,7 @@ xcoff_write_archive_contents_big (abfd)
 	    }
 
 	  PRINT20 (ahdrp->size, s.st_size);
-	  PRINT12 (ahdrp->date, s.st_mtime);
+	  PRINT12_LL (ahdrp->date, s.st_mtime);
 	  PRINT12 (ahdrp->uid,  s.st_uid);
 	  PRINT12 (ahdrp->gid,  s.st_gid);
 	  PRINT12_OCTAL (ahdrp->mode, s.st_mode);

Modified: head/contrib/binutils/bfd/ecoff.c
==============================================================================
--- head/contrib/binutils/bfd/ecoff.c	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/ecoff.c	Sat Jun  1 14:16:51 2013	(r251225)
@@ -3050,7 +3050,7 @@ _bfd_ecoff_write_armap (bfd *abfd,
      linker just checks the archive name; the GNU linker may check the
      date.  */
   stat (abfd->filename, &statbuf);
-  sprintf (hdr.ar_date, "%ld", (long) (statbuf.st_mtime + 60));
+  sprintf (hdr.ar_date, "%lld", (long long) (statbuf.st_mtime + 60));
 
   /* The DECstation uses zeroes for the uid, gid and mode of the
      armap.  */

Modified: head/contrib/binutils/bfd/libbfd-in.h
==============================================================================
--- head/contrib/binutils/bfd/libbfd-in.h	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/libbfd-in.h	Sat Jun  1 14:16:51 2013	(r251225)
@@ -71,8 +71,7 @@ struct artdata {
   symindex symdef_count;	/* how many there are */
   char *extended_names;		/* clever intel extension */
   bfd_size_type extended_names_size; /* Size of extended names */
-  /* when more compilers are standard C, this can be a time_t */
-  long  armap_timestamp;	/* Timestamp value written into armap.
+  time_t  armap_timestamp;	/* Timestamp value written into armap.
 				   This is used for BSD archives to check
 				   that the timestamp is recent enough
 				   for the BSD linker to not complain,

Modified: head/contrib/binutils/bfd/libbfd.h
==============================================================================
--- head/contrib/binutils/bfd/libbfd.h	Sat Jun  1 13:10:24 2013	(r251224)
+++ head/contrib/binutils/bfd/libbfd.h	Sat Jun  1 14:16:51 2013	(r251225)
@@ -76,8 +76,7 @@ struct artdata {
   symindex symdef_count;	/* how many there are */
   char *extended_names;		/* clever intel extension */
   bfd_size_type extended_names_size; /* Size of extended names */
-  /* when more compilers are standard C, this can be a time_t */
-  long  armap_timestamp;	/* Timestamp value written into armap.
+  time_t  armap_timestamp;	/* Timestamp value written into armap.
 				   This is used for BSD archives to check
 				   that the timestamp is recent enough
 				   for the BSD linker to not complain,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306011416.r51EGq41024554>