mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Remove formatter's assumption that year would never exceed four digits.
Enforce MAXTZLEN for all datestyles, not just some. Remove macro definitions that were redundant with datetime.h.
This commit is contained in:
parent
b1f10c84dc
commit
975da0a75e
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.65 2001/06/18 16:14:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.66 2001/07/10 01:41:47 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -25,6 +25,9 @@
|
||||
#include "utils/guc.h"
|
||||
#include "utils/datetime.h"
|
||||
|
||||
|
||||
#define ROUND_ALL 1
|
||||
|
||||
static int DecodeNumber(int flen, char *field,
|
||||
int fmask, int *tmask,
|
||||
struct tm * tm, double *fsec, int *is2digits);
|
||||
@ -36,15 +39,12 @@ static int DecodeTime(char *str, int fmask, int *tmask,
|
||||
static int DecodeTimezone(char *str, int *tzp);
|
||||
static datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
|
||||
static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
|
||||
|
||||
#define ROUND_ALL 0
|
||||
|
||||
static int DecodePosixTimezone(char *str, int *val);
|
||||
|
||||
|
||||
int day_tab[2][13] = {
|
||||
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0},
|
||||
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
|
||||
|
||||
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
|
||||
|
||||
char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
|
||||
@ -53,28 +53,13 @@ char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
|
||||
"Thursday", "Friday", "Saturday", NULL};
|
||||
|
||||
|
||||
#define UTIME_MINYEAR (1901)
|
||||
#define UTIME_MINMONTH (12)
|
||||
#define UTIME_MINDAY (14)
|
||||
#define UTIME_MAXYEAR (2038)
|
||||
#define UTIME_MAXMONTH (01)
|
||||
#define UTIME_MAXDAY (18)
|
||||
|
||||
#define IS_VALID_UTIME(y,m,d) (((y > UTIME_MINYEAR) \
|
||||
|| ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
|
||||
|| ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
|
||||
&& ((y < UTIME_MAXYEAR) \
|
||||
|| ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
|
||||
|| ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* PRIVATE ROUTINES *
|
||||
*****************************************************************************/
|
||||
|
||||
/* definitions for squeezing values into "value" */
|
||||
#define ABS_SIGNBIT (char) 0200
|
||||
#define VALMASK (char) 0177
|
||||
#define ABS_SIGNBIT ((char) 0200)
|
||||
#define VALMASK ((char) 0177)
|
||||
#define NEG(n) ((n)|ABS_SIGNBIT)
|
||||
#define SIGNEDCHAR(c) ((c)&ABS_SIGNBIT? -((c)&VALMASK): (c))
|
||||
#define FROMVAL(tp) (-SIGNEDCHAR((tp)->value) * 10) /* uncompress */
|
||||
@ -2112,7 +2097,7 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
|
||||
{
|
||||
sprintf(str, "%04d-%02d-%02d %02d:%02d:",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min);
|
||||
sprintf((str + 17), ((fsec != 0) ? "%05.2f" : "%02.0f"), sec);
|
||||
sprintf((str + strlen(str)), ((fsec != 0) ? "%05.2f" : "%02.0f"), sec);
|
||||
|
||||
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
|
||||
{
|
||||
@ -2154,11 +2139,7 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
|
||||
tm->tm_year, tm->tm_hour, tm->tm_min, sec);
|
||||
|
||||
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
|
||||
{
|
||||
strcpy((str + 22), " ");
|
||||
strcpy((str + 23), *tzn);
|
||||
}
|
||||
|
||||
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
||||
}
|
||||
else
|
||||
sprintf((str + 5), "/%04d %02d:%02d %s",
|
||||
@ -2174,11 +2155,7 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
|
||||
tm->tm_year, tm->tm_hour, tm->tm_min, sec);
|
||||
|
||||
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
|
||||
{
|
||||
strcpy((str + 22), " ");
|
||||
strcpy((str + 23), *tzn);
|
||||
}
|
||||
|
||||
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
||||
}
|
||||
else
|
||||
sprintf((str + 5), ".%04d %02d:%02d %s",
|
||||
@ -2206,21 +2183,14 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
|
||||
{
|
||||
sprintf((str + 16), ":%05.2f %04d", sec, tm->tm_year);
|
||||
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
|
||||
{
|
||||
strcpy((str + 27), " ");
|
||||
StrNCpy((str + 28), *tzn, MAXTZLEN + 1);
|
||||
}
|
||||
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf((str + 16), ":%02.0f %04d", sec, tm->tm_year);
|
||||
if ((*tzn != NULL) && (tm->tm_isdst >= 0))
|
||||
{
|
||||
strcpy((str + 24), " ");
|
||||
StrNCpy((str + 25), *tzn, MAXTZLEN + 1);
|
||||
}
|
||||
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user