diff options
author | Bruce Momjian <bruce@momjian.us> | 2000-01-10 15:41:34 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2000-01-10 15:41:34 +0000 |
commit | 3f03f74f3651cd2ded9899f5aa2a928ca8e0d480 (patch) | |
tree | 49e381256f8a361925d75d1886cb504d48c3a407 /src/backend/utils/adt | |
parent | 752314eb261aec632185e914819709f95bddf332 (diff) | |
download | postgresql-3f03f74f3651cd2ded9899f5aa2a928ca8e0d480.tar.gz postgresql-3f03f74f3651cd2ded9899f5aa2a928ca8e0d480.zip |
Update int28out and out8out and _in_ functions to handle trailing zeros
properly.
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r-- | src/backend/utils/adt/int.c | 39 | ||||
-rw-r--r-- | src/backend/utils/adt/oid.c | 32 |
2 files changed, 46 insertions, 25 deletions
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index e5cc5551638..6c3c64c993e 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.29 2000/01/10 05:23:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.30 2000/01/10 15:41:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,6 +29,7 @@ * fix me when we figure out what we want to do about ANSIfication... */ +#include <ctype.h> #include "postgres.h" #ifdef HAVE_LIMITS_H #include <limits.h> @@ -90,10 +91,15 @@ int28in(char *intString) { if (sscanf(intString, "%hd", &result[slot]) != 1) break; - do + while (*intString && isspace(*intString)) + intString++; + while (*intString && !isspace(*intString)) intString++; - while (*intString && *intString != ' ') } + while (*intString && isspace(*intString)) + intString++; + if (*intString) + elog(ERROR,"int28 value has too many values"); while (slot < INDEX_MAX_KEYS) result[slot++] = 0; @@ -104,31 +110,36 @@ int28in(char *intString) * int28out - converts internal form to "num num ..." */ char * -int28out(int16 *shs) +int28out(int16 *int2Array) { - int num; - int16 *sp; + int num, maxnum; char *rp; char *result; - if (shs == NULL) + if (int2Array == NULL) { result = (char *) palloc(2); result[0] = '-'; result[1] = '\0'; return result; } - rp = result = (char *) palloc(INDEX_MAX_KEYS * 7); - /* assumes sign, 5 digits, ' ' */ - sp = shs; - for (num = INDEX_MAX_KEYS; num != 0; num--) + + /* find last non-zero value in vector */ + for (maxnum = INDEX_MAX_KEYS-1; maxnum >= 0; maxnum--) + if (int2Array[maxnum] != 0) + break; + + /* assumes sign, 5 digits, ' ' */ + rp = result = (char *) palloc(maxnum * 7 + 1); + for (num = 0; num <= maxnum; num++) { - itoa(*sp++, rp); + if (num != 0) + *rp++ = ' '; + ltoa(int2Array[num], rp); while (*++rp != '\0') ; - *rp++ = ' '; } - *--rp = '\0'; + *rp = '\0'; return result; } diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c index 4ffd0202810..989f4a602d9 100644 --- a/src/backend/utils/adt/oid.c +++ b/src/backend/utils/adt/oid.c @@ -7,12 +7,13 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.30 2000/01/10 05:23:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.31 2000/01/10 15:41:26 momjian Exp $ * *------------------------------------------------------------------------- */ +#include <ctype.h> #include "postgres.h" #include "utils/builtins.h" @@ -41,10 +42,15 @@ oid8in(char *oidString) { if (sscanf(oidString, "%u", &result[slot]) != 1) break; - do + while (*oidString && isspace(*oidString)) + oidString++; + while (*oidString && !isspace(*oidString)) oidString++; - while (*oidString && *oidString != ' ') } + while (*oidString && isspace(*oidString)) + oidString++; + if (*oidString) + elog(ERROR,"oid8 value has too many values"); while (slot < INDEX_MAX_KEYS) result[slot++] = 0; @@ -57,8 +63,7 @@ oid8in(char *oidString) char * oid8out(Oid *oidArray) { - int num; - Oid *sp; + int num, maxnum; char *rp; char *result; @@ -70,17 +75,22 @@ oid8out(Oid *oidArray) return result; } + /* find last non-zero value in vector */ + for (maxnum = INDEX_MAX_KEYS-1; maxnum >= 0; maxnum--) + if (oidArray[maxnum] != 0) + break; + /* assumes sign, 10 digits, ' ' */ - rp = result = (char *) palloc(INDEX_MAX_KEYS * 12); - sp = oidArray; - for (num = INDEX_MAX_KEYS; num != 0; num--) + rp = result = (char *) palloc(maxnum * 12 + 1); + for (num = 0; num <= maxnum; num++) { - ltoa(*sp++, rp); + if (num != 0) + *rp++ = ' '; + ltoa(oidArray[num], rp); while (*++rp != '\0') ; - *rp++ = ' '; } - *--rp = '\0'; + *rp = '\0'; return result; } |