mirror of
https://gittea.dev/nova/th.git
synced 2026-03-16 15:27:25 -04:00
fix incorrect offset on files with long extensions
This commit is contained in:
32
dir.c
32
dir.c
@@ -238,30 +238,42 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
||||
|
||||
|
||||
/* shortens the printed file name if it is too long
|
||||
* example input: aaaaaaaa.txt
|
||||
* example input: aaaaaaaa.txt
|
||||
* example output: aaa~.txt
|
||||
* example input: aaaaaaaa.longextension
|
||||
* example output: ~.longe~
|
||||
* if no extension is found, the name will truncate */
|
||||
char *file_name = NULL;
|
||||
unsigned long printable_size = (offset_back - is_selected - offset_front);
|
||||
if (strlen(dir_content[i].file_name) > printable_size) {
|
||||
unsigned long printable_size = offset_back - (is_selected + offset_front);
|
||||
if (strlen(dir_content[i].file_name) >= printable_size) {
|
||||
char *extension = strrchr(dir_content[i].file_name, '.');
|
||||
if (extension && extension != dir_content[i].file_name) {
|
||||
file_name = malloc(printable_size);
|
||||
printable_size -= strlen(extension);
|
||||
file_name = malloc(printable_size+1);
|
||||
|
||||
memcpy(file_name, dir_content[i].file_name, printable_size);
|
||||
memcpy(file_name + printable_size-1, extension, strlen(extension));
|
||||
file_name[printable_size + strlen(extension)-1] = '\0';
|
||||
file_name[printable_size - 2] = '~';
|
||||
/*if the extension is bigger than the filename this is false */
|
||||
if ((&file_name[printable_size - strlen(extension)] - 2) > file_name) {
|
||||
memcpy(file_name, dir_content[i].file_name, (printable_size - strlen(extension)));
|
||||
memcpy(file_name + (printable_size - strlen(extension))-1, extension, strlen(extension)+1);
|
||||
file_name[printable_size - strlen(extension) - 2] = '~';
|
||||
file_name[printable_size] = '\0';
|
||||
} else {
|
||||
memcpy(file_name + 1, dir_content[i].file_name, (printable_size - strlen(extension)) -1);
|
||||
memcpy(file_name + (printable_size - strlen(extension)), extension, strlen(extension) - 2);
|
||||
file_name[0] = '~';
|
||||
file_name[printable_size-2] = '~';
|
||||
file_name[printable_size-1] = '\0';
|
||||
}
|
||||
} else {
|
||||
file_name = malloc(printable_size);
|
||||
memcpy(file_name, dir_content[i].file_name, printable_size);
|
||||
file_name[printable_size-2] = '~';
|
||||
file_name[printable_size-1] = '\0';
|
||||
file_name[printable_size] = '\0';
|
||||
}
|
||||
} else {
|
||||
file_name = malloc(strlen(dir_content[i].file_name)+1);
|
||||
memcpy(file_name, dir_content[i].file_name, strlen(dir_content[i].file_name)+1);
|
||||
memcpy(file_name, dir_content[i].file_name, strlen(dir_content[i].file_name));
|
||||
file_name[strlen(dir_content[i].file_name)] = '\0';
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user