commit 829c1e4c88237715fcd4622bdc9bdeb160761412
Author: Simon Howard <fraggle@soulsphere.org>
AuthorDate: Mon Oct 29 20:58:04 2018 -0400
Commit: Simon Howard <fraggle@soulsphere.org>
CommitDate: Mon Oct 29 20:58:04 2018 -0400
glob: Make sorting respect GLOB_FLAG_NOCASE.
The nocase flag should apply to sort ordering as well as glob
matching.
---
src/i_glob.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/i_glob.c b/src/i_glob.c
index b29c16b2..d186c980 100644
--- a/src/i_glob.c
+++ b/src/i_glob.c
@@ -219,10 +219,10 @@ static void ReadAllFilenames(glob_t *glob)
}
}
-static void SortFilenames(char **filenames, int len)
+static void SortFilenames(char **filenames, int len, int flags)
{
char *pivot, *tmp;
- int i, left_len;
+ int i, left_len, cmp;
if (len < 2)
{
@@ -232,7 +232,16 @@ static void SortFilenames(char **filenames, int len)
left_len = 0;
for (i = 1; i < len; ++i)
{
- if (strcmp(filenames[i], pivot) < 0)
+ if ((flags & GLOB_FLAG_NOCASE) != 0)
+ {
+ cmp = strcasecmp(filenames[i], pivot);
+ }
+ else
+ {
+ cmp = strcmp(filenames[i], pivot);
+ }
+
+ if (cmp < 0)
{
tmp = filenames[i];
filenames[i] = filenames[left_len];
@@ -243,8 +252,8 @@ static void SortFilenames(char **filenames, int len)
filenames[len - 1] = filenames[left_len];
filenames[left_len] = pivot;
- SortFilenames(filenames, left_len);
- SortFilenames(&filenames[left_len + 1], len - left_len - 1);
+ SortFilenames(filenames, left_len, flags);
+ SortFilenames(&filenames[left_len + 1], len - left_len - 1, flags);
}
const char *I_NextGlob(glob_t *glob)
@@ -265,7 +274,7 @@ const char *I_NextGlob(glob_t *glob)
if (glob->next_index < 0)
{
ReadAllFilenames(glob);
- SortFilenames(glob->filenames, glob->filenames_len);
+ SortFilenames(glob->filenames, glob->filenames_len, glob->flags);
}
if (glob->next_index >= glob->filenames_len)
{