*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.13 1997/04/09 08:29:35 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.14 1997/04/21 04:31:53 vadim Exp $
*
*-------------------------------------------------------------------------
*/
/* text_lt()
* Comparison function for text strings.
* Includes locale support, but must copy strings to temporary memory
- * to allow null-termination for inputs to strcoll().
- * XXX HACK code for textlen() indicates that there can be embedded nulls
- * but it appears that most routines (incl. this one) assume not! - tgl 97/04/07
+ * to allow null-termination for inputs to strcoll().
*/
bool
text_lt(struct varlena *arg1, struct varlena *arg2)
{
- bool result;
-
- int cval;
int len;
#ifdef UNSIGNED_CHAR_TEXT
unsigned
#endif
char *a1p, *a2p;
+#ifdef USE_LOCALE
+ int cval;
+#endif
if (arg1 == NULL || arg2 == NULL)
return((bool) FALSE);
len = (((VARSIZE(arg1) <= VARSIZE(arg2))? VARSIZE(arg1): VARSIZE(arg2))-VARHDRSZ);
#ifdef USE_LOCALE
- if (!PointerIsValid(a1p = PALLOC(len+1))
- || !PointerIsValid(a2p = PALLOC(len+1))) {
- elog(WARN,"Unable to allocate memory for text comparison",NULL);
- return(FALSE);
- };
+
+ a1p = palloc (len+1);
+ a2p = palloc (len+1);
memcpy(a1p, VARDATA(arg1), len);
*(a1p+len) = '\0';
*(a2p+len) = '\0';
cval = strcoll(a1p,a2p);
- result = ((cval < 0) || ((cval == 0) && (VARSIZE(arg1) < VARSIZE(arg2))));
+
+ pfree (a1p);
+ pfree (a2p);
- PFREE(a1p);
- PFREE(a2p);
+ return((bool) ( (cval < 0) ||
+ ( (cval == 0) && (VARSIZE(arg1) < VARSIZE(arg2)) ) ) );
- return(result);
#else
+
a1p = (unsigned char *)VARDATA(arg1);
a2p = (unsigned char *)VARDATA(arg2);
len--;
};
return((bool) (len? (*a1p < *a2p): (VARSIZE(arg1) < VARSIZE(arg2))));
+
#endif
+
} /* text_lt() */
/* text_le()
* Comparison function for text strings.
* Includes locale support, but must copy strings to temporary memory
- * to allow null-termination for inputs to strcoll().
- * XXX HACK code for textlen() indicates that there can be embedded nulls
- * but it appears that most routines (incl. this one) assume not! - tgl 97/04/07
+ * to allow null-termination for inputs to strcoll().
*/
bool
text_le(struct varlena *arg1, struct varlena *arg2)
{
- bool result;
-
- int cval;
int len;
#ifdef UNSIGNED_CHAR_TEXT
unsigned
#endif
char *a1p, *a2p;
+#ifdef USE_LOCALE
+ int cval;
+#endif
if (arg1 == NULL || arg2 == NULL)
return((bool) 0);
len = (((VARSIZE(arg1) <= VARSIZE(arg2))? VARSIZE(arg1): VARSIZE(arg2))-VARHDRSZ);
#ifdef USE_LOCALE
- if (!PointerIsValid(a1p = PALLOC(len+1))
- || !PointerIsValid(a2p = PALLOC(len+1))) {
- elog(WARN,"Unable to allocate memory for text comparison",NULL);
- return(FALSE);
- };
+
+ a1p = palloc (len+1);
+ a2p = palloc (len+1);
memcpy(a1p, VARDATA(arg1), len);
*(a1p+len) = '\0';
*(a2p+len) = '\0';
cval = strcoll(a1p,a2p);
- result = ((cval < 0) || ((cval == 0) && (VARSIZE(arg1) <= VARSIZE(arg2))));
+
+ pfree (a1p);
+ pfree (a2p);
- PFREE(a1p);
- PFREE(a2p);
+ return ((bool) ( (cval < 0) ||
+ ( (cval == 0) && (VARSIZE(arg1) <= VARSIZE(arg2)) ) ) );
- return(result);
#else
+
a1p = (unsigned char *)VARDATA(arg1);
a2p = (unsigned char *)VARDATA(arg2);
};
return((bool) (len? (*a1p <= *a2p): (VARSIZE(arg1) <= VARSIZE(arg2))));
+
#endif
+
} /* text_le() */
bool