]> git.wh0rd.org - dump.git/blobdiff - dump/unctime.c
Remove -lselinux -lsepol from standard libs list.
[dump.git] / dump / unctime.c
index d05053fc4f78026bbd6ac579ae175956d5771117..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.
  *
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: unctime.c,v 1.9 2000/12/04 15:43:16 stelian Exp $";
+       "$Id: unctime.c,v 1.16 2003/03/30 15:40:37 stelian Exp $";
 #endif /* not lint */
 
+#include <config.h>
+#include <sys/time.h>
 #include <time.h>
 #ifdef __STDC__
 #include <stdlib.h>
@@ -54,7 +52,11 @@ static const char rcsid[] =
 #include <stdio.h>
 
 #ifdef __linux__
+#ifdef HAVE_EXT2FS_EXT2_FS_H
+#include <ext2fs/ext2_fs.h>
+#else
 #include <linux/ext2_fs.h>
+#endif
 #include <ext2fs/ext2fs.h>
 #include <bsdcompat.h>
 #endif
@@ -78,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 *));
 
@@ -86,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';
@@ -99,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[] =
@@ -108,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)