mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
Import date parser from libldap
This commit is contained in:
parent
29b0ed18df
commit
a103bf9b38
@ -544,20 +544,33 @@ time2text( char *ldtimestr, int dateonly )
|
||||
struct tm t;
|
||||
char *p, *timestr, zone, *fmterr = "badly formatted time";
|
||||
time_t gmttime;
|
||||
char timebuf[32];
|
||||
int ndigits;
|
||||
|
||||
memset( (char *)&t, 0, sizeof( struct tm ));
|
||||
if ( strlen( ldtimestr ) < 13 ) {
|
||||
return( fmterr );
|
||||
if (strlen( ldtimestr ) < 12 ) {
|
||||
return( fmterr );
|
||||
}
|
||||
|
||||
for ( ndigits=0; isdigit((unsigned char) ldtimestr[ndigits]); ndigits++) {
|
||||
; /* EMPTY */
|
||||
}
|
||||
|
||||
for ( p = ldtimestr; p - ldtimestr < 12; ++p ) {
|
||||
if ( !isdigit( (unsigned char) *p )) {
|
||||
if ( ndigits != 12 && ndigits != 14) {
|
||||
return( fmterr );
|
||||
}
|
||||
}
|
||||
|
||||
memset( (char *)&t, 0, sizeof( struct tm ));
|
||||
|
||||
p = ldtimestr;
|
||||
|
||||
if( ndigits == 14) {
|
||||
/* came with a century */
|
||||
/* POSIX says tm_year should be year - 1900 */
|
||||
t.tm_year = 100 * GET2BYTENUM( p ) - 1900;
|
||||
p += 2;
|
||||
}
|
||||
t.tm_year = GET2BYTENUM( p ); p += 2;
|
||||
|
||||
t.tm_mon = GET2BYTENUM( p ) - 1; p += 2;
|
||||
t.tm_mday = GET2BYTENUM( p ); p += 2;
|
||||
t.tm_hour = GET2BYTENUM( p ); p += 2;
|
||||
@ -576,7 +589,6 @@ time2text( char *ldtimestr, int dateonly )
|
||||
SAFEMEMCPY( timestr + 11, timestr + 20, strlen( timestr + 20 ) + 1 );
|
||||
}
|
||||
|
||||
Free ( ldtimestr );
|
||||
return( strdup( timestr ) );
|
||||
}
|
||||
|
||||
@ -596,7 +608,28 @@ int dmsize[] = {
|
||||
#define dysize(y) \
|
||||
(((y) % 4) ? 365 : (((y) % 100) ? 366 : (((y) % 400) ? 365 : 366)))
|
||||
|
||||
#define YEAR(y) ((y) >= 100 ? (y) : (y) + 1900)
|
||||
/*
|
||||
* Y2K YEAR
|
||||
*/
|
||||
/* per POSIX tm_year should be offset by 1900 */
|
||||
#define YEAR_POSIX(y) ((y) + 1900)
|
||||
|
||||
/*
|
||||
* year is < 1900, year is offset by 1900
|
||||
*/
|
||||
#define YEAR_CAREFUL(y) ((y) < 1900 ? (y) + 1900 : (y))
|
||||
|
||||
/*
|
||||
** if year is < 1990 and < 70 must be offset by 2000 as Unix epoch
|
||||
** started in 1970. if year is < 1990 but >= 70, offset by 1900.
|
||||
** if year is >= 1900, it must be the real year.
|
||||
*/
|
||||
#define YEAR_PEDANTIC(y) ((y) < 1900 \
|
||||
? ((y) < 70 ? (y) + 2000 ? (y) + 1900) \
|
||||
: (y))
|
||||
|
||||
#define YEAR(y) YEAR_CAREFUL(y)
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user