42-archive/ls/src/ft_ls.c
2016-11-25 18:34:58 +01:00

52 lines
1.6 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ls.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/07 14:57:21 by jhalford #+# #+# */
/* Updated: 2016/11/25 12:15:59 by jhalford ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_ls.h"
void ft_ls_dirs(t_list *dir, int opts)
{
t_list *dir_r;
t_list *ent;
t_lsdata *dirdata;
t_list *tmp;
ft_ent_sort(&dir, opts);
ent = NULL;
while (dir)
{
dirdata = dir->content;
tmp = dir;
dir = dir->next;
ft_lstdel(&ent, &ft_ent_free);
ent = ft_dir_get_ents(dirdata, &opts);
ft_ls_files(&ent, &dir, dirdata, &opts);
ft_lstdelone(&tmp, &ft_ent_free);
if (opts & OPTS_UR && !(opts & OPTS_LD))
{
dir_r = ft_ent_get_dirs(&ent);
ft_lst_merge(&dir_r, dir);
dir = dir_r;
}
}
ft_lstdel(&ent, &ft_ent_free);
}
void ft_ls_files(t_list **ent, t_list **dir, t_lsdata *topdir, int *opts)
{
if (ent)
{
if (topdir)
ft_ent_filter(ent, *opts);
ft_ent_sort(ent, *opts);
ft_ent_print(*ent, opts, topdir, *dir);
}
}