77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.29 2000/01/1005:23:47 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.30 2000/01/1015:41:26 momjian Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
2929 * fix me when we figure out what we want to do about ANSIfication...
3030 */
3131
32+ #include <ctype.h>
3233#include "postgres.h"
3334#ifdef HAVE_LIMITS_H
3435#include <limits.h>
@@ -90,10 +91,15 @@ int28in(char *intString)
9091{
9192if (sscanf (intString ,"%hd" ,& result [slot ])!= 1 )
9293break ;
93- do
94+ while (* intString && isspace (* intString ))
95+ intString ++ ;
96+ while (* intString && !isspace (* intString ))
9497intString ++ ;
95- while (* intString && * intString != ' ' )
9698}
99+ while (* intString && isspace (* intString ))
100+ intString ++ ;
101+ if (* intString )
102+ elog (ERROR ,"int28 value has too many values" );
97103while (slot < INDEX_MAX_KEYS )
98104result [slot ++ ]= 0 ;
99105
@@ -104,31 +110,36 @@ int28in(char *intString)
104110 *int28out- converts internal form to "num num ..."
105111 */
106112char *
107- int28out (int16 * shs )
113+ int28out (int16 * int2Array )
108114{
109- int num ;
110- int16 * sp ;
115+ int num ,maxnum ;
111116char * rp ;
112117char * result ;
113118
114- if (shs == NULL )
119+ if (int2Array == NULL )
115120{
116121result = (char * )palloc (2 );
117122result [0 ]= '-' ;
118123result [1 ]= '\0' ;
119124return result ;
120125}
121- rp = result = (char * )palloc (INDEX_MAX_KEYS * 7 );
122- /* assumes sign, 5 digits, ' ' */
123- sp = shs ;
124- for (num = INDEX_MAX_KEYS ;num != 0 ;num -- )
126+
127+ /* find last non-zero value in vector */
128+ for (maxnum = INDEX_MAX_KEYS - 1 ;maxnum >=0 ;maxnum -- )
129+ if (int2Array [maxnum ]!= 0 )
130+ break ;
131+
132+ /* assumes sign, 5 digits, ' ' */
133+ rp = result = (char * )palloc (maxnum * 7 + 1 );
134+ for (num = 0 ;num <=maxnum ;num ++ )
125135{
126- itoa (* sp ++ ,rp );
136+ if (num != 0 )
137+ * rp ++ = ' ' ;
138+ ltoa (int2Array [num ],rp );
127139while (* ++ rp != '\0' )
128140;
129- * rp ++ = ' ' ;
130141}
131- * -- rp = '\0' ;
142+ * rp = '\0' ;
132143return result ;
133144}
134145