Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

filetree.c move sort functions out of cmp function for SORT_ALPHA

move sort function decision out of the compare function

Change-Id: Ibc26ebeaf409048efa92cb611edc223ed73c9e39

+43 -31
+43 -31
apps/filetree.c
··· 51 51 #endif 52 52 #include "wps.h" 53 53 54 - static int compare_sort_dir; /* qsort key for sorting directories */ 54 + static struct compare_data 55 + { 56 + int sort_dir; /* qsort key for sorting directories */ 57 + int(*_compar)(const char*, const char*, size_t); 58 + } cmp_data; 59 + 60 + /* dummmy functions to allow compatibility with strncmp & strncasecmp */ 61 + static int strnatcmp_n(const char *a, const char *b, size_t n) 62 + { 63 + (void)n; 64 + return strnatcmp(a, b); 65 + } 66 + static int strnatcasecmp_n(const char *a, const char *b, size_t n) 67 + { 68 + (void)n; 69 + return strnatcasecmp(a, b); 70 + } 55 71 56 72 int ft_build_playlist(struct tree_context* c, int start_index) 57 73 { ··· 192 208 193 209 if (e1->attr & ATTR_DIRECTORY && e2->attr & ATTR_DIRECTORY) 194 210 { /* two directories */ 195 - criteria = compare_sort_dir; 211 + criteria = cmp_data.sort_dir; 196 212 197 213 #ifdef HAVE_MULTIVOLUME 198 214 if (e1->attr & ATTR_VOLUME || e2->attr & ATTR_VOLUME) ··· 227 243 228 244 if (t1 != t2) /* if different */ 229 245 return (t1 - t2) * (criteria == SORT_TYPE_REVERSED ? -1 : 1); 230 - /* else fall through to alphabetical sorting */ 246 + /* else alphabetical sorting */ 247 + return cmp_data._compar(e1->name, e2->name, MAX_PATH); 231 248 } 232 249 233 250 case SORT_DATE: 234 251 case SORT_DATE_REVERSED: 235 - /* Ignore SORT_TYPE */ 236 - if (criteria == SORT_DATE || criteria == SORT_DATE_REVERSED) 237 - { 238 - if (e1->time_write != e2->time_write) 239 - return (e1->time_write - e2->time_write) 240 - * (criteria == SORT_DATE_REVERSED ? -1 : 1); 241 - /* else fall through to alphabetical sorting */ 242 - } 243 - 252 + { 253 + if (e1->time_write != e2->time_write) 254 + return (e1->time_write - e2->time_write) 255 + * (criteria == SORT_DATE_REVERSED ? -1 : 1); 256 + /* else fall through to alphabetical sorting */ 257 + } 244 258 case SORT_ALPHA: 245 259 case SORT_ALPHA_REVERSED: 246 260 { 247 - if (global_settings.sort_case) 248 - { 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 - } 256 - else 257 - { 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 - } 261 + return cmp_data._compar(e1->name, e2->name, MAX_PATH); 265 262 } 266 263 267 264 } ··· 386 383 c->dirlength = files_in_dir; 387 384 closedir(dir); 388 385 389 - compare_sort_dir = c->sort_dir; 386 + cmp_data.sort_dir = c->sort_dir; 387 + if (global_settings.sort_case) 388 + { 389 + if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) 390 + cmp_data._compar = strnatcmp_n; 391 + else 392 + cmp_data._compar = strncmp; 393 + } 394 + else 395 + { 396 + if (global_settings.interpret_numbers == SORT_INTERPRET_AS_NUMBER) 397 + cmp_data._compar = strnatcasecmp_n; 398 + else 399 + cmp_data._compar = strncasecmp; 400 + } 401 + 390 402 qsort(tree_get_entries(c), files_in_dir, sizeof(struct entry), compare); 391 403 392 404 /* If thumbnail talking is enabled, make an extra run to mark files with