display fix issue and bug
This commit is contained in:
parent
7c660d5f7b
commit
a8501bd817
|
@ -47,7 +47,7 @@ void display_file(dir_t *dir, i32 max_size);
|
||||||
i32 display_files(t_list **files);
|
i32 display_files(t_list **files);
|
||||||
void display_directory(dir_t *dir);
|
void display_directory(dir_t *dir);
|
||||||
i32 display_files_stat(t_list **files);
|
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);
|
void space_between_files(t_list **files, dir_t *file);
|
||||||
|
|
||||||
// Directory
|
// Directory
|
||||||
|
|
|
@ -7,17 +7,22 @@ void space_between_files(t_list **files, dir_t *file) {
|
||||||
return;
|
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) {
|
for (t_list *cur = *files; cur != NULL; cur = cur->next) {
|
||||||
dir_t *cur_file = (dir_t*)(cur)->content;
|
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)
|
if (ft_strcmp(cur_file->name, file->name) == 0)
|
||||||
index_file = i;
|
index_file = i;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
max += 1;
|
||||||
u32 col = MAX(win.ws_col / max, 1);
|
u32 col = MAX(win.ws_col / max, 1);
|
||||||
u32 line = index_file % col;
|
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(" ");
|
ft_printf(" ");
|
||||||
else if (col >= i && index_file == i - 1)
|
else if (col >= i && index_file == i - 1)
|
||||||
ft_printf("\n");
|
ft_printf("\n");
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
static void display_type(dir_t *dir);
|
static void display_type(dir_t *dir);
|
||||||
static void display_permission(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_size(dir_t *dir, i32 max_size);
|
||||||
static void display_date(dir_t *dir);
|
static void display_date(dir_t *dir);
|
||||||
static void display_path(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_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;
|
i32 total = 0;
|
||||||
t_list *cur;
|
t_list *cur;
|
||||||
for (cur = *files; cur != NULL; cur = cur->next) {
|
for (cur = *files; cur != NULL; cur = cur->next) {
|
||||||
dir_t *dir = (dir_t*)(cur)->content;
|
dir_t *dir = (dir_t*)(cur)->content;
|
||||||
max_size = MAX(ft_get_size(dir->lstat.st_size), max_size);
|
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;
|
total += dir->lstat.st_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +31,7 @@ display_files_stat(t_list **files) {
|
||||||
i32 drawed = 0;
|
i32 drawed = 0;
|
||||||
for (cur = *files; cur != NULL; cur = cur->next) {
|
for (cur = *files; cur != NULL; cur = cur->next) {
|
||||||
dir_t *dir = (dir_t*)(cur)->content;
|
dir_t *dir = (dir_t*)(cur)->content;
|
||||||
display_single_stat(dir, max_size);
|
display_single_stat(dir, max_size, max_nlink);
|
||||||
drawed++;
|
drawed++;
|
||||||
ft_printf("\n");
|
ft_printf("\n");
|
||||||
}
|
}
|
||||||
|
@ -36,13 +39,13 @@ display_files_stat(t_list **files) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
display_single_stat(dir_t *dir, i32 max_size) {
|
display_single_stat(dir_t *dir, i32 max_size, i32 max_nlink) {
|
||||||
if (!dir)
|
if (!dir)
|
||||||
return;
|
return;
|
||||||
display_type(dir);
|
display_type(dir);
|
||||||
display_permission(dir);
|
display_permission(dir);
|
||||||
ft_printf(" ");
|
ft_printf(" ");
|
||||||
ft_printf("%d", dir->lstat.st_nlink);
|
display_nlink(dir, max_nlink);
|
||||||
ft_printf(" ");
|
ft_printf(" ");
|
||||||
if (dir->psswd)
|
if (dir->psswd)
|
||||||
ft_printf("%s", dir->psswd->pw_name);
|
ft_printf("%s", dir->psswd->pw_name);
|
||||||
|
@ -65,7 +68,7 @@ display_type(dir_t *dir) {
|
||||||
return;
|
return;
|
||||||
if (S_ISLNK(dir->lstat.st_mode))
|
if (S_ISLNK(dir->lstat.st_mode))
|
||||||
ft_printf("l");
|
ft_printf("l");
|
||||||
else if (!dir->is_file)
|
else if (S_ISDIR(dir->lstat.st_mode))
|
||||||
ft_printf("d");
|
ft_printf("d");
|
||||||
else if (S_ISSOCK(dir->lstat.st_mode))
|
else if (S_ISSOCK(dir->lstat.st_mode))
|
||||||
ft_printf("s");
|
ft_printf("s");
|
||||||
|
@ -88,6 +91,17 @@ display_permission(dir_t *dir) {
|
||||||
ft_printf("%s", buf);
|
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
|
static void
|
||||||
display_size(dir_t *dir, i32 max_size) {
|
display_size(dir_t *dir, i32 max_size) {
|
||||||
if (!dir)
|
if (!dir)
|
||||||
|
|
|
@ -84,8 +84,11 @@ get_directory_files(char *path) {
|
||||||
|
|
||||||
dir->dir = opendir(path);
|
dir->dir = opendir(path);
|
||||||
if (dir->dir == NULL) {
|
if (dir->dir == NULL) {
|
||||||
if (errno == EACCES)
|
if (errno == EACCES) {
|
||||||
ft_printf_fd(2, "Permission denied\n");
|
ft_printf_fd(2, "ft_ls: cannot access '%s': Permission denied\n", path);
|
||||||
|
dir->is_file = true;
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
else if (errno == ENOENT)
|
else if (errno == ENOENT)
|
||||||
ft_printf_fd(2, "ft_ls: cannot access '%s': No such file or directory\n", path);
|
ft_printf_fd(2, "ft_ls: cannot access '%s': No such file or directory\n", path);
|
||||||
else if (errno == ENOTDIR) {
|
else if (errno == ENOTDIR) {
|
||||||
|
|
Loading…
Reference in a new issue