Mercurial > hg > octave-nkf > gnulib-hg
changeset 8049:93b9f2a87f93
* lib/strptime.h (strptime): Use 'restrict' for args where
POSIX requires this.
* lib/strptime.c (strptime): Likewise.
Change license notice from LGPL to GPL, since gnulib-tool will
change this as needed.
Include <config.h> if _LIBC is not defined, not if HAVE_CONFIG_H is
defined.
Include "strptime.h" first, to check interface.
Do not #undef _LIBC and _NL_CURRENT.
Do not include <stdlib.h>; no longer needed.
Include "time_r.h" and declare ptime_locale_status
only if _LIBC is not defined.
(__P): Remove unused macro.
(match_string): Bring back glibc version, but use it only if _LIBC
is defined.
(__strptime_internal): Compile tm_gmtoff code if _LIBC is defined, too.
Remove unnecessary assertion and abort() call.
Use #ifdef _NL_CURRENT rather than #if 0, for benefit of glibc.
* m4/strptime.m4: Fix serial number comment.
(gl_FUNC_STRPTIME): Require AC_C_RESTRICT, gl_TM_GMTOFF.
* modules/strptime (Files): Add m4/tm_gmtoff.m4.
(Depends-on): Add time_r.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 29 Jan 2007 23:12:55 +0000 |
parents | 005cc63d6763 |
children | 6cec54d3ab2f |
files | ChangeLog lib/strptime.c lib/strptime.h m4/strptime.m4 modules/strptime |
diffstat | 5 files changed, 65 insertions(+), 47 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2007-01-29 Paul Eggert <eggert@cs.ucla.edu> + + * lib/strptime.h (strptime): Use 'restrict' for args where + POSIX requires this. + * lib/strptime.c (strptime): Likewise. + Change license notice from LGPL to GPL, since gnulib-tool will + change this as needed. + Include <config.h> if _LIBC is not defined, not if HAVE_CONFIG_H is + defined. + Include "strptime.h" first, to check interface. + Do not #undef _LIBC and _NL_CURRENT. + Do not include <stdlib.h>; no longer needed. + Include "time_r.h" and declare ptime_locale_status + only if _LIBC is not defined. + (__P): Remove unused macro. + (match_string): Bring back glibc version, but use it only if _LIBC + is defined. + (__strptime_internal): Compile tm_gmtoff code if _LIBC is defined, too. + Remove unnecessary assertion and abort() call. + Use #ifdef _NL_CURRENT rather than #if 0, for benefit of glibc. + * m4/strptime.m4: Fix serial number comment. + (gl_FUNC_STRPTIME): Require AC_C_RESTRICT, gl_TM_GMTOFF. + * modules/strptime (Files): Add m4/tm_gmtoff.m4. + (Depends-on): Add time_r. + 2007-01-29 Bruno Haible <bruno@clisp.org> * MODULES.html.sh (Support for systems lacking POSIX:2001): Add
--- a/lib/strptime.c +++ b/lib/strptime.c @@ -1,29 +1,25 @@ -/* Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. - The GNU C Library is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifdef HAVE_CONFIG_H +#ifndef _LIBC # include <config.h> +# include "strptime.h" #endif -#undef _LIBC -#undef _NL_CURRENT - -#include <sys/time.h> #include <assert.h> #include <ctype.h> #ifdef _LIBC @@ -38,29 +34,25 @@ # include "../locale/localeinfo.h" #endif -#include <stdlib.h> -#include "strptime.h" -#include "time_r.h" - - +#ifndef _LIBC +# include "time_r.h" enum ptime_locale_status { not, loc, raw }; - - -#ifndef __P -# if defined __GNUC__ || (defined __STDC__ && __STDC__) -# define __P(args) args -# else -# define __P(args) () -# endif /* GCC. */ -#endif /* Not __P. */ +#endif #define match_char(ch1, ch2) if (ch1 != ch2) return NULL - +#if defined _LIBC && defined __GNUC__ && __GNUC__ >= 2 +# define match_string(cs1, s2) \ + ({ size_t len = strlen (cs1); \ + int result = __strncasecmp_l ((cs1), (s2), len, locale) == 0; \ + if (result) (s2) += len; \ + result; }) +#else +/* Oh come on. Get a reasonable compiler. */ # define match_string(cs1, s2) \ (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) - +#endif /* We intentionally do not use isdigit() for testing because this will lead to problems with the wide character version. */ #define get_number(from, to, n) \ @@ -271,7 +263,7 @@ have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; have_wweek = 0; - + while (*fmt != '\0') { /* A white space in the format string matches 0 more or white @@ -703,11 +695,11 @@ } if (val > 1200) return NULL; -#ifdef HAVE_TM_GMTOFF +#if defined _LIBC || HAVE_TM_GMTOFF tm->tm_gmtoff = (val * 3600) / 100; if (neg) tm->tm_gmtoff = -tm->tm_gmtoff; -#endif +#endif } break; case 'E': @@ -1036,11 +1028,9 @@ tm->tm_year = (century - 19) * 100; } - assert(era_cnt == -1); if (era_cnt != -1) { - abort(); -#if 0 +#ifdef _NL_CURRENT era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era == NULL) return NULL; @@ -1126,9 +1116,9 @@ char * strptime (buf, format, tm LOCALE_PARAM) - const char *buf; - const char *format; - struct tm *tm; + const char *restrict buf; + const char *restrict format; + struct tm *restrict tm; LOCALE_PARAM_DECL { enum ptime_locale_status decided; @@ -1144,4 +1134,3 @@ #ifdef _LIBC weak_alias (__strptime_l, strptime_l) #endif -
--- a/lib/strptime.h +++ b/lib/strptime.h @@ -23,7 +23,8 @@ #if ! HAVE_STRPTIME /* See the POSIX:2001 specification <http://www.opengroup.org/susv3xsh/strptime.html>. */ -extern char *strptime (const char *s, const char *format, struct tm *tm); +extern char *strptime (const char *restrict s, const char *restrict format, + struct tm *restrict tm); #endif #endif /* GNULIB_STRPTIME_H_ */
--- a/m4/strptime.m4 +++ b/m4/strptime.m4 @@ -1,10 +1,12 @@ -# strtol.m4 serial 4 -dnl Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc. +# strptime.m4 serial 2 +dnl Copyright (C) 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRPTIME], [ + AC_REQUIRE([AC_C_RESTRICT]) AC_REPLACE_FUNCS(strptime) + AC_REQUIRE([gl_TM_GMTOFF]) ])