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:
30
dir.c
30
dir.c
@@ -240,28 +240,40 @@ void print_dir(WINDOW *win, char print_info, unsigned long *dir_file_count, file
|
|||||||
/* shortens the printed file name if it is too long
|
/* shortens the printed file name if it is too long
|
||||||
* example input: aaaaaaaa.txt
|
* example input: aaaaaaaa.txt
|
||||||
* example output: aaa~.txt
|
* example output: aaa~.txt
|
||||||
|
* example input: aaaaaaaa.longextension
|
||||||
|
* example output: ~.longe~
|
||||||
* if no extension is found, the name will truncate */
|
* if no extension is found, the name will truncate */
|
||||||
char *file_name = NULL;
|
char *file_name = NULL;
|
||||||
unsigned long printable_size = (offset_back - is_selected - offset_front);
|
unsigned long printable_size = offset_back - (is_selected + offset_front);
|
||||||
if (strlen(dir_content[i].file_name) > printable_size) {
|
if (strlen(dir_content[i].file_name) >= printable_size) {
|
||||||
char *extension = strrchr(dir_content[i].file_name, '.');
|
char *extension = strrchr(dir_content[i].file_name, '.');
|
||||||
if (extension && extension != dir_content[i].file_name) {
|
if (extension && extension != dir_content[i].file_name) {
|
||||||
file_name = malloc(printable_size);
|
file_name = malloc(printable_size+1);
|
||||||
printable_size -= strlen(extension);
|
|
||||||
|
|
||||||
memcpy(file_name, dir_content[i].file_name, printable_size);
|
/*if the extension is bigger than the filename this is false */
|
||||||
memcpy(file_name + printable_size-1, extension, strlen(extension));
|
if ((&file_name[printable_size - strlen(extension)] - 2) > file_name) {
|
||||||
file_name[printable_size + strlen(extension)-1] = '\0';
|
memcpy(file_name, dir_content[i].file_name, (printable_size - strlen(extension)));
|
||||||
file_name[printable_size - 2] = '~';
|
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 {
|
} else {
|
||||||
file_name = malloc(printable_size);
|
file_name = malloc(printable_size);
|
||||||
memcpy(file_name, dir_content[i].file_name, printable_size);
|
memcpy(file_name, dir_content[i].file_name, printable_size);
|
||||||
file_name[printable_size-2] = '~';
|
file_name[printable_size-2] = '~';
|
||||||
file_name[printable_size-1] = '\0';
|
file_name[printable_size-1] = '\0';
|
||||||
|
file_name[printable_size] = '\0';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
file_name = malloc(strlen(dir_content[i].file_name)+1);
|
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