* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
#ifndef lint
static const char rcsid[] =
- "$Id: unctime.c,v 1.13 2002/01/16 09:32:14 stelian Exp $";
+ "$Id: unctime.c,v 1.16 2003/03/30 15:40:37 stelian Exp $";
#endif /* not lint */
#include <config.h>
#define E_MINUTE 14
#define E_SECOND 17
#define E_YEAR 20
+#define E_TZOFFSET 25
static int lookup __P((const char *));
unctime(const char *str)
{
struct tm then;
- char dbuf[26];
+ char dbuf[32];
+ time_t rtime;
+ int tzoffset;
(void) strncpy(dbuf, str, sizeof(dbuf) - 1);
dbuf[sizeof(dbuf) - 1] = '\0';
then.tm_sec = atoi(&dbuf[E_SECOND]);
then.tm_year = atoi(&dbuf[E_YEAR]) - 1900;
then.tm_isdst = -1;
- return(mktime(&then));
+ if (strlen(str) >= E_TZOFFSET+5) {
+ rtime = timegm(&then);
+ /* add timezone offset */
+ tzoffset = atoi(&dbuf[E_TZOFFSET]);
+ rtime -= (tzoffset / 100 * 3600) + (tzoffset % 100) * 60;
+ } else {
+ rtime = timelocal(&then);
+ }
+ return(rtime);
}
static char months[] =
static int
lookup(const char *str)
{
- register const char *cp, *cp2;
+ const char *cp, *cp2;
for (cp = months, cp2 = str; *cp != '\0'; cp += 3)
if (strncmp(cp, cp2, 3) == 0)