changes to natural sort
This commit is contained in:
25
sorting.c
25
sorting.c
@ -16,14 +16,27 @@ int skip_hidden_files(const struct dirent *entry){
|
||||
int sort_natural(const void *file0, const void *file1){
|
||||
unsigned char file_type0 = ((file*)file0)->file_type;
|
||||
unsigned char file_type1 = ((file*)file1)->file_type;
|
||||
if (file_type0 > file_type1) {
|
||||
return 1;
|
||||
} else if (file_type0 < file_type1) {
|
||||
return -1;
|
||||
} else {
|
||||
|
||||
char weight = 0;
|
||||
if (file_type0 == FILE_TYPE_DIR || file_type0 == FILE_TYPE_SYMLINK) {
|
||||
weight |= 1;
|
||||
}
|
||||
if (file_type1 == FILE_TYPE_DIR || file_type1 == FILE_TYPE_SYMLINK) {
|
||||
weight |= 2;
|
||||
}
|
||||
if (weight == 0 || weight == 3) {
|
||||
char *file_name0 = ((file*)file0)->file_name;
|
||||
char *file_name1 = ((file*)file1)->file_name;
|
||||
return strcasecmp(file_name0, file_name1);
|
||||
} else {
|
||||
if (file_type0 > file_type1) {
|
||||
return 1;
|
||||
} else if (file_type0 < file_type1) {
|
||||
return -1;
|
||||
} else {
|
||||
char *file_name0 = ((file*)file0)->file_name;
|
||||
char *file_name1 = ((file*)file1)->file_name;
|
||||
return strcasecmp(file_name0, file_name1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user