first commit

This commit is contained in:
Jack Halford 2016-09-23 02:33:00 +02:00
commit c3b3e400a5
10 changed files with 174 additions and 0 deletions

3
ls/.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "libft"]
path = libft
url = http://github.com/jzck/libft

6
ls/.tags Normal file
View file

@ -0,0 +1,6 @@
Mmain src/main.c /^int main(int ac, char **av)$/
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 src/lib_print.c /^void ft_ls(t_list **dirs_p)$/
ft_parse_ls src/lib_parse.c /^void ft_parse_ls(int ac, char **av, t_list **dirs,/
ft_parse_ls_options src/lib_parse.c /^int ft_parse_ls_options(int ac, char **av, char */

50
ls/Makefile Normal file
View file

@ -0,0 +1,50 @@
NAME = ft_ls
CC = gcc
TAGFILE = .tags
D_SRC = src
F_SRC := $(shell ls -1 $(D_SRC) | grep "\.c$$")
DF_SRC := $(addprefix $(D_SRC)/, $(F_SRC))
D_OBJ = obj
F_OBJ = $(F_SRC:.c=.o)
DF_OBJ := $(addprefix $(D_OBJ)/, $(F_OBJ))
D_INC = includes libft/includes
O_INC = $(addprefix -I, $(D_INC))
W_FLAGS = -Wall -Wextra -Werror
D_FLAGS =
MKDIR = mkdir -p
RM = /bin/rm -rf
.PHONY: all clean fclean re tags test libft
all: libft $(NAME) $(TAGFILE)
test:
gcc -Iincludes main.c libftprintf.a
$(TAGFILE): $(D_SRC)/*.c
@ctags -f $(TAGFILE) $(addprefix $(D_SRC)/, $(F_SRC))
@echo "Making tags..."
$(D_OBJ)/%.o: $(D_SRC)/%.c $(D_INC)
@$(MKDIR) $(D_OBJ)
@$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS)
@echo "Compiling "$<"..."
libft:
@$(MAKE) -C libft/ 2>/dev/null
$(NAME): $(DF_OBJ) libft/libft.a
$(CC) $(O_INC) -Llibft -lft $(W_FLAGS) $(DF_OBJ) -o $@ $(D_FLAGS)
clean:
$(RM) $(D_OBJ)
fclean: clean
$(RM) $(NAME)
re: fclean all

BIN
ls/ft_ls.fr.pdf Normal file

Binary file not shown.

15
ls/includes/ftls.h Normal file
View file

@ -0,0 +1,15 @@
#ifndef FTLS_H
# define FTLS_H
# define ALL_OPTS "lRart"
# include "libft.h"
# include <dirent.h>
int ft_parse_ls_options(int ac, char **av, char *opts);
void ft_parse_ls(int ac, char **av, t_list **dirs, char * opts);
void ft_ls(t_list **dirs);
void ft_error_option(char c);
void ft_error_dir(char *s);
#endif

1
ls/libft Submodule

@ -0,0 +1 @@
Subproject commit 55497a8a27b8f6ef48d629f0ed0e381a8130db3f

12
ls/src/lib_error.c Normal file
View file

@ -0,0 +1,12 @@
#include "ftls.h"
#include <stdio.h>
void ft_error_option(char c)
{
ft_printf("warning option '%c' is unsupported\n", c);
}
void ft_error_dir(char *s)
{
ft_printf("ls: %s: no such file or directory\n", s);
}

56
ls/src/lib_parse.c Normal file
View file

@ -0,0 +1,56 @@
#include "ftls.h"
void ft_parse_ls(int ac, char **av, t_list **dirs, char *opts)
{
int i;
DIR *dir;
(void)dirs;
i = ft_parse_ls_options(ac, av, opts);
ft_printf("options: %s\n", opts);
ft_strlsort(av + i, ac - i, &ft_strcmp);
if (i == ac)
ft_lstadd(dirs, ft_lstnew(opendir("."), sizeof(*dir)));
while (i < ac)
{
dir = opendir(av[i]);
if (dir)
{
ft_lstadd(dirs, ft_lstnew(dir, sizeof(*dir)));
/* ft_printf("found dir %s\n", av[i]); */
}
else
ft_error_dir(av[i]);
i++;
}
}
int ft_parse_ls_options(int ac, char **av, char *opts)
{
int i;
int j;
i = 1;
while (i < ac)
{
if (av[i][0] == '-' && av[i][1] != '\0')
{
j = 1;
while(av[i][j])
{
if (ft_strchr(ALL_OPTS, av[i][j]))
{
if (!ft_strchr(opts, av[i][j]))
ft_strcat(opts, av[i] + j);
}
else
ft_error_option(av[i][j]);
j++;
}
}
else
break ;
i++;
}
return (i);
}

16
ls/src/lib_print.c Normal file
View file

@ -0,0 +1,16 @@
#include "ftls.h"
void ft_ls(t_list **dirs_p)
{
t_list *ents;
struct dirent *dirent;
DIR *dir;
ents = NULL;
dir = (*dirs_p)->content;;
while ((dirent = readdir(dir)))
{
ft_lstadd(&ents, ft_lstnew(dirent, sizeof(*dirent)));
}
*dirs_p = (*dirs_p)->next;
}

15
ls/src/main.c Normal file
View file

@ -0,0 +1,15 @@
#include "ftls.h"
int main(int ac, char **av)
{
t_list *dirs;
char *opts;
dirs = NULL;
opts = (char *)malloc(sizeof(char) * 7);
ft_bzero(opts, 7);
ft_parse_ls(ac, av, &dirs, opts);
while (dirs)
ft_ls(&dirs);
return (0);
}