diff --git a/backend.c b/backend.c index 1eca79f..f7b3f7b 100644 --- a/backend.c +++ b/backend.c @@ -69,13 +69,13 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1); lstat(full_path, file); - free(full_path); dir_content[i].file_size_bytes = file->st_size; if (S_ISDIR(file->st_mode)) { dir_content[i].file_type = FILE_TYPE_DIR; dir_content[i].color_pair = COLOR_DIR; + dir_content[i].file_size_bytes = get_dir_size(full_path); } else if (file->st_mode & S_IXUSR) { dir_content[i].file_type = FILE_TYPE_EXEC; dir_content[i].color_pair = COLOR_EXEC; @@ -87,6 +87,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten } else if (S_ISLNK(file->st_mode)) { dir_content[i].file_type = FILE_TYPE_SYMLINK; dir_content[i].color_pair = COLOR_SYMLINK; + dir_content[i].file_size_bytes = get_dir_size(full_path); } else if (S_ISFIFO(file->st_mode)) { dir_content[i].file_type = FILE_TYPE_FIFO; dir_content[i].color_pair = COLOR_FIFO; @@ -120,6 +121,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten } else { } } + free(full_path); free(file); } } @@ -134,28 +136,46 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten void print_dir(WINDOW *win, unsigned long *line_width, unsigned long *dir_file_count, file *dir_content){ - char *hover_bg = malloc(*line_width+1); memset(hover_bg, ' ', *line_width); hover_bg[*line_width] = '\0'; + unsigned long i = 0; + unsigned long j = 0; + unsigned long offset_front = 2; if (*dir_file_count > 9) { offset_front = (snprintf(NULL, 0, "%ld", *dir_file_count)) + 1; } for (i = 0; i < *dir_file_count; i++) { + unsigned long offset_back = *line_width - (snprintf(NULL,0,"%ld",dir_content[i].file_size_bytes) + 1); + unsigned long allowed_width = *line_width+1; wattron(win, COLOR_PAIR(dir_content[i].color_pair)); + if (dir_content[i].status & FILE_STATUS_HOVER) { wattron(win, A_REVERSE); mvwprintw(win, i, 0, "%s", hover_bg); mvwprintw(win, i, 0, "%ld", i); - mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name); + + for (j = 0; j < dir_content[i].file_name_width ;j++) { + if (j >= offset_back-1) { + mvwaddch(win, i, j, '~'); + break; + } + mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]); + } mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); wattroff(win, A_REVERSE); } else { mvwprintw(win, i, 0, "%ld", i); - mvwprintw(win, i, offset_front, "%s", dir_content[i].file_name); + for (j = 0; j < dir_content[i].file_name_width ;j++) { + if (j >= offset_back-1) { + mvwaddch(win, i, j, '~'); + break; + } + mvwaddch(win, i, offset_front+j, dir_content[i].file_name[j]); + } mvwprintw(win, i, offset_back, "%ld", dir_content[i].file_size_bytes); } wattroff(win, COLOR_PAIR(dir_content[i].color_pair));