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.zip rockbox-d13f1a485f0e35a6fbbd0a664f14acc3798d52a0.tar.gz rockbox-d13f1a485f0e35a6fbbd0a664f14acc3798d52a0.tar.bz2 rockbox-d13f1a485f0e35a6fbbd0a664f14acc3798d52a0.tar.xz | |
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 fc5e4d3..0ceb5c0 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -45,6 +45,7 @@ #include "cuesheet.h" #include "filetree.h" #include "misc.h" +#include "strnatcmp.h" #ifdef HAVE_LCD_BITMAP #include "keyboard.h" #endif @@ -242,12 +243,26 @@ static int compare(const void* p1, const void* p2) case SORT_ALPHA: case SORT_ALPHA_REVERSED: + { if (global_settings.sort_case) - return strncmp(e1->name, e2->name, MAX_PATH) - * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + { + if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) + return strnatcmp(e1->name, e2->name) + * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + else + return strncmp(e1->name, e2->name, MAX_PATH) + * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + } else - return strncasecmp(e1->name, e2->name, MAX_PATH) - * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + { + if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) + return strnatcasecmp(e1->name, e2->name) + * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + else + return strncasecmp(e1->name, e2->name, MAX_PATH) + * (criteria == SORT_ALPHA_REVERSED ? -1 : 1); + } + } } return 0; /* never reached */ |