Don't reinvent the wheel; use strptime(3).
MFC after: 2 weeks
This commit is contained in:
parent
4a3fdd9c57
commit
a55c208c2d
@ -40,10 +40,6 @@ static const char rcsid[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#include <time.h>
|
||||
#ifdef __STDC__
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Convert a ctime(3) format string into a system format date.
|
||||
@ -52,52 +48,16 @@ static const char rcsid[] =
|
||||
* Return -1 if the string is not in ctime format.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Offsets into the ctime string to various parts.
|
||||
*/
|
||||
|
||||
#define E_MONTH 4
|
||||
#define E_DAY 8
|
||||
#define E_HOUR 11
|
||||
#define E_MINUTE 14
|
||||
#define E_SECOND 17
|
||||
#define E_YEAR 20
|
||||
|
||||
static int lookup __P((char *));
|
||||
|
||||
|
||||
time_t
|
||||
unctime(str)
|
||||
char *str;
|
||||
{
|
||||
struct tm then;
|
||||
char dbuf[26];
|
||||
|
||||
(void) strncpy(dbuf, str, sizeof(dbuf) - 1);
|
||||
dbuf[sizeof(dbuf) - 1] = '\0';
|
||||
dbuf[E_MONTH+3] = '\0';
|
||||
if ((then.tm_mon = lookup(&dbuf[E_MONTH])) < 0)
|
||||
return (-1);
|
||||
then.tm_mday = atoi(&dbuf[E_DAY]);
|
||||
then.tm_hour = atoi(&dbuf[E_HOUR]);
|
||||
then.tm_min = atoi(&dbuf[E_MINUTE]);
|
||||
then.tm_sec = atoi(&dbuf[E_SECOND]);
|
||||
then.tm_year = atoi(&dbuf[E_YEAR]) - 1900;
|
||||
str = strptime(str, "%a %b %e %T %Y", &then);
|
||||
if (str == NULL || (*str != '\n' && *str != '\0'))
|
||||
return ((time_t)-1);
|
||||
then.tm_isdst = -1;
|
||||
return(mktime(&then));
|
||||
}
|
||||
|
||||
static char months[] =
|
||||
"JanFebMarAprMayJunJulAugSepOctNovDec";
|
||||
|
||||
static int
|
||||
lookup(str)
|
||||
char *str;
|
||||
{
|
||||
register char *cp, *cp2;
|
||||
|
||||
for (cp = months, cp2 = str; *cp != '\0'; cp += 3)
|
||||
if (strncmp(cp, cp2, 3) == 0)
|
||||
return((cp-months) / 3);
|
||||
return(-1);
|
||||
return (mktime(&then));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user