88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.65 2001/06/18 16:14:43 momjian Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.66 2001/07/10 01:41:47 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
2525#include "utils/guc.h"
2626#include "utils/datetime.h"
2727
28+
29+ #define ROUND_ALL 1
30+
2831static int DecodeNumber (int flen , char * field ,
2932 int fmask , int * tmask ,
3033 struct tm * tm , double * fsec , int * is2digits );
@@ -36,15 +39,12 @@ static int DecodeTime(char *str, int fmask, int *tmask,
3639static int DecodeTimezone (char * str , int * tzp );
3740static datetkn * datebsearch (char * key , datetkn * base , unsigned int nel );
3841static int DecodeDate (char * str , int fmask , int * tmask , struct tm * tm );
39-
40- #define ROUND_ALL 0
41-
4242static int DecodePosixTimezone (char * str , int * val );
4343
44+
4445int day_tab [2 ][13 ] = {
4546 {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 , 0 },
46- {31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 , 0 }};
47-
47+ {31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 , 0 }};
4848
4949char * months [] = {"Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" ,
5050"Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" , NULL };
@@ -53,28 +53,13 @@ char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
5353"Thursday" , "Friday" , "Saturday" , NULL };
5454
5555
56- #define UTIME_MINYEAR (1901)
57- #define UTIME_MINMONTH (12)
58- #define UTIME_MINDAY (14)
59- #define UTIME_MAXYEAR (2038)
60- #define UTIME_MAXMONTH (01)
61- #define UTIME_MAXDAY (18)
62-
63- #define IS_VALID_UTIME (y ,m ,d ) (((y > UTIME_MINYEAR) \
64- || ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
65- || ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
66- && ((y < UTIME_MAXYEAR) \
67- || ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
68- || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
69-
70-
7156/*****************************************************************************
7257 * PRIVATE ROUTINES *
7358 *****************************************************************************/
7459
7560/* definitions for squeezing values into "value" */
76- #define ABS_SIGNBIT (char) 0200
77- #define VALMASK (char) 0177
61+ #define ABS_SIGNBIT (( char) 0200)
62+ #define VALMASK (( char) 0177)
7863#define NEG (n ) ((n)|ABS_SIGNBIT)
7964#define SIGNEDCHAR (c ) ((c)&ABS_SIGNBIT? -((c)&VALMASK): (c))
8065#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
21122097 {
21132098 sprintf (str , "%04d-%02d-%02d %02d:%02d:" ,
21142099 tm -> tm_year , tm -> tm_mon , tm -> tm_mday , tm -> tm_hour , tm -> tm_min );
2115- sprintf ((str + 17 ), ((fsec != 0 ) ? "%05.2f" : "%02.0f" ), sec );
2100+ sprintf ((str + strlen ( str ) ), ((fsec != 0 ) ? "%05.2f" : "%02.0f" ), sec );
21162101
21172102 if ((* tzn != NULL ) && (tm -> tm_isdst >= 0 ))
21182103 {
@@ -2154,11 +2139,7 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
21542139 tm -> tm_year , tm -> tm_hour , tm -> tm_min , sec );
21552140
21562141 if ((* tzn != NULL ) && (tm -> tm_isdst >= 0 ))
2157- {
2158- strcpy ((str + 22 ), " " );
2159- strcpy ((str + 23 ), * tzn );
2160- }
2161-
2142+ sprintf ((str + strlen (str )), " %.*s" , MAXTZLEN , * tzn );
21622143 }
21632144 else
21642145 sprintf ((str + 5 ), "/%04d %02d:%02d %s" ,
@@ -2174,11 +2155,7 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
21742155 tm -> tm_year , tm -> tm_hour , tm -> tm_min , sec );
21752156
21762157 if ((* tzn != NULL ) && (tm -> tm_isdst >= 0 ))
2177- {
2178- strcpy ((str + 22 ), " " );
2179- strcpy ((str + 23 ), * tzn );
2180- }
2181-
2158+ sprintf ((str + strlen (str )), " %.*s" , MAXTZLEN , * tzn );
21822159 }
21832160 else
21842161 sprintf ((str + 5 ), ".%04d %02d:%02d %s" ,
@@ -2206,21 +2183,14 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
22062183 {
22072184 sprintf ((str + 16 ), ":%05.2f %04d" , sec , tm -> tm_year );
22082185 if ((* tzn != NULL ) && (tm -> tm_isdst >= 0 ))
2209- {
2210- strcpy ((str + 27 ), " " );
2211- StrNCpy ((str + 28 ), * tzn , MAXTZLEN + 1 );
2212- }
2186+ sprintf ((str + strlen (str )), " %.*s" , MAXTZLEN , * tzn );
22132187 }
22142188 else
22152189 {
22162190 sprintf ((str + 16 ), ":%02.0f %04d" , sec , tm -> tm_year );
22172191 if ((* tzn != NULL ) && (tm -> tm_isdst >= 0 ))
2218- {
2219- strcpy ((str + 24 ), " " );
2220- StrNCpy ((str + 25 ), * tzn , MAXTZLEN + 1 );
2221- }
2192+ sprintf ((str + strlen (str )), " %.*s" , MAXTZLEN , * tzn );
22222193 }
2223-
22242194 }
22252195 else
22262196 {
0 commit comments