diff options
author | Thomas Martitz <kugel@rockbox.org> | 2009-03-01 17:55:59 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2009-03-01 17:55:59 +0000 |
commit | d13f1a485f0e35a6fbbd0a664f14acc3798d52a0 (patch) | |
tree | 22cacb27b6ab481c0bfc250120dde404320811f2 /apps/filetree.c | |
parent | e6c023cb64dea599bb711b2b4ddb197efdb1d187 (diff) | |
download | rockbox-d13f1a485f0e35a6fbbd0a664f14acc3798d52a0.tar.gz rockbox-d13f1a485f0e35a6fbbd0a664f14acc3798d52a0.zip |
Commit FS#8314. This adds strnat[case]cmp written by Martin Pool, which respects numbers within strings, and gives a more intuitive
sorting. This also adds a setting, so that the sorting can be used in the file browser. The implementation is very generic, and can possibly
be used in other places.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20155 a1c6a512-1295-4272-9138-f99709370657
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 */ |