Index: src/backend/utils/adt/formatting.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/utils/adt/formatting.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -c -p -r1.83 -r1.84
*** src/backend/utils/adt/formatting.c	1 Jan 2005 05:43:07 -0000	1.83
--- src/backend/utils/adt/formatting.c	13 Jan 2005 01:40:13 -0000	1.84
***************
*** 1,7 ****
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.83 2005-01-01 05:43:07 momjian Exp $
   *
   *
   *	 Portions Copyright (c) 1999-2005, PostgreSQL Global Development Group
--- 1,7 ----
  /* -----------------------------------------------------------------------
   * formatting.c
   *
!  * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.84 2005-01-13 01:40:13 tgl Exp $
   *
   *
   *	 Portions Copyright (c) 1999-2005, PostgreSQL Global Development Group
*************** get_th(char *num, int type)
*** 1462,1468 ****
  static char *
  str_numth(char *dest, char *num, int type)
  {
! 	sprintf(dest, "%s%s", num, get_th(num, type));
  	return dest;
  }
  
--- 1462,1470 ----
  static char *
  str_numth(char *dest, char *num, int type)
  {
! 	if (dest != num)
! 		strcpy(dest, num);
! 	strcat(dest, get_th(num, type));
  	return dest;
  }
  
*************** static int
*** 2057,2062 ****
--- 2059,2065 ----
  dch_date(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
  {
  	char		buff[DCH_CACHE_SIZE],
+ 				workbuff[32],
  			   *p_inout;
  	int			i,
  				len;
*************** dch_date(int arg, char *inout, int suf, 
*** 2117,2123 ****
  
  	switch (arg)
  	{
- 
  		case DCH_A_D:
  		case DCH_B_C:
  			if (flag == TO_CHAR)
--- 2120,2125 ----
*************** dch_date(int arg, char *inout, int suf, 
*** 2179,2186 ****
  			}
  			break;
  		case DCH_MONTH:
! 			strcpy(inout, months_full[tm->tm_mon - 1]);
! 			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
--- 2181,2188 ----
  			}
  			break;
  		case DCH_MONTH:
! 			strcpy(workbuff, months_full[tm->tm_mon - 1]);
! 			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(workbuff));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
*************** dch_date(int arg, char *inout, int suf, 
*** 2242,2249 ****
  			}
  			break;
  		case DCH_DAY:
! 			strcpy(inout, days[tm->tm_wday]);
! 			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
--- 2244,2251 ----
  			}
  			break;
  		case DCH_DAY:
! 			strcpy(workbuff, days[tm->tm_wday]);
! 			sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(workbuff));
  			if (S_FM(suf))
  				return strlen(p_inout) - 1;
  			else
