X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fposixtm.c;h=b09c03f1ef62c317e8e553ddca2e4324e618048a;hb=b5a2c641784fe37cba7c02f109edda0fbed47de3;hp=4af84318171556514101b3f3a83a438c57011a82;hpb=9a2e1a1ebd6b186420a1dd2bed571ddcf63646e7;p=gnulib.git diff --git a/lib/posixtm.c b/lib/posixtm.c index 4af843181..b09c03f1e 100644 --- a/lib/posixtm.c +++ b/lib/posixtm.c @@ -1,5 +1,5 @@ -/* Parse dates. - Copyright (C) 1989, 1990, 1991, 1998 Free Software Foundation Inc. +/* Parse dates for touch and date. + Copyright (C) 1989, 1990, 1991, 1998, 2000-2002 Free Software Foundation Inc. 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 @@ -23,6 +23,9 @@ #endif #include +#if HAVE_STDLIB_H +# include +#endif #include #if HAVE_STRING_H # include @@ -37,15 +40,15 @@ #endif #include "posixtm.h" +#include "unlocked-io.h" /* ISDIGIT differs from isdigit, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char. - It's guaranteed to evaluate its argument exactly once. - It's typically faster. - Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that - only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless - it's important to use the locale's definition of `digit' even when the - host does not conform to Posix. */ + POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to + ISDIGIT_LOCALE unless it's important to use the locale's definition + of `digit' even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) /* The return value. */ @@ -60,7 +63,7 @@ time_t mktime (); 8, 10, or 12 digits, followed by optional .ss (PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS) - touch mmddhhmm[YY] FILE... (obsolescent) + touch mmddhhmm[YY] FILE... (obsoleted by POSIX 1003.1-2001) 8 or 10 digits (PDS_TRAILING_YEAR) @@ -78,7 +81,8 @@ year (const int *digit_pair, size_t n, int allow_century) case 1: t.tm_year = *digit_pair; /* Deduce the century based on the year. - See POSIX.2 section 4.63.3. */ + POSIX requires that 00-68 be interpreted as 2000-2068, + and that 69-99 be interpreted as 1969-1999. */ if (digit_pair[0] <= 68) t.tm_year += 100; break; @@ -117,11 +121,11 @@ posix_time_parse (const char *s, unsigned int syntax_bits) const char *dot = NULL; int pair[6]; int *p; - int i; + unsigned int i; size_t s_len = strlen (s); size_t len = (((syntax_bits & PDS_SECONDS) && (dot = strchr (s, '.'))) - ? dot - s + ? (size_t) (dot - s) : s_len); if (len != 8 && len != 10 && len != 12)