On Nov 15 17:58:38, [email protected] wrote:
> Hi Marc,
> 
> Marc Espie wrote on Mon, Nov 15, 2021 at 05:06:23PM +0100:
> > On Mon, Nov 15, 2021 at 03:43:47PM +0100, Jan Stary wrote:
> >> On Nov 10 18:46:08, [email protected] wrote:
> >>> On Nov 10 18:15:44, [email protected] wrote:
> 
> >>>> expr(1) says
> >>>> 
> >>>> expr1 {=, >, >=, <, <=, !=} expr2
> >>>> 
> >>>>         Returns the results of integer comparison if both arguments
> >>>>         are decimal integers; otherwise, returns the results of
> >>>>         string comparison using the locale-specific collation
> 
> Yikes.  Yes, that is true in general.  Then again, the OpenBSD
> C library intentionally supports only one single collation sequence:
> POSIX.
> 
> >>>>         sequence.  The result of each comparison is 1 if the specified
> >>>>         relation is true, or 0 if the relation is false.
> >>>> 
> >>>> Looking at expr.c, it boils down to strcoll(), which ignores the locale.
> >>>> So the statement is technically true, but there isn't really any
> >>>> "locale-specific collation sequence".
> >>>> 
> >>>> Would it be simpler to leave the mention of locale completely out?
> 
> Yes, probably, and then add a CAVEATS section warning that on other
> operating systems, the collation order may vary depending on the
> LC_COLLATE environment variable.

I left that out on purpose and linked to strcoll(3) instead, because
(a) that's what the code actually does and
(b) strcoll(3) mentions the LC_COLLATE thing.

> >>>> Or state something similar to what sort(1) or strcoll(3) and other
> >>>> string-comparing routines say?
> 
> >>> For example,
> >>> 
> >>>    $ expr č '<' d      
> >>>    0
> >>> 
> >>> Which locale-specific collation sequence determined that?
> >>> Byte by byte, it's
> >>> 
> >>>    c48d      U+00010d  č   LATIN SMALL LETTER C HACEK
> >>>    64        U+000064  d   LATIN SMALL LETTER D
> >>> 
> >>> and I don't think there is anything more to it.
> 
> Yes.
> 
> >>> (Although in the Czech alphabet, č comes just before d.)
> 
> Fair enough, but adding knowledge about that to the C library
> would be quite insane.

Cthulhu forbid; all I meant was it boils down to 0xc4 > 0x64 anyway,
so why talk about a "locale-specific collation sequence" at all.
I believe the manpage would be better off without it.

        Jan

Reply via email to