summaryrefslogtreecommitdiffstats
path: root/txr.1
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-03-07 19:40:52 -0800
committerKaz Kylheku <kaz@kylheku.com>2020-03-07 19:40:52 -0800
commitb3cb9b6a8496ca860bb9e1703a3df3964cdc19ee (patch)
tree9318de7951aa72dfca875c4dca6f3d786b2b970a /txr.1
parentb141470c7b5e23f3d2abc01b24c24b60e9d03542 (diff)
downloadtxr-b3cb9b6a8496ca860bb9e1703a3df3964cdc19ee.tar.gz
txr-b3cb9b6a8496ca860bb9e1703a3df3964cdc19ee.tar.bz2
txr-b3cb9b6a8496ca860bb9e1703a3df3964cdc19ee.zip
strings: bugfix: broken inequality comparisons.
Inequality comparisons of strings and symbols are broken due to assuming that cmp_str returns -1 or 1. cmp_str uses the C library function wscsmp, and is exposed as the Lisp function cmp-str. That is correctly documented as returning a negative or positive value. But a few function in lib.c assume otherwise. On newer glibc's, at least on x86, it seems that wcscmp does return 1, 0 or -1 consistently; perhaps the newer optimized assembly routines are ensuring this. It shows up on older glibc installations where the C version just returns the difference between the mismatching characters. * lib.c (cmp_str): Now returns -1, 0 or 1. * txr.1: Specify the stronger requirements on the cmp-str return value, adding a note that older versions conform to a weaker requirement.
Diffstat (limited to 'txr.1')
-rw-r--r--txr.114
1 files changed, 10 insertions, 4 deletions
diff --git a/txr.1 b/txr.1
index 9875d439..fcccdf43 100644
--- a/txr.1
+++ b/txr.1
@@ -23695,12 +23695,12 @@ that length.
.desc
The
.code cmp-str
-function returns a negative integer if
+function returns -1 if
.meta left-string
is lexicographically prior to
-.metn right-string ,
-and a positive integer
-if the reverse situation is the case. Otherwise the strings are equal
+.metn right-string .
+If the reverse relationship holds, it returns 1.
+Otherwise the strings are equal
and zero is returned.
If either or both of the strings are lazy, then they are only forced to the
@@ -23712,6 +23712,12 @@ The lexicographic ordering is naive, based on the character code point
values in Unicode taken as integers, without regard for locale-specific
collation orders.
+Note: in \*(TX 232 and earlier versions,
+.code cmp-str
+conforms to a weaker requirements: any negative integer value
+may be returned rather than -1, and any positive integer value
+can be returned instead of 1.
+
.coNP Functions @, str= @, str< @, str> @ str>= and @ str<=
.synb
.mets (str= < left-string << right-string )