aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oid.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2000-01-10 15:41:34 +0000
committerBruce Momjian <bruce@momjian.us>2000-01-10 15:41:34 +0000
commit3f03f74f3651cd2ded9899f5aa2a928ca8e0d480 (patch)
tree49e381256f8a361925d75d1886cb504d48c3a407 /src/backend/utils/adt/oid.c
parent752314eb261aec632185e914819709f95bddf332 (diff)
downloadpostgresql-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/oid.c')
-rw-r--r--src/backend/utils/adt/oid.c32
1 files changed, 21 insertions, 11 deletions
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;
}