1
0
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:
nova
2026-02-04 21:55:03 +01:00
parent 84b1c17dd8
commit 1d3b71b00f

32
dir.c
View File

@@ -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';
}