diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-03-07 19:40:52 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-03-07 19:40:52 -0800 |
commit | b3cb9b6a8496ca860bb9e1703a3df3964cdc19ee (patch) | |
tree | 9318de7951aa72dfca875c4dca6f3d786b2b970a /txr.1 | |
parent | b141470c7b5e23f3d2abc01b24c24b60e9d03542 (diff) | |
download | txr-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.1 | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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 ) |