display fix issue and bug

This commit is contained in:
Xamora 2025-01-10 17:07:14 +01:00
parent 7c660d5f7b
commit a8501bd817
4 changed files with 32 additions and 10 deletions

View file

@ -47,7 +47,7 @@ void display_file(dir_t *dir, i32 max_size);
i32 display_files(t_list **files);
void display_directory(dir_t *dir);
i32 display_files_stat(t_list **files);
void display_single_stat(dir_t *dir, i32 max_size);
void display_single_stat(dir_t *dir, i32 max_size, i32 max_nlink);
void space_between_files(t_list **files, dir_t *file);
// Directory

View file

@ -7,17 +7,22 @@ void space_between_files(t_list **files, dir_t *file) {
return;
}
u32 max = 0, i = 0, index_file = 0;
u32 max = 0, i = 0, index_file = 0, count = 0;
for (t_list *cur = *files; cur != NULL; cur = cur->next) {
dir_t *cur_file = (dir_t*)(cur)->content;
max = MAX(ft_strlen(cur_file->name), max);
u32 len = ft_strlen(cur_file->name);
count += len;
max = MAX(len, max);
if (ft_strcmp(cur_file->name, file->name) == 0)
index_file = i;
i++;
}
max += 1;
u32 col = MAX(win.ws_col / max, 1);
u32 line = index_file % col;
if (col >= i && index_file != i - 1)
if (count <= win.ws_col)
ft_printf(" ");
else if (col >= i && index_file != i - 1)
ft_printf(" ");
else if (col >= i && index_file == i - 1)
ft_printf("\n");

View file

@ -1,5 +1,6 @@
static void display_type(dir_t *dir);
static void display_permission(dir_t *dir);
static void display_nlink(dir_t *dir, i32 max_nlink);
static void display_size(dir_t *dir, i32 max_size);
static void display_date(dir_t *dir);
static void display_path(dir_t *dir);
@ -15,11 +16,13 @@ display_files_stat(t_list **files) {
i32 max_size = ft_get_size(((dir_t*)(*files)->content)->lstat.st_size);
i32 max_nlink = ft_get_size(((dir_t*)(*files)->content)->lstat.st_nlink);
i32 total = 0;
t_list *cur;
for (cur = *files; cur != NULL; cur = cur->next) {
dir_t *dir = (dir_t*)(cur)->content;
max_size = MAX(ft_get_size(dir->lstat.st_size), max_size);
max_nlink = MAX(ft_get_size(dir->lstat.st_nlink), max_nlink);
total += dir->lstat.st_blocks;
}
@ -28,7 +31,7 @@ display_files_stat(t_list **files) {
i32 drawed = 0;
for (cur = *files; cur != NULL; cur = cur->next) {
dir_t *dir = (dir_t*)(cur)->content;
display_single_stat(dir, max_size);
display_single_stat(dir, max_size, max_nlink);
drawed++;
ft_printf("\n");
}
@ -36,13 +39,13 @@ display_files_stat(t_list **files) {
}
void
display_single_stat(dir_t *dir, i32 max_size) {
display_single_stat(dir_t *dir, i32 max_size, i32 max_nlink) {
if (!dir)
return;
display_type(dir);
display_permission(dir);
ft_printf(" ");
ft_printf("%d", dir->lstat.st_nlink);
display_nlink(dir, max_nlink);
ft_printf(" ");
if (dir->psswd)
ft_printf("%s", dir->psswd->pw_name);
@ -65,7 +68,7 @@ display_type(dir_t *dir) {
return;
if (S_ISLNK(dir->lstat.st_mode))
ft_printf("l");
else if (!dir->is_file)
else if (S_ISDIR(dir->lstat.st_mode))
ft_printf("d");
else if (S_ISSOCK(dir->lstat.st_mode))
ft_printf("s");
@ -88,6 +91,17 @@ display_permission(dir_t *dir) {
ft_printf("%s", buf);
}
static void
display_nlink(dir_t *dir, i32 max_nlink) {
if (!dir)
return;
i32 len = ft_get_size(dir->lstat.st_nlink);
for (int i = max_nlink - len; i > 0; i--)
ft_printf(" ");
ft_printf("%d", dir->lstat.st_nlink);
}
static void
display_size(dir_t *dir, i32 max_size) {
if (!dir)

View file

@ -84,8 +84,11 @@ get_directory_files(char *path) {
dir->dir = opendir(path);
if (dir->dir == NULL) {
if (errno == EACCES)
ft_printf_fd(2, "Permission denied\n");
if (errno == EACCES) {
ft_printf_fd(2, "ft_ls: cannot access '%s': Permission denied\n", path);
dir->is_file = true;
return dir;
}
else if (errno == ENOENT)
ft_printf_fd(2, "ft_ls: cannot access '%s': No such file or directory\n", path);
else if (errno == ENOTDIR) {