* 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@cybercable.fr>, 1999
- *
+ * 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.
*
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- * $Id: unctime.c,v 1.5 1999/10/11 13:31:12 stelian Exp $
*/
+#ifndef lint
+static const char rcsid[] =
+ "$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>
#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
#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)