[PATCH 7/8] a) Use strcoll() in opendir() and alphasort()
Sebastian Huber
sebastian.huber@embedded-brains.de
Fri Feb 1 09:40:00 GMT 2019
On 01/02/2019 10:16, Corinna Vinschen wrote:
> On Feb 1 07:55, Sebastian Huber wrote:
>> On 31/01/2019 14:05, Sebastian Huber wrote:
>>> From: ache <ache@FreeBSD.org>
>>>
>>> as POSIX 2008 requires. It also matches now how our 'ls' works for years.
>>>
>>> b) Remove comment expressed 2 fears:
>>> 1) One just simple describe how strcoll() works in _any_ context,
>>> not for directories only. Are we plan to remove strcoll() from everything
>>> just because it is little more complex than strcmp()? I doubt, and
>>> directories give nothing different here. Moreover, strcoll() used
>>> in 'ls' for years and nobody complaints yet.
>>>
>>> 2) Plain wrong statement about undefined strcoll() behaviour. strcoll()
>>> always gives predictable results, falling back to strcmp() on any
>>> trouble, see strcoll(3).
>>>
>>> No objections from -current list discussion.
>>> ---
>>> newlib/libc/posix/scandir.c | 7 ++++---
>>> 1 file changed, 4 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/newlib/libc/posix/scandir.c b/newlib/libc/posix/scandir.c
>>> index 94c583761..13354c05e 100644
>>> --- a/newlib/libc/posix/scandir.c
>>> +++ b/newlib/libc/posix/scandir.c
>>> @@ -142,12 +142,13 @@ fail:
>>> /*
>>> * Alphabetic order comparison routine for those who want it.
>>> + * POSIX 2008 requires that alphasort() uses strcoll().
>>> */
>>> int
>>> -alphasort (const struct dirent **d1,
>>> - const struct dirent **d2)
>>> +alphasort(const struct dirent **d1, const struct dirent **d2)
>>> {
>>> - return(strcmp((*d1)->d_name, (*d2)->d_name));
>>> +
>>> + return (strcoll((*d1)->d_name, (*d2)->d_name));
>>> }
>>> #endif /* ! HAVE_OPENDIR */
>> After looking into newlib/libc/string/strcoll.c, this patch makes no sense.
>> I will not apply it.
> I disagree. POSIX requires alpphasort to call strcoll, so this is
> clearly a bug in newlib's implementation. Also, what if, at one point,
> somebody improves newlib's strcoll?
>
> Cygwin's alphasort uses strcoll as well. I'm just not quite sure
> why Cygwin still has its own implementation. There's nothing
> Cygwin-specific in there, except for the strcmp/strcoll difference.
> I guess I'll remove it after the Cygwin 3.0 release.
Ok, I checked everything in modulo the register removal part.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber@embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the Newlib
mailing list