Index: src/bin/psql/print.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/print.c,v
retrieving revision 1.75
diff -c -c -r1.75 print.c
*** src/bin/psql/print.c	26 Sep 2005 18:09:57 -0000	1.75
--- src/bin/psql/print.c	27 Sep 2005 16:25:54 -0000
***************
*** 86,107 ****
  	return strlen(my_str) + additional_numeric_locale_len(my_str);
  }
  
! static void 
! format_numeric_locale(char *my_str)
  {
  	int i, j, int_len = integer_digits(my_str), leading_digits;
  	int	groupdigits = atoi(grouping);
! 	char *new_str;
!     
! 	if (my_str[0] == '-')
! 		my_str++;
! 	
! 	new_str = pg_local_malloc(strlen_with_numeric_locale(my_str) + 1);
  
  	leading_digits = (int_len % groupdigits != 0) ?
  					 int_len % groupdigits : groupdigits;
  
! 	for (i=0, j=0; ; i++, j++)
  	{
  		/* Hit decimal point? */
  		if (my_str[i] == '.')
--- 86,111 ----
  	return strlen(my_str) + additional_numeric_locale_len(my_str);
  }
  
! static char *
! format_numeric_locale(const char *my_str)
  {
  	int i, j, int_len = integer_digits(my_str), leading_digits;
  	int	groupdigits = atoi(grouping);
! 	int	new_str_start = 0;
! 	char *new_str = new_str = pg_local_malloc(
! 							  strlen_with_numeric_locale(my_str) + 1);
  
  	leading_digits = (int_len % groupdigits != 0) ?
  					 int_len % groupdigits : groupdigits;
  
! 	if (my_str[0] == '-')	/* skip over sign, affects grouping calculations */
! 	{
! 		new_str[0] = my_str[0];
! 		my_str++;
! 		new_str_start = 1;
! 	}
! 
! 	for (i=0, j=new_str_start; ; i++, j++)
  	{
  		/* Hit decimal point? */
  		if (my_str[i] == '.')
***************
*** 130,137 ****
  		new_str[j] = my_str[i];
  	}
  	    
! 	strcpy(my_str, new_str);
! 	free(new_str);
  }
  
  /*************************/
--- 134,140 ----
  		new_str[j] = my_str[i];
  	}
  	    
! 	return new_str;
  }
  
  /*************************/
***************
*** 185,194 ****
  		}
  		if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		
! 			strcpy(my_cell, *ptr);
! 			format_numeric_locale(my_cell);
  			fputs(my_cell, fout);
  			free(my_cell);
  		}
--- 188,195 ----
  		}
  		if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  			fputs(my_cell, fout);
  			free(my_cell);
  		}
***************
*** 261,270 ****
  		fputs(opt_fieldsep, fout);
  		if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		
! 			strcpy(my_cell, *ptr);
! 			format_numeric_locale(my_cell);
  			fputs(my_cell, fout);
  			free(my_cell);
  		}
--- 262,269 ----
  		fputs(opt_fieldsep, fout);
  		if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  			fputs(my_cell, fout);
  			free(my_cell);
  		}
***************
*** 488,500 ****
  		{
  		    if (opt_numeric_locale)
  		    {
! 				char *my_cell = pg_local_malloc(cell_w[i] + 1);
  
- 				strcpy(my_cell, *ptr);
- 				format_numeric_locale(my_cell);
  				fprintf(fout, "%*s%s", widths[i % col_count] - cell_w[i], "", my_cell);
  				free(my_cell);
! 		    }
  			else
  				fprintf(fout, "%*s%s", widths[i % col_count] - cell_w[i], "", *ptr);
  		}
--- 487,497 ----
  		{
  		    if (opt_numeric_locale)
  		    {
! 				char *my_cell = format_numeric_locale(*ptr);
  
  				fprintf(fout, "%*s%s", widths[i % col_count] - cell_w[i], "", my_cell);
  				free(my_cell);
! 			}
  			else
  				fprintf(fout, "%*s%s", widths[i % col_count] - cell_w[i], "", *ptr);
  		}
***************
*** 697,714 ****
  		else
  			fputs(" ", fout);
  
  		{
! 			char *my_cell = pg_local_malloc(cell_w[i] + 1);
! 
! 			strcpy(my_cell, *ptr);
! 			if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
! 			    format_numeric_locale(my_cell);
  			if (opt_border < 2)
  				fprintf(fout, "%s\n", my_cell);
  			else
  				fprintf(fout, "%-s%*s |\n", my_cell, dwidth - cell_w[i], "");
  			free(my_cell);
  		}
  	}
  
  	if (opt_border == 2)
--- 694,716 ----
  		else
  			fputs(" ", fout);
  
+ 		if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 				
  			if (opt_border < 2)
  				fprintf(fout, "%s\n", my_cell);
  			else
  				fprintf(fout, "%-s%*s |\n", my_cell, dwidth - cell_w[i], "");
  			free(my_cell);
  		}
+ 		else
+ 		{
+ 			if (opt_border < 2)
+ 				fprintf(fout, "%s\n", *ptr);
+ 			else
+ 				fprintf(fout, "%-s%*s |\n", *ptr, dwidth - cell_w[i], "");
+ 		}
  	}
  
  	if (opt_border == 2)
***************
*** 837,846 ****
  			fputs("&nbsp; ", fout);
  		else if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
  
- 		    strcpy(my_cell, *ptr);
- 		    format_numeric_locale(my_cell);
  		    html_escaped_print(my_cell, fout);
  		    free(my_cell);
  		}
--- 839,846 ----
  			fputs("&nbsp; ", fout);
  		else if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
  
  		    html_escaped_print(my_cell, fout);
  		    free(my_cell);
  		}
***************
*** 922,931 ****
  			fputs("&nbsp; ", fout);
  		else if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		    
! 		    strcpy(my_cell, *ptr);
! 		    format_numeric_locale(my_cell);
  		    html_escaped_print(my_cell, fout);
  		    free(my_cell);
  		}
--- 922,929 ----
  			fputs("&nbsp; ", fout);
  		else if (opt_align[i % col_count] == 'r' && opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  		    html_escaped_print(my_cell, fout);
  		    free(my_cell);
  		}
***************
*** 1064,1073 ****
  	{
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		    
! 			strcpy(my_cell, *ptr);
! 			format_numeric_locale(my_cell);
  			latex_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
--- 1062,1069 ----
  	{
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  			latex_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
***************
*** 1177,1186 ****
  		{
  			if (opt_numeric_locale)
  			{
! 				char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
  
- 				strcpy(my_cell, *ptr);
- 				format_numeric_locale(my_cell);
  				latex_escaped_print(my_cell, fout);
  				free(my_cell);
  			}
--- 1173,1180 ----
  		{
  			if (opt_numeric_locale)
  			{
! 				char *my_cell = format_numeric_locale(*ptr);
  
  				latex_escaped_print(my_cell, fout);
  				free(my_cell);
  			}
***************
*** 1277,1286 ****
  	{
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		    
! 			strcpy(my_cell, *ptr);
! 			format_numeric_locale(my_cell);
  			troff_ms_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
--- 1271,1278 ----
  	{
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  			troff_ms_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
***************
*** 1389,1398 ****
  		fputc('\t', fout);
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = pg_local_malloc(strlen_with_numeric_locale(*ptr) + 1);
! 		    
! 			strcpy(my_cell, *ptr);
! 			format_numeric_locale(my_cell);
  			troff_ms_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
--- 1381,1388 ----
  		fputc('\t', fout);
  		if (opt_numeric_locale)
  		{
! 			char *my_cell = format_numeric_locale(*ptr);
! 
  			troff_ms_escaped_print(my_cell, fout);
  			free(my_cell);
  		}
