Krolyxon
Commit c5f6b2c

Branches

Refs →

nsxivc5f6b2c

Sort directory entries when using -r

Author
Bert
Date
2011-02-26 16:57 +0100
Parent
5a35484
Commit
c5f6b2c0d5099b5ae94ff4412f5b181532e2d6a8

+14 −1

1 file changed

  1. M main.c +14 −1
M main.c View
@@ -199,10 +199,15 @@ int check_append(const char *filename) {
199199 }
200200 }
201201
202+int fncmp(const void *a, const void *b) {
203+ return strcoll(*((char* const*) a), *((char* const*) b));
204+}
205+
202206 void read_dir_rec(const char *dirname) {
203207 char *filename;
204208 const char **dirnames;
205209 int dircnt, diridx;
210+ int fcnt, fstart;
206211 unsigned char first;
207212 size_t len;
208213 DIR *dir;
@@ -217,6 +222,9 @@ void read_dir_rec(const char *dirname) {
217222 dirnames = (const char**) s_malloc(dircnt * sizeof(const char*));
218223 dirnames[0] = dirname;
219224
225+ fcnt = 0;
226+ fstart = fileidx;
227+
220228 while (diridx > 0) {
221229 dirname = dirnames[--diridx];
222230 if (!(dir = opendir(dirname))) {
@@ -238,7 +246,9 @@ void read_dir_rec(const char *dirname) {
238246 }
239247 dirnames[diridx++] = filename;
240248 } else {
241− if (!check_append(filename))
249+ if (check_append(filename))
250+ ++fcnt;
251+ else
242252 free(filename);
243253 }
244254 }
@@ -251,6 +261,9 @@ void read_dir_rec(const char *dirname) {
251261 first = 0;
252262 }
253263
264+ if (fcnt > 1)
265+ qsort(filenames + fstart, fcnt, sizeof(char*), fncmp);
266+
254267 free(dirnames);
255268 }
256269