From 02b96bca41bd5c95552aaf8ec8cd9dca19523e8b Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 25 Sep 2016 22:32:26 +0200 Subject: [PATCH] functions under 25 lines --- ls/.tags | 6 +++++- ls/includes/ftls.h | 8 +++++++- ls/src/ft_ls_long.c | 44 ++++++++++++++++++++++++++------------------ ls/src/lib_dirents.c | 8 -------- ls/src/lib_parse.c | 32 ++++++++++++++++++-------------- ls/src/main.c | 36 +++++------------------------------- 6 files changed, 61 insertions(+), 73 deletions(-) diff --git a/ls/.tags b/ls/.tags index 0bf30406..b8611b44 100644 --- a/ls/.tags +++ b/ls/.tags @@ -6,11 +6,14 @@ ft_ent_print src/lib_dirents.c /^void ft_ent_print(t_list *ent, char *opts, t_ls ft_ent_sort src/lib_dirents.c /^void ft_ent_sort(t_list **ent, char *opts)$/ ft_error_dir src/lib_error.c /^void ft_error_dir(char *s)$/ ft_error_option src/lib_error.c /^void ft_error_option(char c)$/ +ft_ls_dirs src/ft_ls.c /^void ft_ls_dirs(t_list *dir, char *opts)$/ +ft_ls_files src/ft_ls.c /^void ft_ls_files(t_list *ent, t_list *dir, char *o/ ft_ls_long src/ft_ls_long.c /^int ft_ls_long(t_list *ent, t_lsdata *topdir)$/ ft_ls_long_date src/lib_ls_long.c /^void ft_ls_long_date(struct stat *stat)$/ ft_ls_long_lnk src/lib_ls_long2.c /^int ft_ls_long_lnk(t_lsdata *data)$/ ft_ls_long_middle src/lib_ls_long.c /^int ft_ls_long_middle(struct stat *stat, t_pads */ ft_ls_long_pads src/lib_ls_long2.c /^int ft_ls_long_pads(t_list *ent, t_pads *pads)$/ +ft_ls_long_print src/ft_ls_long.c /^int ft_ls_long_print(t_list *ent, t_pads pads)$/ ft_ls_long_rights src/lib_ls_long2.c /^void ft_ls_long_rights(int st_mode)$/ ft_ls_long_total src/lib_ls_long2.c /^void ft_ls_long_total(t_list *ent)$/ ft_ls_long_type src/lib_ls_long.c /^void ft_ls_long_type(mode_t m)$/ @@ -20,5 +23,6 @@ ft_lsdata_cmp0 src/lib_lsdata.c /^int ft_lsdata_cmp0(t_lsdata *dat, char *datar ft_lsdata_cmp_name src/lib_lsdata.c /^int ft_lsdata_cmp_name(t_lsdata *dat1, t_lsdata */ ft_lsdata_cmp_time src/lib_lsdata.c /^int ft_lsdata_cmp_time(t_lsdata *dat1, t_lsdata */ ft_lsdata_filename src/lib_lsdata.c /^void ft_lsdata_filename(t_lsdata *data)$/ -ft_parse_ls src/lib_parse.c /^void ft_parse_ls(int ac, char **av, t_list **dir, / +ft_parse_ls src/lib_parse.c /^char *ft_parse_ls(int ac, char **av, t_list **dir,/ +ft_parse_ls_files src/lib_parse.c /^void ft_parse_ls_files(int ac, char **av, t_list */ ft_parse_ls_options src/lib_parse.c /^int ft_parse_ls_options(int ac, char **av, char */ diff --git a/ls/includes/ftls.h b/ls/includes/ftls.h index 21801fb1..5c9558fe 100644 --- a/ls/includes/ftls.h +++ b/ls/includes/ftls.h @@ -27,8 +27,12 @@ typedef struct s_pads int size; } t_pads; -void ft_parse_ls(int ac, char **av, t_list **dir, t_list **ent, char *opts); +void ft_ls_dirs(t_list *dir, char *opts); +void ft_ls_files(t_list *ent, t_list *dir, char *opts); + +char *ft_parse_ls(int ac, char **av, t_list **dir, t_list **ent); int ft_parse_ls_options(int ac, char **av, char *opts); +void ft_parse_ls_files(int ac, char **av, t_list **dir, t_list **ent); void ft_lsdata_filename(t_lsdata *data); int ft_lsdata_cmp_name(t_lsdata *dat1, t_lsdata *dat2); @@ -43,7 +47,9 @@ t_list *ft_ent_get_dirs(t_list *ent); t_list *ft_dir_get_ents(t_lsdata *dir); void ft_ls_short(t_list *ent); + int ft_ls_long(t_list *ent, t_lsdata *topdir); +int ft_ls_long_print(t_list *ent, t_pads pads); void ft_ls_long_total(t_list *ent); int ft_ls_long_pads(t_list *ent, t_pads *pads); diff --git a/ls/src/ft_ls_long.c b/ls/src/ft_ls_long.c index ec7f9cef..33b8ea7e 100644 --- a/ls/src/ft_ls_long.c +++ b/ls/src/ft_ls_long.c @@ -2,9 +2,6 @@ int ft_ls_long(t_list *ent, t_lsdata *topdir) { - t_lsdata *data; - struct stat stat; - struct dirent *dirent; t_pads pads = {0, 0, 0, 0}; if (topdir) @@ -13,22 +10,33 @@ int ft_ls_long(t_list *ent, t_lsdata *topdir) return (1); while (ent) { - data = ent->content; - stat = data->stat; - dirent = data->dirent; + if (ft_ls_long_print(ent, pads)) + return (1); ent = ent->next; - - ft_ls_long_type(stat.st_mode); - ft_ls_long_rights(stat.st_mode); - if (ft_ls_long_xattr(data->path)) - return (1); - if (ft_ls_long_middle(&stat, &pads)) - return (1); - ft_ls_long_date(&stat); - ft_printf(" "); - ft_lsdata_filename(data); - if (ft_ls_long_lnk(data)) - return (1); } return (0); } + +int ft_ls_long_print(t_list *ent, t_pads pads) +{ + t_lsdata *data; + struct stat stat; + struct dirent *dirent; + + data = ent->content; + stat = data->stat; + dirent = data->dirent; + ent = ent->next; + ft_ls_long_type(stat.st_mode); + ft_ls_long_rights(stat.st_mode); + if (ft_ls_long_xattr(data->path)) + return (1); + if (ft_ls_long_middle(&stat, &pads)) + return (1); + ft_ls_long_date(&stat); + ft_printf(" "); + ft_lsdata_filename(data); + if (ft_ls_long_lnk(data)) + return (1); + return (0); +} diff --git a/ls/src/lib_dirents.c b/ls/src/lib_dirents.c index 3b15d64d..e63e1398 100644 --- a/ls/src/lib_dirents.c +++ b/ls/src/lib_dirents.c @@ -48,7 +48,6 @@ t_list *ft_ent_get_dirs(t_list *ent) t_list *dir; t_list *tmp; - /* ft_printf("checking dir: %s\n", topdir->path); */ dir = NULL; while (ent) { @@ -56,19 +55,12 @@ t_list *ft_ent_get_dirs(t_list *ent) dirent = data->dirent; tmp = ent; ent = ent->next; - /* ft_printf("checking: %s\n", data->path); */ if (dirent->d_type == DT_DIR && ft_strcmp(dirent->d_name, ".") && ft_strcmp(dirent->d_name, "..")) { - /* data->path = ft_strjoin(topdir->path, "/"); */ - /* data->path = ft_strjoin(data->path, dirent->d_name); */ - /* stat(data->path, &data->stat); */ - /* ft_printf("found dir: %s\n", data->path); */ ft_lsteadd(&dir, tmp); } - /* else */ - /* ft_printf("%s is not a dir\n", data->path); */ } return (dir); } diff --git a/ls/src/lib_parse.c b/ls/src/lib_parse.c index 0a94ccdc..9fd8102b 100644 --- a/ls/src/lib_parse.c +++ b/ls/src/lib_parse.c @@ -1,38 +1,42 @@ #include "ftls.h" -void ft_parse_ls(int ac, char **av, t_list **dir, t_list **ent, char *opts) +char *ft_parse_ls(int ac, char **av, t_list **dir, t_list **ent) { int i; + char *opts; t_lsdata data; - DIR *stream; - ft_bzero(opts, 7); - data.dirent = NULL; + if (!(opts = (char *)ft_strnew(sizeof(char) * 7))) + return (NULL); i = ft_parse_ls_options(ac, av, opts); - /* ft_strlsort(av + i, ac - i, &ft_strcmp); */ - if (ac - i <= 1) - ft_strcat(opts, "0"); - /* ft_printf("options: %s\n", opts); */ - /* ft_printf("%i, %i\n", i, ac); */ + ft_strcat(opts, (ac - i <= 1) ? "0" : ""); if (i == ac) { data.path = ft_strdup("."); - /* ft_printf("stat ret: %i\n", stat(data.path, &data.stat)); */ + data.dirent = NULL; ft_lstadd(dir, ft_lstnew(&data, sizeof(data))); } + ft_parse_ls_files(ac - i, av + i, dir, ent); + return (opts); +} + +void ft_parse_ls_files(int ac, char **av, t_list **dir, t_list **ent) +{ + DIR *stream; + t_lsdata data; + int i; + + data.dirent = NULL; + i = 0; while (i < ac) { data.path = ft_strdup(av[i]); if (lstat(data.path, &data.stat) < 0) ft_error_dir(data.path); else if (!(stream = opendir(data.path))) - { - /* ft_printf("found file: %s\n", data.path); */ ft_lstadd(ent, ft_lstnew(&data, sizeof(data))); - } else { - /* ft_printf("found dir: %s\n", data.path); */ ft_lstadd(dir, ft_lstnew(&data, sizeof(data))); closedir(stream); } diff --git a/ls/src/main.c b/ls/src/main.c index 8cf1f4d2..b734d104 100644 --- a/ls/src/main.c +++ b/ls/src/main.c @@ -1,42 +1,16 @@ #include "ftls.h" +#include "ftls.h" int main(int ac, char **av) { t_list *dir; - t_list *dir_r; t_list *ent; - t_lsdata *dirdata; - char *opts; + dir = NULL; ent = NULL; - opts = (char *)malloc(sizeof(char) * 7); - ft_parse_ls(ac, av, &dir, &ent, opts); - if (ent) - { - ft_ent_filter(&ent, opts); - ft_ent_sort(&ent, opts); - ft_ent_print(ent, opts, NULL, dir); - } - ft_ent_sort(&dir, opts); - while (dir) - { - dirdata = dir->content; - dir = dir->next; - /* ft_lstfree(ent); */ - ent = ft_dir_get_ents(dirdata); - ft_ent_filter(&ent, opts); - ft_ent_sort(&ent, opts); - ft_ent_print(ent, opts, dirdata, dir); - if (ft_strchr(opts, 'R')) - { - dir_r = ft_ent_get_dirs(ent); - ft_lst_merge(&dir_r, dir); - dir = dir_r; - } - /* if (dir) */ - /* ft_printf("\n"); */ - /* ft_lsdata_print(dir); */ - } + opts = ft_parse_ls(ac, av, &dir, &ent); + ft_ls_files(ent, dir, opts); + ft_ls_dirs(dir, opts); return (errno); }