changeset 5932:8ef7d6084536

* mktime.c: Include <string.h> even if !DEBUG. (From glibc.) (ranged_convert): Don't save conversion in a temporary struct. This causes a warning with GCC 4.0.0, and anyway in the typical case it's not worth the extra 100 bytes or so of code. (ranged_convert, __mktime_internal): When calling a function via a pointer P, use P () rather than (*P) (), as we now assume C89 or better.
author Paul Eggert <eggert@cs.ucla.edu>
date Thu, 23 Jun 2005 07:14:09 +0000
parents 673d533b0778
children 35504bd557fa
files lib/ChangeLog lib/mktime.c
diffstat 2 files changed, 20 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog	Wed Jun 22 18:27:44 2005 +0000
+++ b/lib/ChangeLog	Thu Jun 23 07:14:09 2005 +0000
@@ -1,3 +1,13 @@
+2005-06-23  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* mktime.c: Include <string.h> even if !DEBUG.  (From glibc.)
+	(ranged_convert): Don't save conversion in a temporary struct.
+	This causes a warning with GCC 4.0.0, and anyway in the typical
+	case it's not worth the extra 100 bytes or so of code.
+	(ranged_convert, __mktime_internal): When calling a function via a
+	pointer P, use P () rather than (*P) (), as we now assume C89 or
+	better.
+
 2005-06-22  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* readutmp.c (desirable_utmp_entry): Fix bug where "who -b" and
--- a/lib/mktime.c	Wed Jun 22 18:27:44 2005 +0000
+++ b/lib/mktime.c	Thu Jun 23 07:14:09 2005 +0000
@@ -1,5 +1,5 @@
 /* Convert a `struct tm' to a time_t value.
-   Copyright (C) 1993-1999, 2002, 2003, 2004, 2005 Free Software Foundation,
+   Copyright (C) 1993-1999, 2002-2004, 2005 Free Software Foundation, Inc.
    Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert (eggert@twinsun.com).
@@ -38,10 +38,11 @@
 
 #include <limits.h>
 
+#include <string.h>		/* For the real memcpy prototype.  */
+
 #if DEBUG
 # include <stdio.h>
 # include <stdlib.h>
-# include <string.h>
 /* Make it work even if the system's libc has its own mktime routine.  */
 # define mktime my_mktime
 #endif /* DEBUG */
@@ -228,13 +229,12 @@
 ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
 		time_t *t, struct tm *tp)
 {
-  struct tm *r;
+  struct tm *r = convert (t, tp);
 
-  if (! (r = (*convert) (t, tp)) && *t)
+  if (!r && *t)
     {
       time_t bad = *t;
       time_t ok = 0;
-      struct tm tm;
 
       /* BAD is a known unconvertible time_t, and OK is a known good one.
 	 Use binary search to narrow the range between BAD and OK until
@@ -244,11 +244,9 @@
 	  time_t mid = *t = (bad < 0
 			     ? bad + ((ok - bad) >> 1)
 			     : ok + ((bad - ok) >> 1));
-	  if ((r = (*convert) (t, tp)))
-	    {
-	      tm = *r;
-	      ok = mid;
-	    }
+	  r = convert (t, tp);
+	  if (r)
+	    ok = mid;
 	  else
 	    bad = mid;
 	}
@@ -258,8 +256,7 @@
 	  /* The last conversion attempt failed;
 	     revert to the most recent successful attempt.  */
 	  *t = ok;
-	  *tp = tm;
-	  r = tp;
+	  r = convert (t, tp);
 	}
     }
 
@@ -488,7 +485,7 @@
       t2 = t1 + sec_adjustment;
       if (((t1 < t) != (sec_requested < 0))
 	  | ((t2 < t1) != (sec_adjustment < 0))
-	  | ! (*convert) (&t2, &tm))
+	  | ! convert (&t2, &tm))
 	return -1;
       t = t2;
     }