[v3 PATCH 02/13] shell: Use strcoll instead of strcmp where applicable

Herbert Xu
2024-05-05T09:14:38Z

Use strcoll instead of strcmp so that the locale is taken into
account when sorting strings during pathname expansion, and for
the built-in test(1) string comparison operators.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
---
src/bltin/test.c | 8 ++++----
src/expand.c | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/bltin/test.c b/src/bltin/test.c
index fd8a43b..2db4d0f 100644
--- a/src/bltin/test.c
+++ b/src/bltin/test.c
@@ -353,13 +353,13 @@ binop(void)
/* NOTREACHED */
#endif
case STREQ:
- return strcmp(opnd1, opnd2) == 0;
+ return strcoll(opnd1, opnd2) == 0;
case STRNE:
- return strcmp(opnd1, opnd2) != 0;
+ return strcoll(opnd1, opnd2) != 0;
case STRLT:
- return strcmp(opnd1, opnd2) < 0;
+ return strcoll(opnd1, opnd2) < 0;
case STRGT:
- return strcmp(opnd1, opnd2) > 0;
+ return strcoll(opnd1, opnd2) > 0;
case INTEQ:
return getn(opnd1) == getn(opnd2);
case INTNE:
diff --git a/src/expand.c b/src/expand.c
index 0db2b29..9ac981e 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -1476,7 +1476,7 @@ msort(struct strlist *list, int len)
p = msort(p, len - half); /* sort second half */
lpp = &list;
for (;;) {
- if (strcmp(p->text, q->text) < 0) {
+ if (strcoll(p->text, q->text) < 0) {
*lpp = p;
lpp = &p->next;
if ((p = *lpp) == NULL) {
--
2.39.2