]> git.wh0rd.org - dump.git/blobdiff - dump/unctime.c
Remove -lselinux -lsepol from standard libs list.
[dump.git] / dump / unctime.c
index d617544dad125013f2ee00552f6b29566cf48ce4..684719d25ecab940fed124a1a693e0702d61e48d 100644 (file)
@@ -2,8 +2,8 @@
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
  *     Remy Card <card@Linux.EU.Org>, 1994-1997
- *     Stelian Pop <pop@noos.fr>, 1999-2000
- *     Stelian Pop <pop@noos.fr> - Alcôve <www.alcove.fr>, 2000
+ *     Stelian Pop <stelian@popies.net>, 1999-2000
+ *     Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
  */
 
 /*-
  * 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.
  *
@@ -41,7 +37,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: unctime.c,v 1.12 2001/07/18 09:12:05 stelian Exp $";
+       "$Id: unctime.c,v 1.16 2003/03/30 15:40:37 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -84,6 +80,7 @@ static const char rcsid[] =
 #define        E_MINUTE        14
 #define        E_SECOND        17
 #define        E_YEAR          20
+#define E_TZOFFSET      25
 
 static int lookup __P((const char *));
 
@@ -92,7 +89,9 @@ time_t
 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';
@@ -105,7 +104,15 @@ unctime(const char *str)
        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[] =
@@ -114,7 +121,7 @@ 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)