diff options
Diffstat (limited to 'apps/filetree.c')
-rw-r--r-- | apps/filetree.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/apps/filetree.c b/apps/filetree.c index fc5e4d3934..0ceb5c0941 100644 --- a/apps/filetree.c +++ b/apps/filetree.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include "cuesheet.h" | 45 | #include "cuesheet.h" |
46 | #include "filetree.h" | 46 | #include "filetree.h" |
47 | #include "misc.h" | 47 | #include "misc.h" |
48 | #include "strnatcmp.h" | ||
48 | #ifdef HAVE_LCD_BITMAP | 49 | #ifdef HAVE_LCD_BITMAP |
49 | #include "keyboard.h" | 50 | #include "keyboard.h" |
50 | #endif | 51 | #endif |
@@ -242,12 +243,26 @@ static int compare(const void* p1, const void* p2) | |||
242 | 243 | ||
243 | case SORT_ALPHA: | 244 | case SORT_ALPHA: |
244 | case SORT_ALPHA_REVERSED: | 245 | case SORT_ALPHA_REVERSED: |
246 | { | ||
245 | if (global_settings.sort_case) | 247 | if (global_settings.sort_case) |
246 | return strncmp(e1->name, e2->name, MAX_PATH) | 248 | { |
247 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | 249 | if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) |
250 | return strnatcmp(e1->name, e2->name) | ||
251 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | ||
252 | else | ||
253 | return strncmp(e1->name, e2->name, MAX_PATH) | ||
254 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | ||
255 | } | ||
248 | else | 256 | else |
249 | return strncasecmp(e1->name, e2->name, MAX_PATH) | 257 | { |
250 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | 258 | if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) |
259 | return strnatcasecmp(e1->name, e2->name) | ||
260 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | ||
261 | else | ||
262 | return strncasecmp(e1->name, e2->name, MAX_PATH) | ||
263 | * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); | ||
264 | } | ||
265 | } | ||
251 | 266 | ||
252 | } | 267 | } |
253 | return 0; /* never reached */ | 268 | return 0; /* never reached */ |