#135434 coreutils: ls: Please implement -v option that respects LC_COLLATE

Package:
coreutils
Source:
coreutils
Description:
GNU core utilities
Submitter:
Glenn Maynard
Date:
2010-05-08 06:57:12 UTC
Severity:
wishlist
#135434#5
Date:
2002-02-24 01:41:49 UTC
From:
To:
ls -v doesn't just change from strcmp to strverscmp--it changes from strcoll,
so it loses locale collation.  (I'd guess it's not multibyte-aware, either,
but I havn't checked.)

8:40pm glenn@zewt.pts/2 [~/testing] ls
a  A  b  B  c  C
8:40pm glenn@zewt.pts/2 [~/testing] ls -v
A  B  C  a  b  c

#135434#8
Date:
2005-12-16 20:08:13 UTC
From:
To:
Glenn Maynard wrote:


Is this just a consequence of the way that strverscmp is implemented?

DESCRIPTION
       Often  one  has  files  jan1,  jan2, ..., jan9, jan10, ...  and it feels wrong when ls orders them jan1,
       jan10, ..., jan2, ..., jan9.  In order to rectify this, GNU introduced the -v option to ls(1), which  is
       implemented using versionsort(3), which again uses strverscmp().

       Thus, the task of strverscmp() is to compare two strings and find the "right" order, while strcmp() only
       finds the lexicographic order. This function does not use the locale category LC_COLLATE,  so  is  meant
       mostly for situations where the strings are expected to be in ASCII.

       What this function does is the following.  If both strings are equal, return 0. Otherwise find the posi-
       tion between two bytes with the property that before it both strings are equal, while directly after  it
       there is a difference.  Find the largest consecutive digit strings containing (or starting at, or ending
       at) this position. If one or both of these is empty, then  return  what  strcmp()  would  have  returned
       (numerical  ordering  of  byte  values).  Otherwise, compare both digit strings numerically, where digit
       strings with one or more leading zeroes are interpreted as if they have a decimal  point  in  front  (so
       that  in  particular digit strings with more leading zeroes come before digit strings with fewer leading
       zeroes).  Thus, the ordering is 000, 00, 01, 010, 09, 0, 1, 9, 10.

#135434#13
Date:
2005-12-16 20:18:28 UTC
From:
To:
Yeah.  The "meant mostly for ..." bit (which I don't think was there
before) acknowledges the problem; a "strverscoll" function is probably
needed.  Just switching strcmp for strcoll in the algorithm would
probably do it (ignoring things like double-width digits).

#135434#22
Date:
2010-05-08 06:02:51 UTC
From:
To:
You filed the bug http://bugs.debian.org/135434 in Debian BTS
against the package fileutils. I'm closing it at *unstable*, but it will
remain open for older distributions.

I was unable to find a bug that explains the reason for its removal,
but it appears to have been superceded by coreutils (which is an
essential package) on Mon, 30 Sep 2002 12:24:37 -0400.
  I have decided not forward these bugs to coreutils, since a lot
could have been changed in these 8 years. If your issue is still
reproducible or still valid, do not hesitate to reopen and reassign
it or reply to this email.

Don't hesitate to reply to this mail if you have any question.

Thank you for your contribution to Debian.