aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1997-04-18 02:48:05 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1997-04-18 02:48:05 +0000
commit55f5354380781cfe3626194bffbddc65ea94f201 (patch)
treead5b9320946ac7e229272eda07000356ffd78759
parentcbaa98835c5c088ab23a2096ae2d3a6e78467bda (diff)
downloadpostgresql-55f5354380781cfe3626194bffbddc65ea94f201.tar.gz
postgresql-55f5354380781cfe3626194bffbddc65ea94f201.zip
Fix bttextcmp() to use unsigned char*.
#ifdef USE_LOCALE added.
-rw-r--r--src/backend/access/nbtree/nbtcompare.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c
index f30ab258a5f..c1174f19e63 100644
--- a/src/backend/access/nbtree/nbtcompare.c
+++ b/src/backend/access/nbtree/nbtcompare.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.7 1997/04/07 06:45:41 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.8 1997/04/18 02:48:05 vadim Exp $
*
* NOTES
* These functions are stored in pg_amproc. For each operator class
@@ -134,19 +134,37 @@ btnamecmp(NameData *a, NameData *b)
int32
bttextcmp(struct varlena *a, struct varlena *b)
{
- char *ap, *bp;
- int len;
+ unsigned char *ap, *bp;
int res;
+
+#ifdef USE_LOCALE
+ int la = VARSIZE(a) - VARHDRSZ;
+ int lb = VARSIZE(b) - VARHDRSZ;
- ap = VARDATA(a);
- bp = VARDATA(b);
+ ap = (unsigned char *) palloc (la + 1);
+ bp = (unsigned char *) palloc (lb + 1);
+
+ memcpy(ap, VARDATA(a), la);
+ *(ap + la) = '\0';
+ memcpy(bp, VARDATA(b), lb);
+ *(bp + lb) = '\0';
+
+ res = strcoll (ap, bp);
+
+ pfree (ap);
+ pfree (bp);
+
+#else
+ int len = VARSIZE(a);
/* len is the length of the shorter of the two strings */
- if ((len = VARSIZE(a)) > VARSIZE(b))
+ if ( len > VARSIZE(b) )
len = VARSIZE(b);
-
- /* len includes the four bytes in which string length is stored */
- len -= sizeof(VARSIZE(a));
+
+ len -= VARHDRSZ;
+
+ ap = VARDATA(a);
+ bp = VARDATA(b);
/*
* If the two strings differ in the first len bytes, or if they're
@@ -161,6 +179,8 @@ bttextcmp(struct varlena *a, struct varlena *b)
len--;
} while (res == 0 && len != 0);
}
+
+#endif
if (res != 0 || VARSIZE(a) == VARSIZE(b))
return (res);