static inline int key_collate (const char *t1, const char *t2) { int dotdot = 0; int ret; dotdot = (t1[0] == '.' ? 1 : 0) | ((t2[0] == '.' ? 1 : 0) << 1); switch (dotdot) { case 0: case 3: ret = str_key_collate (t1, t2, case_sensitive) * reverse; break; case 1: ret = -1; /* t1 < t2 */ break; case 2: ret = 1; /* t1 > t2 */ break; default: ret = 0; /* it must not happen */ } return ret; }
int sort_ext (file_entry * a, file_entry * b) { int r; int ad = MY_ISDIR (a); int bd = MY_ISDIR (b); if (ad == bd || panels_options.mix_all_files) { if (a->second_sort_key == NULL) a->second_sort_key = str_create_key (extension (a->fname), case_sensitive); if (b->second_sort_key == NULL) b->second_sort_key = str_create_key (extension (b->fname), case_sensitive); r = str_key_collate (a->second_sort_key, b->second_sort_key, case_sensitive); if (r) return r * reverse; else return sort_name (a, b); } else return bd - ad; }