diff --git a/nmap/.gitignore b/nmap/.gitignore new file mode 100644 index 00000000..f878c240 --- /dev/null +++ b/nmap/.gitignore @@ -0,0 +1 @@ +ft_nmap diff --git a/nmap/.gitmodules b/nmap/.gitmodules new file mode 100644 index 00000000..e69de29b diff --git a/nmap/Makefile b/nmap/Makefile new file mode 100644 index 00000000..4a1392a0 --- /dev/null +++ b/nmap/Makefile @@ -0,0 +1,104 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: wescande +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2016/08/29 21:32:58 by wescande #+# #+# # +# Updated: 2017/10/24 14:33:26 by jhalford ### ########.fr # +# # +# **************************************************************************** # + +SHELL := bash + +NAME = ft_nmap + +CC = gcc +W_FLAGS = -Wall -Wextra -Werror +D_FLAGS = +FLAGS = $(W_FLAGS) $(D_FLAGS) + +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) + +LIBFT_DIR = libft/ +LIBFT_LIB = $(LIBFT_DIR)libft.a +LIBFT_INC = $(LIBFT_DIR)includes/ + +SRC_DIR = srcs/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SRC_BASE = \ +capture.c\ +format.c\ +ip.c\ +main.c\ +parser.c\ +scanners.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) +NB = $(words $(SRC_BASE)) +INDEX = 0 + +all : + @make -C $(LIBFT_DIR) + @make -j $(NAME) + +$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) $(CLIENT_OBJ) + @$(CC) $(OBJS) -o $@ \ + -I $(INC_DIR) \ + -I $(HOME)/.bin/include \ + -I $(LIBFT_INC) \ + -L $(HOME)/.bin/lib \ + $(LIBFT_LIB) $(CLIENT_OBJ) $(FLAGS) \ + -lm -lpcap -lpthread $(HOME)/.bin/lib/libmill.a + @printf "\r\033[38;5;117m✓ MAKE $@ \033[0m\033[K\n" + +$(LIBFT_LIB): + @make -C $(LIBFT_DIR) + +$(OBJ_DIR) : + @mkdir -p $(OBJ_DIR) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) + @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB) - 1)))) + @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) $(NAME) $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" + @$(CC) $(FLAGS) $(OBJ_FLAG) -MMD -c $< -o $@\ + -I $(INC_DIR) \ + -I $(HOME)/.bin/include \ + -I $(LIBFT_INC) + @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) + +clean: cleanlib + @if [ -e $(OBJ_DIR) ]; then \ + rm -rf $(OBJ_DIR); \ + printf "\r\033[38;5;202m✗ clean $(NAME) \033[0m\033[K\n"; \ + fi; + +cleanlib: + @make -C $(LIBFT_DIR) clean + +fclean: clean fcleanlib + @for file in $(NAME); do \ + if [ -e $$file ]; then \ + rm -f $$file ; \ + printf "\r\033[38;5;196m✗ fclean $$file\033[0m\033[K\n"; \ + fi; \ + done; + +fcleanlib: cleanlib + @make -C $(LIBFT_DIR) fclean + +re: fclean all + +relib: fcleanlib $(LIBFT_LIB) + +.PHONY : fclean clean re relib cleanlib fcleanlib + +-include $(OBJS:.o=.d) diff --git a/nmap/includes/nmap.h b/nmap/includes/nmap.h new file mode 100644 index 00000000..3ae2be04 --- /dev/null +++ b/nmap/includes/nmap.h @@ -0,0 +1,97 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ping.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/22 14:10:24 by jhalford #+# #+# */ +/* Updated: 2017/10/26 17:07:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PING_H +# define FT_PING_H + +# include "libft.h" +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# include "libmill.h" + +typedef struct s_data t_data; +typedef struct s_host t_host; +typedef struct s_job t_job; +typedef struct s_result t_result; +typedef enum e_port_status t_port_status; +typedef enum e_scan_type t_scan_type; + +enum e_scan_type +{ + SCAN_TCP, + SCAN_SYN, + SCAN_ACK, + SCAN_FIN, + SCAN_XMAS, + SCAN_UDP, + SCAN_MAX +}; + +enum e_port_status +{ + OPEN, + FILTERED, + CLOSED, + UNFILTERED, + OPEN_FILTERED, +}; + +struct s_data +{ + t_flag flag; + char **av_data; +}; + +struct s_job +{ + ipaddr dest; + void (*scan)(); +}; + +struct s_result +{ + ipaddr dest; + char scan[4]; + t_port_status status; +}; + +extern t_cliopts g_opts[]; +extern int g_njobs; +chan nmap_parse(int ac, char **av); +void nmap_format(chan results); + +coroutine void nmap_scan_tcp(chan results, t_job job); +pcap_t *nmap_capture(ipaddr dst, ipaddr src); + +/* +** IP helpers +*/ +uint16_t ipport(ipaddr ip); +uint16_t ipmode(ipaddr ip); +uint16_t ipfamily(ipaddr ip); +ipaddr iplocal_randport(const char *name, int mode, int sock); + +#endif diff --git a/nmap/libft/.gitignore b/nmap/libft/.gitignore new file mode 100644 index 00000000..75a55b30 --- /dev/null +++ b/nmap/libft/.gitignore @@ -0,0 +1 @@ +libft.a diff --git a/nmap/libft/Makefile b/nmap/libft/Makefile new file mode 100644 index 00000000..93486da8 --- /dev/null +++ b/nmap/libft/Makefile @@ -0,0 +1,257 @@ +#* ************************************************************************** *# +#* *# +#* ::: :::::::: *# +#* Makefile :+: :+: :+: *# +#* +:+ +:+ +:+ *# +#* By: wescande +#+ +:+ +#+ *# +#* +#+#+#+#+#+ +#+ *# +#* Created: 2016/08/29 21:32:58 by wescande #+# #+# *# +#* Updated: 2016/12/24 02:14:21 by wescande ### ########.fr *# +#* *# +#* ************************************************************************** *# + +NAME = libft.a + +CC = gcc +FLAGS = -Wall -Wextra -Werror -O3 + +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) + +SRC_DIR = srcs/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SRC_BASE = \ +btree/btree_apply_by_level.c\ +btree/btree_del.c\ +btree/btree_delone.c\ +btree/btree_search_item.c\ +btree/btree_create_node.c\ +btree/btree_apply_suffix.c\ +btree/btree_level_count.c\ +btree/btree_insert_data.c\ +btree/btree_apply_prefix.c\ +btree/btree_print.c\ +btree/btree_apply_infix.c\ +btree/btree_map.c\ +printing/ft_putchar.c\ +printing/ft_putendl.c\ +printing/hexdump.c\ +printing/ft_putnbr.c\ +printing/ft_putstr.c\ +cliopts/cliopts_getmap.c\ +cliopts/cliopts_get.c\ +error/error.c\ +error/ft_usage.c\ +get_next_line/get_next_line.c\ +path/ft_path_notdir.c\ +lst/ft_lst_at.c\ +lst/ft_lst_size.c\ +lst/ft_lst_sorted_merge.c\ +lst/ft_id.c\ +lst/ft_lstnew.c\ +lst/ft_lst_bfree.c\ +lst/push.c\ +lst/ft_lstadd.c\ +lst/ft_lstsort.c\ +lst/ft_lst_find.c\ +lst/ft_lstnew_range.c\ +lst/ft_lst_print.c\ +lst/top.c\ +lst/ft_lstnadd.c\ +lst/ft_lst_reverse.c\ +lst/ft_lst_filter.c\ +lst/ft_lst_delif.c\ +lst/ft_lstdelone.c\ +lst/ft_lst_order_delsub.c\ +lst/ft_lsteadd.c\ +lst/ft_lst_print2.c\ +lst/ft_lst_pop.c\ +lst/ft_lst_cfree.c\ +lst/ft_lst2str.c\ +lst/ft_lst_removeif.c\ +lst/ft_lstlast.c\ +lst/ft_lst_delsub.c\ +lst/ft_lst_filterout.c\ +lst/lst_insert_sort.c\ +lst/ft_lst_sorted_insert.c\ +lst/ft_lstiter.c\ +lst/pop.c\ +lst/ft_lstmap.c\ +lst/ft_lstdel.c\ +lst/ft_lst_merge.c\ +sstr/ft_sstrmerge.c\ +sstr/ft_sstrstr.c\ +sstr/ft_sstrsort.c\ +sstr/ft_sstrdel.c\ +sstr/ft_sstrdup.c\ +sstr/ft_sstradd.c\ +sstr/ft_sstrcat.c\ +sstr/ft_sstrfree.c\ +sstr/ft_sstrprint.c\ +sstr/ft_sstrprint_fd.c\ +char/ft_toupper.c\ +char/ft_isprint.c\ +char/ft_isalpha.c\ +char/ft_isascii.c\ +char/ft_tolower.c\ +char/ft_isalnum.c\ +char/ft_isdigit.c\ +color/ft_color_set.c\ +color/ft_color_reset.c\ +color/ft_color_mk.c\ +color/ft_color_mkif.c\ +net/host.c\ +net/create_client.c\ +net/net_get.c\ +net/net_send.c\ +net/reserve_port.c\ +net/tcp.c\ +net/prettypacket.c\ +net/ip.c\ +net/create_server.c\ +net/cksum.c\ +dlst/ft_dlstrtostr.c\ +dlst/ft_dlstdel.c\ +dlst/ft_dlstadd_after.c\ +dlst/ft_dlstdelone.c\ +dlst/ft_dlstsize.c\ +dlst/ft_dlstadd_before.c\ +dlst/ft_dlstnew.c\ +dlst/ft_dlstlast.c\ +rs/rs.c\ +mem/ft_memmove.c\ +mem/ft_realloc.c\ +mem/ft_memcpy.c\ +mem/ft_memchr.c\ +mem/ft_malloc.c\ +mem/ft_memalloc.c\ +mem/ft_memset.c\ +mem/ft_memdel.c\ +mem/ft_memcmp.c\ +mem/ft_bzero.c\ +mem/ft_memccpy.c\ +time/epoch.c\ +str/ft_strstr.c\ +str/ft_strlenchr.c\ +str/ft_strcpy.c\ +str/ft_str3join.c\ +str/ft_striteri.c\ +str/ft_strappend.c\ +str/ft_strclr.c\ +str/ft_strnew.c\ +str/ft_strmapi.c\ +str/ft_strcatf.c\ +str/ft_strdup.c\ +str/ft_striter.c\ +str/ft_strncmp.c\ +str/ft_strtrim.c\ +str/ft_strduptr.c\ +str/ft_split_whitespaces.c\ +str/ft_strbetween.c\ +str/ft_strdupchr.c\ +str/ft_strsub.c\ +str/ft_strsepjoin.c\ +str/ft_strlcat.c\ +str/ft_strcspn.c\ +str/ft_strchr.c\ +str/ft_strequ.c\ +str/ft_strcat.c\ +str/ft_strlen.c\ +str/ft_strsplit.c\ +str/ft_strrchr.c\ +str/ft_strjoin.c\ +str/ft_strncat.c\ +str/ft_strmap.c\ +str/ft_strcmp.c\ +str/ft_putaddr_fd.c\ +str/ft_strchrcpy.c\ +str/ft_strrev.c\ +str/ft_strinsert.c\ +str/ft_strnequ.c\ +str/hexstring.c\ +str/ft_strncpy.c\ +str/ft_strcut.c\ +str/ft_strndup.c\ +str/ft_convert_base.c\ +str/ft_strreplace.c\ +str/ft_atoi.c\ +str/ft_stris.c\ +str/ft_strdel.c\ +str/ft_strtok.c\ +str/ft_strnstr.c\ +sys/open_new.c\ +ft_printf/ft_conversion.c\ +ft_printf/lib_fmt.c\ +ft_printf/ft_printf_parse.c\ +ft_printf/ft_fmt_simplify.c\ +ft_printf/ft_vprintf.c\ +ft_printf/ft_transform.c\ +ft_printf/ft_printf_color.c\ +ft_printf/ft_printf.c\ +ft_printf/lib_pad_sharp.c\ +ft_printf/ft_fmt_validate_mod.c\ +ft_printf/lib_pad.c\ +ft_printf/lib_fmt_error.c\ +ft_printf/ft_fmt_validate_conv.c\ +ft_printf/ft_fmt_validate_flags.c\ +math/ft_uilen.c\ +math/ft_ilen_base.c\ +math/ft_ilen.c\ +math/ft_itoa_base.c\ +math/ft_lllen_base.c\ +math/ft_addrcmp.c\ +math/ft_lllen.c\ +math/ft_itoa.c\ +math/ft_lltoa_base.c\ +math/id.c\ +math/ft_ulltoa_base.c\ +math/ft_uitoa_base.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) +NB = $(words $(SRC_BASE)) +INDEX = 0 +SHELL := /bin/bash + +all : + @$(MAKE) -j $(NAME) + +$(NAME) : $(OBJ_DIR) $(OBJS) + @ar rcs $(NAME) $(OBJS) + @printf "\r\033[38;5;117m✓ MAKE $(NAME)\033[0m\033[K\n" + +$(OBJ_DIR) : + @mkdir -p $(OBJ_DIR) + @mkdir -p $(dir $(OBJS)) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) + @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB) - 1)))) + @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) $(NAME) $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" + @$(CC) $(FLAGS) -MMD -c $< -o $@\ + -I $(INC_DIR) + @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) + +clean : + @if [ -e $(OBJ_DIR) ]; \ + then \ + rm -rf $(OBJ_DIR); \ + printf "\r\033[38;5;202m✗ clean $(NAME).\033[0m\033[K\n"; \ + fi; + +fclean : clean + @if [ -e $(NAME) ]; \ + then \ + rm -rf $(NAME); \ + printf "\r\033[38;5;196m✗ fclean $(NAME).\033[0m\033[K\n"; \ + fi; + +re : fclean all + +.PHONY : fclean clean re + +-include $(OBJS:.o=.d) diff --git a/nmap/libft/README.md b/nmap/libft/README.md new file mode 100644 index 00000000..aaf37755 --- /dev/null +++ b/nmap/libft/README.md @@ -0,0 +1,22 @@ +# libft + +## libc + +malloc interface functions, string manipulation + +## data structures + +- string anipulation (`char *`) +- string array manipulation (`char **`) +- linked list (`t_list`) +- double linked list (`t_dlist`) +- binary trees (`t_btree`) +- time struct (`t_mytime`) + +## ft_printf + +printf rewrite + +## get_next_line + +read one line from a file descriptor, supports calls between multiple file descriptors. diff --git a/nmap/libft/includes/btree.h b/nmap/libft/includes/btree.h new file mode 100644 index 00000000..eede027a --- /dev/null +++ b/nmap/libft/includes/btree.h @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/16 11:13:15 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:31:13 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef BTREE_H +# define BTREE_H + +# include "libft.h" + +struct s_btree +{ + void *item; + size_t content_size; + struct s_btree *left; + struct s_btree *right; +}; + +struct s_printdata +{ + int is_left; + int offset; + int depth; + int left; + int right; +}; + +typedef struct s_btree t_btree; +typedef struct s_printdata t_printdata; + +t_btree *btree_create_node(void const *item, size_t content_size); +t_btree *btree_map(t_btree *root, void *(*f)(void *)); +void btree_insert_data( + t_btree **root, + void *item, + size_t content_size, + int (*cmpf)(void *, void *)); +void *btree_search_item(t_btree *root, + void *data_ref, int (*cmpf)(void *, void *)); +int btree_level_count(t_btree *root); +void btree_apply_prefix(t_btree *root, void (*applyf)(void *)); +void btree_apply_infix(t_btree *root, void (*applyf)(void *)); +void btree_apply_suffix(t_btree *root, void (*applyf)(void *)); +void btree_print(int fd, t_btree *tree, char *(*printer)(void *)); +void btree_del(t_btree **root, void (*del)(void *, size_t)); +void btree_delone(t_btree **root, void (*del)(void *, size_t)); + +#endif diff --git a/nmap/libft/includes/cliopts.h b/nmap/libft/includes/cliopts.h new file mode 100644 index 00000000..31eecca6 --- /dev/null +++ b/nmap/libft/includes/cliopts.h @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 20:22:56 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:04:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CLIOPTS_H +# define CLIOPTS_H + +# include "libft.h" +# include "error.h" + +typedef struct s_cliopts t_cliopts; +typedef struct s_data_template t_data_template; +typedef long long t_flag; + +struct s_cliopts +{ + char c; + char *str; + t_flag flag_on; + t_flag flag_off; + int (*get)(); + int arg_required:1; +}; + +struct s_data_template +{ + t_flag flag; + char **av_data; +}; + +int cliopts_get(char **av, t_cliopts opt_map[], void *data); +t_cliopts *cliopts_getmap_long(t_cliopts opt_map[], char *arg); +t_cliopts *cliopts_getmap_short(t_cliopts opt_map[], char arg); +int cliopts_has(char **av, char c); + +#endif diff --git a/nmap/libft/includes/color.h b/nmap/libft/includes/color.h new file mode 100644 index 00000000..698e6c51 --- /dev/null +++ b/nmap/libft/includes/color.h @@ -0,0 +1,56 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* color.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:36:48 by jhalford #+# #+# */ +/* Updated: 2017/02/18 20:01:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef COLOR_H +# define COLOR_H +# include "libft.h" + +struct s_color +{ + char fg[7]; + char bg[7]; +}; + +typedef struct s_color t_color; + +# define FG_DEFAULT "\e[0m" +# define ON_BOLD "\e[1m" + +# define ON_UNDERLINED "\e[4m" +# define ON_INVERTED "\e[7m" + +# define FG_BLACK "\e[30m" +# define FG_RED "\e[31m" +# define FG_GREEN "\e[32m" +# define FG_YELLOW "\e[33m" +# define FG_BLUE "\e[34m" +# define FG_MAGENTA "\e[35m" +# define FG_CYAN "\e[36m" + +# define BG_BLACK "\e[40m" +# define BG_RED "\e[41m" +# define BG_GREEN "\e[42m" +# define BG_YELLOW "\e[43m" +# define BG_BLUE "\e[44m" +# define BG_MAGENTA "\e[45m" +# define BG_CYAN "\e[46m" +# define BG_DEFAULT "\e[49m" + +# define FBG_DEFAULT FG_DEFAULT BG_DEFAULT + +void ft_color_reset(void); +void ft_color_set(t_color color); + +void ft_color_mk(t_color *color, char fg[7], char bg[7]); +void ft_color_mkif(t_color *color, int cond, char fg[7], char bg[7]); + +#endif diff --git a/nmap/libft/includes/dlst.h b/nmap/libft/includes/dlst.h new file mode 100644 index 00000000..79470a87 --- /dev/null +++ b/nmap/libft/includes/dlst.h @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dlst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:21:04 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:30:42 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef DLST_H +# define DLST_H + +struct s_dlist +{ + void *content; + size_t content_size; + struct s_dlist *next; + struct s_dlist *prev; +}; + +typedef struct s_dlist t_dlist; + +void ft_dlstadd_after(t_dlist **alst, t_dlist *new); +void ft_dlstadd_before(t_dlist **alst, t_dlist *new); +void ft_dlstdel(t_dlist **alst, void (*del)(void *, size_t)); +void ft_dlstdelone(t_dlist **alst, void (*del)(void *, size_t)); +int ft_dlstsize(t_dlist *list); +t_dlist *ft_dlstnew(void const *content, size_t content_size); +t_dlist *ft_dlstlast(t_dlist *list); +char *ft_dlsttostr(t_dlist *list); + +#endif diff --git a/nmap/libft/includes/error.h b/nmap/libft/includes/error.h new file mode 100644 index 00000000..7532026c --- /dev/null +++ b/nmap/libft/includes/error.h @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 15:34:21 by jhalford #+# #+# */ +/* Updated: 2017/05/15 17:37:29 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ERROR_H +# define ERROR_H + +# include "libft.h" +# include + +/* +** DEBUG with malloc +*/ +# define DG_MSG "{inv}{ran}%5i{yel}%21s {bol}{blu}%-3d{eoc}" +# define DG_ARGS getpid(), getpid(), ft_path_notdir(__FILE__), __LINE__ +# define DG(s, ...) ft_dprintf(STDERR,DG_MSG s "{eoc}\n",DG_ARGS,##__VA_ARGS__) + +/* +** DEBUG with no malloc +*/ +# define DG2 ft_putstr(__FILE__"\t");ft_putnbr(__LINE__) +# define DGW(d) DG2;d;ft_putchar('\n') +# define DGS(s) DGW(ft_putstr(": "s"=")) +# define DGSN(s, n) DGW(ft_putstr(": "s"=");ft_putnbr(n)) +# define DGSH(s, n) DGW(ft_putstr(": "s"=");ft_putnbr_hex(n)) + +# define ERR_PROTO(u, m) "{red}%s: %s{eoc}\n", u, m +# define ERR_MSG(u, m) ft_dprintf(2, ERR_PROTO(u, m)) +# define ERR_SET(n, ...) error_set(n, ##__VA_ARGS__) +# define ERRMSG_MAX_SIZE 150 + +enum e_errors +{ + E_NOERR, + E_CO_INV, + E_CO_INVL, + E_CO_MULT, + E_CO_MISS, + E_CO_MISSL, + E_SYS_NOFILE, + E_SYS_ISDIR, + E_SYS_NOPERM, + E_MAX, +}; + +extern char g_error_msg[E_MAX][ERRMSG_MAX_SIZE]; +extern char *g_errmsg; +extern int g_errnum; +extern char **g_argv; + +int error_set(int n, ...); +int ft_perror(char *utility); +void ft_usage(char *format, ...); + +#endif diff --git a/nmap/libft/includes/ft_printf.h b/nmap/libft/includes/ft_printf.h new file mode 100644 index 00000000..e9299538 --- /dev/null +++ b/nmap/libft/includes/ft_printf.h @@ -0,0 +1,80 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ftprintf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:22:54 by jhalford #+# #+# */ +/* Updated: 2017/03/20 09:23:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H + +# include "libft.h" +# include + +# define ALL_FLAGS "#0- +" +# define ALL_CONVERSIONS "sSpdDioOuUxXcCb" + +typedef struct s_fmt t_fmt; +typedef struct s_conv t_conv; +typedef char *(t_converter)(t_fmt *fmt, va_list ap); +typedef void (t_pad_func)(char *str, t_fmt *fmt); + +struct s_conv +{ + char id; + char allowed_flags[6]; + char base[20]; + t_converter *converter; + t_pad_func *sharp_func; +}; + +struct s_fmt +{ + char flags[6]; + int width; + int precision; + char modifier[3]; + char conversion; + int valid; + t_conv conv; + +}; + +int ft_vdprintf(int fd, const char *format, va_list ap); +int ft_fmtcalc(char **final, char **str, va_list ap); + +extern t_conv g_convs[]; + +t_fmt *ft_fmt_init(void); +void ft_fmt_print(t_fmt *fmt); +void ft_printf_color(char **final, char **str, va_list ap); +t_fmt *ft_printf_parse(char **format, va_list ap); + +char *ft_transform(t_fmt *fmt, va_list ap); + +void ft_fmt_error_conv(char conv); +void ft_fmt_error_mod_conv(char *mod, char conv); +void ft_fmt_error_flag_conv(char flag, char conv); +void ft_fmt_error_flag_flag(char flag1, char flag2); + +void ft_fmt_simplify(t_fmt *fmt); +int ft_fmt_validate_conv(t_fmt *fmt); +void ft_fmt_validate_flags(t_fmt *fmt); +void ft_fmt_validate_mod(t_fmt *fmt); + +char *ft_signed_conversion(t_fmt *fmt, va_list ap); +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap); +char *ft_str_conversion(t_fmt *fmt, va_list ap); +char *ft_char_conversion(t_fmt *fmt, va_list ap); + +void ft_pad_sharp_o(char *str, t_fmt *fmt); +void ft_pad_sharp_xb(char *str, t_fmt *fmt); +void ft_pad_left(char *str, t_fmt *fmt); +void ft_pad_right(char *str, t_fmt *fmt); + +#endif diff --git a/nmap/libft/includes/ft_time.h b/nmap/libft/includes/ft_time.h new file mode 100644 index 00000000..728b727a --- /dev/null +++ b/nmap/libft/includes/ft_time.h @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* mytime.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 11:43:12 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:16:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef TIME_H +# define TIME_H + +# include + +# include "libft.h" + +uint64_t epoch_micro(void); +double time_milli(void); + +#endif diff --git a/nmap/libft/includes/ft_types.h b/nmap/libft/includes/ft_types.h new file mode 100644 index 00000000..a8f001cc --- /dev/null +++ b/nmap/libft/includes/ft_types.h @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_types.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/25 01:56:58 by jhalford #+# #+# */ +/* Updated: 2017/03/25 02:02:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_TYPES_H +# define FT_TYPES_H + +typedef struct s_stos t_stos; +typedef struct s_stof t_stof; +typedef struct s_itof t_itof; +typedef long long int t_flag; +typedef long long int t_type; + +#endif diff --git a/nmap/libft/includes/get_next_line.h b/nmap/libft/includes/get_next_line.h new file mode 100644 index 00000000..b63d0ac2 --- /dev/null +++ b/nmap/libft/includes/get_next_line.h @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/05 12:21:36 by jhalford #+# #+# */ +/* Updated: 2016/12/15 13:07:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H +# define BUFF_SIZE 32 + +# include "libft.h" +# include +# include + +typedef struct s_save t_save; + +struct s_save +{ + int fd; + char *str; +}; + +int get_next_line(int const fd, char **line); + +#endif diff --git a/nmap/libft/includes/hexstring.h b/nmap/libft/includes/hexstring.h new file mode 100644 index 00000000..00f22960 --- /dev/null +++ b/nmap/libft/includes/hexstring.h @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* hexstring.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/24 21:37:32 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:46:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/** + * HEXSTRING HEADER + * + * Functions used to convert, and manipulate hexstrings. + */ + +#ifndef HEXSTRING_H_ +# define HEXSTRING_H_ + +# include "libft.h" + +# include +# include +# include +# include +# include + + +char *raw_to_hexstr(const char *raw, int size); +char *hexstr_to_raw(const char *hexstr, int *size); +void hex_to_str(uint8_t hex, char *str); +uint8_t str_to_hex(char *str); + +#endif /* HEXSTRING_H_ */ diff --git a/nmap/libft/includes/libft.h b/nmap/libft/includes/libft.h new file mode 100644 index 00000000..bc23f163 --- /dev/null +++ b/nmap/libft/includes/libft.h @@ -0,0 +1,98 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:49:04 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:38:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H + +# define FT_TRY(a,b) ((a) ? (a) : (b)) + +# include +# include +# include +# include +# include +# include +# include + +# include "ft_types.h" +# include "error.h" +# include "color.h" +# include "cliopts.h" +# include "rs.h" + +# include "lst.h" +# include "dlst.h" +# include "btree.h" + +# include "str.h" +# include "sstr.h" +# include "math.h" +# include "time.h" +# include "get_next_line.h" +# include "sys.h" +# include "net.h" +# include "prettypacket.h" + +struct s_stos +{ + char *key; + char *val; +}; + +struct s_stof +{ + char *key; + int (*f)(); +}; + +struct s_itof +{ + int id; + int (*f)(); +}; + +int ft_printf(const char *format, ...); +int ft_dprintf(int fd, const char *format, ...); +int ft_vdprintf(int fd, const char *format, va_list ap); +int ft_asprintf(char **ret, const char *format, ...); +int ft_vasprintf(char **ret, const char *format, va_list ap); + +void *ft_malloc(size_t size); +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memalloc(size_t size); +void ft_memdel(void **ap); + +int ft_putchar(int c); +int ft_putstr(char const *s); +int ft_putendl(char const *s); +int ft_putnbr(long n); +int ft_putnbr_hex(long n); + +int ft_error_message(char *message); + +int ft_putchar_fd(int c, int fd); +int ft_putstr_fd(char const *s, int fd); +int ft_putendl_fd(char const *s, int fd); +int ft_putnbr_fd(long n, int fd); +int ft_putnbr_hex_fd(long n, int fd); + +void *hexdump(void *addr, unsigned int offset, unsigned int size); + +void *ft_realloc(void *data, int size); + +#endif diff --git a/nmap/libft/includes/lst.h b/nmap/libft/includes/lst.h new file mode 100644 index 00000000..8188f934 --- /dev/null +++ b/nmap/libft/includes/lst.h @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:46 by jhalford #+# #+# */ +/* Updated: 2017/10/08 16:00:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LST_H +# define LST_H + +# include "libft.h" + +struct s_list +{ + void *content; + size_t content_size; + struct s_list *next; +}; + +typedef struct s_list t_list; + +int pop(t_list **lst); +t_list *push(t_list **stack, int elem); + +t_list *ft_lstnew(void const *content, size_t content_size); +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)); +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)); +void ft_lstadd(t_list **alst, t_list *new); +int ft_lstiter(t_list *lst, int (*f)(), void *data); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *)); + +t_list *ft_lstnew_range(int a, int b); +void ft_lsteadd(t_list **alst, t_list *new); +void ft_lstnadd(t_list **alst, t_list *new, int n); +void ft_lstsort(t_list **begin_list, int (*cmp)()); +void ft_lst_print(t_list *list, void (*printer)()); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lst_sorted_merge( + t_list **begin_list1, + t_list *begin_list2, + int (*cmp)()); +void ft_lst_sorted_insert( + t_list **begin_list, + t_list *insert, + int (*cmp)()); +void ft_lst_delif( + t_list **alist, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_delsub( + t_list **alst, + t_list *sub, int (*cmp)(), + void (*del)(void *, size_t)); +void ft_lst_cfree(void *ptr, size_t size); +void ft_lst_bfree(void *ptr, size_t size); +t_list *ft_lst_filter( + t_list *lst, + void const *data_ref, + t_list *(*f)(t_list *elem, void const *)); +t_list *ft_lst_removeif( + t_list **alst, + void *data_ref, + int (*cmp)()); +t_list *ft_lst_find( + t_list *begin_list, + void *data_ref, + int (*cmp)()); +t_list *ft_lstpop(t_list **lst); +void ft_lst_merge(t_list **begin_list1, t_list *begin_list2); +void ft_lst_reverse(t_list **begin_list); +void ft_lst_filterout( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)); + +int ft_diff(void *a, void *b); +t_list *ft_id(t_list *a); +t_list *ft_lst_at(t_list *list, unsigned int nbr); + +void lst_insert_sort(t_list **head, + int (cmp)()); + +t_list *ft_lst_pop(t_list **lst); +char *ft_lst2str(t_list *list); + +#endif diff --git a/nmap/libft/includes/math.h b/nmap/libft/includes/math.h new file mode 100644 index 00000000..5dbc6749 --- /dev/null +++ b/nmap/libft/includes/math.h @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* math.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:41:59 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:04:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MATH_H +# define MATH_H + +# define FT_WS(x) (x == ' ' || x == '\t' || x == '\n') +# define FT_ABS(x) (((x) < 0) ? -(x) : (x)) +# define FT_NEG(x) ((x) < 0) +# define FT_POS(x) ((x) > 0) +# define FT_MIN(a, b) ((a) < (b) ? (a) : (b)) +# define FT_MAX(a, b) ((a) > (b) ? (a) : (b)) +# define FT_DIST(a, b) FT_ABS((a) - (b)) +# define FT_PCT(a, t) (t ? 100 * (float)(t - a)/(float)t : 0) + +char *ft_itoa(int n); +char *ft_itoa_base(int nbr, char *base, char *flags); +char *ft_lltoa_base(long long nbr, char *base, char *flags); +char *ft_ulltoa_base(unsigned long long nbr, char *base); +char *ft_uitoa_base(unsigned int nbr, char *base); +size_t ft_ilen(int n); +size_t ft_ilen_base(int n, int base); +size_t ft_uilen(unsigned int n); +size_t ft_lllen(long long n); +size_t ft_lllen_base(long long n, int base); + +int ft_addrcmp(void *a, void *b); +void *id(void *data); + +#endif diff --git a/nmap/libft/includes/net.h b/nmap/libft/includes/net.h new file mode 100644 index 00000000..4d4a5ffb --- /dev/null +++ b/nmap/libft/includes/net.h @@ -0,0 +1,76 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:06:12 by jhalford #+# #+# */ +/* Updated: 2017/10/24 20:55:02 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef NET_H +# define NET_H + +# define ACK 2 +# define NACK 3 +# define NET_MAXSIZE 512 + +# include +# include +# include +# include +# include +# include +# include +# include + +# include "ft_time.h" + +/* +** utilities +*/ + +int reserve_port(int s, struct sockaddr *sa); +unsigned short cksum(const void *b, size_t len); +int host_format(struct sockaddr *addr); + +/* +** lazy setup +*/ +int create_server(int port, int backlog, char *protoname); +int create_client(char *addr, int port, char *protoname); +void listener(int domain, int sock, int proto, + void (*handler)(void *buf, int bytes, struct sockaddr_in *addr)); + +/* +** lazy framing +*/ +int net_send(int sock, char *msg, int size); +int net_send_large(int sock, char *msg, int size); +int net_get(int sock, char *msg, int size); +int net_get_fd(int sock, int fd, int size); +int net_get_large(int sock, int fd); + +/* +** ip +*/ +void ip_hdrinit(struct ip *hdr); +void ip_load_icmp(struct icmp *icmp, void *buf); + +/* +** tcp +*/ +void tcp_hdrinit(struct tcphdr *header); + + +/* +** prettypacket +*/ +int prettypacket(void *pkt, size_t size); +void tcp_print(const char *packet_buffer, int size); +void udp_print(const char *packet_buffer, int size); + + +#endif diff --git a/nmap/libft/includes/prettypacket.h b/nmap/libft/includes/prettypacket.h new file mode 100644 index 00000000..97f7b0c5 --- /dev/null +++ b/nmap/libft/includes/prettypacket.h @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* prettypacket.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/24 21:38:38 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:41:44 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef __PRETTYPACKET_H__ +#define __PRETTYPACKET_H__ + +#include +#include +#include +#include "hexstring.h" + +// functions that need prototypes +void layer_2_dispatcher(const char *, int, uint64_t); +void layer_3_dispatcher(const char *, int, uint64_t); +void layer_4_dispatcher(const char *, int, uint64_t); + +#endif /* __PRETTYPACKET_H__ */ diff --git a/nmap/libft/includes/rs.h b/nmap/libft/includes/rs.h new file mode 100644 index 00000000..4903aa75 --- /dev/null +++ b/nmap/libft/includes/rs.h @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* rs.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:05:30 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:59:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_RS_H +# define LIBFT_RS_H + +# include +# include +# include + +extern struct s_stats { + int count; + double min; + double max; + double avg; + double m; + double stdev; + double var; +} g_rs; + +void rs_clear(); +void rs_push(double n); +void rs_calcmore(); + +#endif diff --git a/nmap/libft/includes/sstr.h b/nmap/libft/includes/sstr.h new file mode 100644 index 00000000..b1f10bc2 --- /dev/null +++ b/nmap/libft/includes/sstr.h @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sstr.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 13:16:25 by jhalford #+# #+# */ +/* Updated: 2017/03/24 17:46:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SSTR_H +# define SSTR_H + +char **ft_sstradd(char **list, char *new); +void ft_sstrsort(char **list, int (*cmp)()); +void ft_sstrprint(char **list, char sep); +void ft_sstrprint_fd(int fd, char **list, char sep); +char **ft_sstrdup(char **list); +char **ft_sstrmerge(char **s1, char **s2); +void ft_sstrdel(char **sstr, int index); +void ft_sstrfree(char **sstr); +char *ft_sstrcat(char **sstr, char sep); +char *ft_sstrstr(char **sstr, char *find); + +#endif diff --git a/nmap/libft/includes/str.h b/nmap/libft/includes/str.h new file mode 100644 index 00000000..0d08a4b6 --- /dev/null +++ b/nmap/libft/includes/str.h @@ -0,0 +1,78 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* str.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 13:05:53 by jhalford #+# #+# */ +/* Updated: 2017/03/07 11:36:58 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef STR_H +# define STR_H + +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); + +size_t ft_strlen(const char *s); +size_t ft_strlenchr(const char *s, char c); +char *ft_strdup(const char *s1); +char *ft_strdupchr(const char *str, char c); +char *ft_strduptr(char *str, int (*is)(int c)); +char *ft_strcpy(char *dst, const char *src); +char *ft_strncpy(char *dst, const char *src, size_t len); +char *ft_strchrcpy(char *dst, const char *str, char c); +char *ft_strcat(char *s1, const char *s2); +char *ft_strncat(char *s1, const char *s2, size_t n); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strstr(const char *big, const char *little); +char *ft_strnstr(const char *big, const char *little, size_t len); +int ft_strcmp(const char *s1, const char *s2); +int ft_strncmp(const char *s1, const char *s2, size_t n); +int ft_atoi(const char *str); + +char *ft_strnew(size_t size); +void ft_strdel(char **as); +void ft_strclr(char *s); +void ft_striter(char *s, void (*f)(char *)); +void ft_striteri(char *s, void (*f)(unsigned int, char *)); +char *ft_strmap(char const *s, char (*f)(char)); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +int ft_strequ(char const *s1, char const *s2); +int ft_strnequ(char const *s1, char const *s2, size_t n); +char *ft_strsub(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strsepjoin(char **tab, char sep); +char *ft_strtrim(char const *s); +char **ft_strsplit(char const *s, char c); + +char *ft_strrev(char *str); +char **ft_strsplit(char const *s, char c); +char *ft_str3join(char const *s1, char const *s2, char const *s3); +char *ft_strcut(char *str, char *cut); +char **ft_split_whitespaces(char const *str); +char *ft_convert_base( + char *str, char *base_from, char *base_to, char *flags); +char *ft_strcatf(char *s1, const char *s2); +char *ft_strinsert(char *str, char c, int n); +int ft_strappend(char **dst, char *src); +char *ft_strbetween(char *start, char *end); +char *ft_strreplace(char **str, char *start, char *end, char *new); +char *ft_strtok(char *s, const char *delim); +size_t ft_strcspn(char *s, const char *delim); + +char *ft_path_notdir(char *path); +int ft_stris(char *str, int (*f)()); + +char *ft_strndup(const char *s1, size_t n); + +#endif diff --git a/nmap/libft/includes/sys.h b/nmap/libft/includes/sys.h new file mode 100644 index 00000000..4cb977e8 --- /dev/null +++ b/nmap/libft/includes/sys.h @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sys.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 17:24:23 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:10:34 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef SYS_H +# define SYS_H + +# define FT_XATTR_SIZE 10000 +# define STDIN STDIN_FILENO +# define STDOUT STDOUT_FILENO +# define STDERR STDERR_FILENO +# define STDBUG 9 + +# define PIPE_READ 0 +# define PIPE_WRITE 1 + +# include +# include +# include +# include + +int open_new(char *filename, int oflag); + +#endif diff --git a/nmap/libft/pdf/ft_printf.pdf b/nmap/libft/pdf/ft_printf.pdf new file mode 100644 index 00000000..b4fd9669 Binary files /dev/null and b/nmap/libft/pdf/ft_printf.pdf differ diff --git a/nmap/libft/pdf/get_next_line.fr.pdf b/nmap/libft/pdf/get_next_line.fr.pdf new file mode 100644 index 00000000..03d33367 Binary files /dev/null and b/nmap/libft/pdf/get_next_line.fr.pdf differ diff --git a/nmap/libft/pdf/libft.fr.pdf b/nmap/libft/pdf/libft.fr.pdf new file mode 100644 index 00000000..b3951a0a Binary files /dev/null and b/nmap/libft/pdf/libft.fr.pdf differ diff --git a/nmap/libft/srcs/btree/btree_apply_by_level.c b/nmap/libft/srcs/btree/btree_apply_by_level.c new file mode 100644 index 00000000..14e537f7 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_apply_by_level.c @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_apply_by_level.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/19 12:06:15 by jhalford #+# #+# */ +/* Updated: 2017/03/14 17:25:46 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +int g_level = 0; + +static void btree_apply_to_level( + t_btree *root, + int level, + int is_first_elem, + void (*applyf)(void *item, int current_level, int is_first_elem)) +{ + if (level == g_level) + { + (*applyf)(root->item, level, is_first_elem); + return ; + } + if (root->left) + btree_apply_to_level(root->left, level + 1, is_first_elem, applyf); + if (root->right) + btree_apply_to_level(root->right, level + 1, 0, applyf); +} + +void btree_apply_by_level( + t_btree *root, + void (*applyf)(void *item, int current_level, int is_first_elem)) +{ + int height; + + height = btree_level_count(root); + while (g_level < height) + { + btree_apply_to_level(root, 0, 1, applyf); + g_level++; + } +} diff --git a/nmap/libft/srcs/btree/btree_apply_infix.c b/nmap/libft/srcs/btree/btree_apply_infix.c new file mode 100644 index 00000000..93a18b7d --- /dev/null +++ b/nmap/libft/srcs/btree/btree_apply_infix.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2017/03/06 18:22:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_infix(t_btree *root, void (*applyf)(void *)) +{ + if (root->left) + btree_apply_infix(root->left, applyf); + (*applyf)(root->item); + if (root->right) + btree_apply_infix(root->right, applyf); + return ; +} diff --git a/nmap/libft/srcs/btree/btree_apply_prefix.c b/nmap/libft/srcs/btree/btree_apply_prefix.c new file mode 100644 index 00000000..e7e4332c --- /dev/null +++ b/nmap/libft/srcs/btree/btree_apply_prefix.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/18 21:06:44 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_prefix(t_btree *root, void (*applyf)(void *)) +{ + (*applyf)(root->item); + if (root->left) + btree_apply_prefix(root->left, applyf); + if (root->right) + btree_apply_prefix(root->right, applyf); +} diff --git a/nmap/libft/srcs/btree/btree_apply_suffix.c b/nmap/libft/srcs/btree/btree_apply_suffix.c new file mode 100644 index 00000000..ae103242 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_apply_suffix.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_apply_suffix.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:43:08 by jhalford #+# #+# */ +/* Updated: 2016/12/05 11:43:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_apply_suffix(t_btree *root, void (*applyf)(void *)) +{ + if (root->left) + btree_apply_suffix(root->left, applyf); + if (root->right) + btree_apply_suffix(root->right, applyf); + (*applyf)(root->item); + return ; +} diff --git a/nmap/libft/srcs/btree/btree_create_node.c b/nmap/libft/srcs/btree/btree_create_node.c new file mode 100644 index 00000000..cc365537 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_create_node.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +t_btree *btree_create_node(void const *item, size_t content_size) +{ + t_btree *new; + + if (!(new = (t_btree *)ft_malloc(sizeof(t_btree)))) + return (NULL); + new->left = 0; + new->right = 0; + if (!item) + { + new->content_size = 0; + new->item = NULL; + } + else + { + new->content_size = content_size; + new->item = ft_memalloc(content_size + 1); + ft_memcpy(new->item, item, content_size); + } + return (new); +} diff --git a/nmap/libft/srcs/btree/btree_del.c b/nmap/libft/srcs/btree/btree_del.c new file mode 100644 index 00000000..8b72f78a --- /dev/null +++ b/nmap/libft/srcs/btree/btree_del.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_del.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:43:03 by jhalford #+# #+# */ +/* Updated: 2017/03/21 19:43:51 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_del(t_btree **root, void (*del)(void *, size_t)) +{ + if (root && *root && del) + { + btree_del(&(*root)->left, del); + btree_del(&(*root)->right, del); + btree_delone(root, del); + } +} diff --git a/nmap/libft/srcs/btree/btree_delone.c b/nmap/libft/srcs/btree/btree_delone.c new file mode 100644 index 00000000..17ce1c4a --- /dev/null +++ b/nmap/libft/srcs/btree/btree_delone.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_delone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:45:51 by jhalford #+# #+# */ +/* Updated: 2016/12/15 12:48:55 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_delone(t_btree **root, void (*del)(void *, size_t)) +{ + if (root && *root) + { + if (del) + (*del)((*root)->item, (*root)->content_size); + free(*root); + *root = NULL; + } +} diff --git a/nmap/libft/srcs/btree/btree_insert_data.c b/nmap/libft/srcs/btree/btree_insert_data.c new file mode 100644 index 00000000..a6e262fc --- /dev/null +++ b/nmap/libft/srcs/btree/btree_insert_data.c @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/11/14 16:12:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void btree_insert_data( + t_btree **root, + void *item, + size_t content_size, + int (*cmpf)(void *, void *)) +{ + t_btree *node; + + if (!*root) + { + *root = btree_create_node(item, content_size); + return ; + } + node = *root; + if ((*cmpf)(item, node->item) < 0) + { + if (node->left) + btree_insert_data(&node->left, item, content_size, cmpf); + else + node->left = btree_create_node(item, content_size); + } + else + { + if (node->right) + btree_insert_data(&node->right, item, content_size, cmpf); + else + node->right = btree_create_node(item, content_size); + } +} diff --git a/nmap/libft/srcs/btree/btree_level_count.c b/nmap/libft/srcs/btree/btree_level_count.c new file mode 100644 index 00000000..41248654 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_level_count.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/25 17:46:00 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +int btree_level_count(t_btree *root) +{ + return (root + ? 1 + FT_MAX(btree_level_count(root->left), + btree_level_count(root->right)) + : 0); +} diff --git a/nmap/libft/srcs/btree/btree_map.c b/nmap/libft/srcs/btree/btree_map.c new file mode 100644 index 00000000..47b92852 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_map.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_map.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/08 11:50:46 by jhalford #+# #+# */ +/* Updated: 2017/03/24 15:49:42 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +t_btree *btree_map(t_btree *root, void *(*f)(void *)) +{ + t_btree *new; + + if (!root) + return (NULL); + if (!(new = (t_btree *)ft_malloc(sizeof(*new)))) + return (NULL); + new->item = (*f)(root->item); + new->left = btree_map(root->left, f); + new->right = btree_map(root->right, f); + return (new); +} diff --git a/nmap/libft/srcs/btree/btree_print.c b/nmap/libft/srcs/btree/btree_print.c new file mode 100644 index 00000000..10b46735 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_print.c @@ -0,0 +1,82 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 18:06:24 by jhalford #+# #+# */ +/* Updated: 2017/05/15 19:08:35 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +static int print_t2(t_printdata data, char s[20][255], char b[20]) +{ + int width; + int i; + + width = 5; + i = -1; + while (++i < width) + s[2 * data.depth][data.offset + data.left + i] = b[i]; + i = -1; + if (data.depth && data.is_left) + { + while (++i < width + data.right) + s[2 * data.depth - 1] + [data.offset + data.left + width / 2 + i] = '-'; + s[2 * data.depth - 1][data.offset + data.left + width / 2] = '+'; + s[2 * data.depth - 1] + [data.offset + data.left + data.right + 3 * width / 2] = '+'; + } + else if (data.depth && !data.is_left) + { + while (++i < width + data.left) + s[2 * data.depth - 1][data.offset - width / 2 + i] = '-'; + s[2 * data.depth - 1][data.offset + data.left + width / 2] = '+'; + s[2 * data.depth - 1][data.offset - width / 2 - 1] = '+'; + } + return (data.left + width + data.right); +} + +static int print_t(t_btree *tree, + t_printdata data, char s[20][255], char *(*printer)(void *)) +{ + char b[20]; + int width; + + width = 5; + if (!tree) + return (0); + sprintf(b, "%5s", printer(tree->item)); + data.left = print_t(tree->left, (t_printdata){ + 1, data.offset, data.depth + 1, data.left, data.right}, s, printer); + data.right = print_t(tree->right, (t_printdata){ + 0, data.offset + data.left + width, data.depth + 1, + data.left, data.right}, s, printer); + return (print_t2(data, s, b)); +} + +void btree_print(int fd, t_btree *tree, char *(*printer)(void *)) +{ + char s[20][255]; + char empty[255]; + int i; + + i = -1; + while (++i < 20) + sprintf(s[i], "%80s", " "); + sprintf(empty, "%80s", " "); + print_t(tree, (t_printdata){0, 0, 0, 0, 0}, s, printer); + i = -1; + while (++i < 20) + { + if (ft_strcmp(s[i], empty) == 0) + break ; + if (i == 0 && ft_strcmp(s[1], empty) == 0) + break ; + ft_dprintf(fd, "%s\n", s[i]); + } +} diff --git a/nmap/libft/srcs/btree/btree_search_item.c b/nmap/libft/srcs/btree/btree_search_item.c new file mode 100644 index 00000000..a7a1eb68 --- /dev/null +++ b/nmap/libft/srcs/btree/btree_search_item.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* btree_create_node.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/16 13:43:51 by jhalford #+# #+# */ +/* Updated: 2016/08/23 19:04:56 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "btree.h" + +void *btree_search_item(t_btree *root, + void *data_ref, int (*cmpf)(void *, void *)) +{ + void *out; + + out = NULL; + if (root) + { + out = btree_search_item(root->left, data_ref, cmpf); + if (!out && ((*cmpf)(root->item, data_ref) == 0)) + out = root->item; + if (!out) + out = btree_search_item(root->right, data_ref, cmpf); + } + return (out); +} diff --git a/nmap/libft/srcs/char/ft_isalnum.c b/nmap/libft/srcs/char/ft_isalnum.c new file mode 100644 index 00000000..673b6e89 --- /dev/null +++ b/nmap/libft/srcs/char/ft_isalnum.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:18 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:31:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + if ((c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= '0' && c <= '9')) + return (c); + return (0); +} diff --git a/nmap/libft/srcs/char/ft_isalpha.c b/nmap/libft/srcs/char/ft_isalpha.c new file mode 100644 index 00000000..ac5d276e --- /dev/null +++ b/nmap/libft/srcs/char/ft_isalpha.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:24 by jhalford #+# #+# */ +/* Updated: 2017/03/07 11:59:16 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) + return (c); + return (0); +} diff --git a/nmap/libft/srcs/char/ft_isascii.c b/nmap/libft/srcs/char/ft_isascii.c new file mode 100644 index 00000000..52a85067 --- /dev/null +++ b/nmap/libft/srcs/char/ft_isascii.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:28 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:35:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + if (c >= 0 && c <= 127) + return (1); + return (0); +} diff --git a/nmap/libft/srcs/char/ft_isdigit.c b/nmap/libft/srcs/char/ft_isdigit.c new file mode 100644 index 00000000..510371c2 --- /dev/null +++ b/nmap/libft/srcs/char/ft_isdigit.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:33 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:56:34 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + unsigned char a; + + a = (unsigned char)c; + if (a >= '0' && a <= '9') + return (a); + return (0); +} diff --git a/nmap/libft/srcs/char/ft_isprint.c b/nmap/libft/srcs/char/ft_isprint.c new file mode 100644 index 00000000..74a46640 --- /dev/null +++ b/nmap/libft/srcs/char/ft_isprint.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:38 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:32:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + if (c >= 32 && c <= 126) + return (c); + return (0); +} diff --git a/nmap/libft/srcs/char/ft_tolower.c b/nmap/libft/srcs/char/ft_tolower.c new file mode 100644 index 00000000..3992c4c9 --- /dev/null +++ b/nmap/libft/srcs/char/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:46 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:24:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + return (c); +} diff --git a/nmap/libft/srcs/char/ft_toupper.c b/nmap/libft/srcs/char/ft_toupper.c new file mode 100644 index 00000000..3aa9ea10 --- /dev/null +++ b/nmap/libft/srcs/char/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:53:58 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:24:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + return (c); +} diff --git a/nmap/libft/srcs/cliopts/cliopts_get.c b/nmap/libft/srcs/cliopts/cliopts_get.c new file mode 100644 index 00000000..f226e6f3 --- /dev/null +++ b/nmap/libft/srcs/cliopts/cliopts_get.c @@ -0,0 +1,110 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts_get.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 20:04:04 by jhalford #+# #+# */ +/* Updated: 2017/04/02 20:45:11 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** void *data must be a structure starting with `int flag` +** to do polymorphism with t_data_template ! +*/ + +#include "cliopts.h" + +static char *check_required(char ***av, char *arg) +{ + char *ret; + + if (!av || !*av) + return (NULL); + if (!arg || !*arg || !*(arg + 1)) + return (*++(*av)); + ret = arg + 1; + return (ret); +} + +static int cliopts_parse_short( + char ***av, t_cliopts opt_map[], void *data) +{ + t_cliopts *map; + char *arg; + int i; + char *tmp; + + arg = **av + 1; + i = -1; + while (arg[++i] && !(tmp = NULL)) + { + if (!(map = cliopts_getmap_short(opt_map, arg[i]))) + return (ERR_SET(E_CO_INV, arg[i])); + ((t_data_template*)data)->flag |= map->flag_on; + ((t_data_template*)data)->flag &= ~map->flag_off; + if (map->get) + { + if (map->arg_required && !(tmp = check_required(av, arg + i))) + return (ERR_SET(E_CO_MISS, *arg)); + tmp = tmp ? tmp : **av; + if ((map->get)(tmp, data)) + return (ERR_SET(E_CO_MISS, *arg)); + if (map->arg_required) + break ; + } + } + return (++(*av) ? 0 : 0); +} + +static int cliopts_parse_long( + char ***av, t_cliopts opt_map[], void *data) +{ + t_cliopts *map; + char *arg; + char *tmp; + + arg = **av + 2; + tmp = NULL; + if (!(map = cliopts_getmap_long(opt_map, arg))) + return (ERR_SET(E_CO_INVL, arg)); + ((t_data_template*)data)->flag |= map->flag_on; + ((t_data_template*)data)->flag &= ~map->flag_off; + if (map->get) + { + if (map->arg_required && !(tmp = check_required(av, NULL))) + return (ERR_SET(E_CO_MISS, *arg)); + if ((map->get)(tmp, data)) + return (ERR_SET(E_CO_MISSL, arg)); + } + ++(*av); + return (0); +} + +int cliopts_get(char **av, t_cliopts opt_map[], void *data) +{ + if (!av) + return (1); + av++; + while (av && *av) + { + if (ft_strcmp(*av, "-") == 0 || (ft_strcmp(*av, "--") == 0 && av++)) + break ; + else if ((*av)[0] == '-' && (*av)[1] == '-') + { + if (cliopts_parse_long(&av, opt_map, data)) + return (1); + } + else if ((*av)[0] == '-') + { + if (cliopts_parse_short(&av, opt_map, data)) + return (1); + } + else + break ; + } + ((t_data_template*)data)->av_data = av; + return (0); +} diff --git a/nmap/libft/srcs/cliopts/cliopts_getmap.c b/nmap/libft/srcs/cliopts/cliopts_getmap.c new file mode 100644 index 00000000..189e22ba --- /dev/null +++ b/nmap/libft/srcs/cliopts/cliopts_getmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cliopts_getmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/25 14:59:03 by jhalford #+# #+# */ +/* Updated: 2017/03/25 15:01:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cliopts.h" + +t_cliopts *cliopts_getmap_long(t_cliopts opt_map[], char *arg) +{ + int i; + + i = -1; + while (opt_map[++i].c) + if (!ft_strcmp(opt_map[i].str, arg)) + return (&opt_map[i]); + return (NULL); +} + +t_cliopts *cliopts_getmap_short(t_cliopts opt_map[], char arg) +{ + int i; + + i = -1; + while (opt_map[++i].c) + if (opt_map[i].c == arg) + return (&opt_map[i]); + return (NULL); +} diff --git a/nmap/libft/srcs/color/ft_color_mk.c b/nmap/libft/srcs/color/ft_color_mk.c new file mode 100644 index 00000000..db75d7cc --- /dev/null +++ b/nmap/libft/srcs/color/ft_color_mk.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_mk.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/27 11:35:18 by jhalford #+# #+# */ +/* Updated: 2016/12/12 11:54:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_mk(t_color *color, char fg[7], char bg[7]) +{ + ft_strcpy(color->fg, fg); + ft_strcpy(color->bg, bg); +} diff --git a/nmap/libft/srcs/color/ft_color_mkif.c b/nmap/libft/srcs/color/ft_color_mkif.c new file mode 100644 index 00000000..707a5c8c --- /dev/null +++ b/nmap/libft/srcs/color/ft_color_mkif.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_mk.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/27 11:35:18 by jhalford #+# #+# */ +/* Updated: 2016/12/03 12:17:14 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_mkif(t_color *color, int cond, char fg[7], char bg[7]) +{ + if (cond) + ft_color_mk(color, fg, bg); +} diff --git a/nmap/libft/srcs/color/ft_color_reset.c b/nmap/libft/srcs/color/ft_color_reset.c new file mode 100644 index 00000000..4b557bff --- /dev/null +++ b/nmap/libft/srcs/color/ft_color_reset.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_reset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:48:05 by jhalford #+# #+# */ +/* Updated: 2016/11/25 14:06:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_reset(void) +{ + ft_putstr(FG_DEFAULT); + ft_putstr(BG_DEFAULT); +} diff --git a/nmap/libft/srcs/color/ft_color_set.c b/nmap/libft/srcs/color/ft_color_set.c new file mode 100644 index 00000000..99d9c0d0 --- /dev/null +++ b/nmap/libft/srcs/color/ft_color_set.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_color_set.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/25 13:53:46 by jhalford #+# #+# */ +/* Updated: 2016/12/12 11:55:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_color_set(t_color color) +{ + char out[20]; + + ft_strcpy(out, color.fg); + ft_strcat(out, color.bg); + ft_putstr(out); +} diff --git a/nmap/libft/srcs/dlst/ft_dlstadd_after.c b/nmap/libft/srcs/dlst/ft_dlstadd_after.c new file mode 100644 index 00000000..19dc852a --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstadd_after.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_add_after.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:04 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstadd_after(t_dlist **alst, t_dlist *new) +{ + if (new) + { + new->prev = (*alst); + if (*alst) + new->next = (*alst)->next; + else + new->next = NULL; + if (new->next) + new->next->prev = new; + if (new->prev) + new->prev->next = new; + *alst = new; + } +} diff --git a/nmap/libft/srcs/dlst/ft_dlstadd_before.c b/nmap/libft/srcs/dlst/ft_dlstadd_before.c new file mode 100644 index 00000000..e2d6b2e8 --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstadd_before.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_add_before.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:09 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstadd_before(t_dlist **alst, t_dlist *new) +{ + if (new) + { + new->next = (*alst); + if (*alst) + new->prev = (*alst)->prev; + if (new->next) + new->next->prev = new; + if (new->prev) + new->prev->next = new; + *alst = new; + } +} diff --git a/nmap/libft/srcs/dlst/ft_dlstdel.c b/nmap/libft/srcs/dlst/ft_dlstdel.c new file mode 100644 index 00000000..94b43f6b --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstdel.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlstdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 17:55:40 by jhalford #+# #+# */ +/* Updated: 2016/12/07 17:29:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_dlstdelback(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelback(&(*alst)->prev, del); + ft_dlstdelone(alst, del); + } +} + +static void ft_dlstdelfront(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelfront(&(*alst)->next, del); + ft_dlstdelone(alst, del); + } +} + +void ft_dlstdel(t_dlist **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_dlstdelback(&(*alst)->prev, del); + ft_dlstdelfront(&(*alst)->next, del); + ft_dlstdelone(alst, del); + } +} diff --git a/nmap/libft/srcs/dlst/ft_dlstdelone.c b/nmap/libft/srcs/dlst/ft_dlstdelone.c new file mode 100644 index 00000000..55826853 --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstdelone.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_delone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:13 by jhalford #+# #+# */ +/* Updated: 2016/11/14 17:52:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_dlstdelone(t_dlist **alst, void (*del)(void *, size_t)) +{ + t_dlist *tmp; + + tmp = *alst; + if (tmp) + { + if (del) + (*del)(tmp->content, tmp->content_size); + if (tmp->next) + tmp->next->prev = tmp->prev; + if (tmp->prev) + tmp->prev->next = tmp->next; + if (tmp->prev) + *alst = tmp->prev; + else + *alst = tmp->next; + free(tmp); + } +} diff --git a/nmap/libft/srcs/dlst/ft_dlstlast.c b/nmap/libft/srcs/dlst/ft_dlstlast.c new file mode 100644 index 00000000..1286c32c --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstlast.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_last.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:15 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_dlist *ft_dlstlast(t_dlist *list) +{ + while (list && list->next) + list = list->next; + return (list); +} diff --git a/nmap/libft/srcs/dlst/ft_dlstnew.c b/nmap/libft/srcs/dlst/ft_dlstnew.c new file mode 100644 index 00000000..411bffca --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstnew.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:20 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_dlist *ft_dlstnew(void const *content, size_t content_size) +{ + t_dlist *new; + + if (!content) + { + new = ft_malloc(sizeof(*new)); + if (!new) + return (NULL); + new->content_size = 0; + new->content = NULL; + } + else + { + new = (t_dlist *)ft_malloc(sizeof(*new)); + if (!new) + return (NULL); + new->content_size = content_size; + new->content = ft_memalloc(content_size + 1); + ft_memcpy(new->content, content, content_size); + } + new->next = NULL; + new->prev = NULL; + return (new); +} diff --git a/nmap/libft/srcs/dlst/ft_dlstrtostr.c b/nmap/libft/srcs/dlst/ft_dlstrtostr.c new file mode 100644 index 00000000..e92e4d8a --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstrtostr.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlstrtostr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:29 by jhalford #+# #+# */ +/* Updated: 2016/11/14 16:13:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_dlsttostr(t_dlist *list) +{ + char *str; + + if (!list) + return (NULL); + while (list->prev) + list = list->prev; + str = (char *)ft_strnew(sizeof(char) * (ft_dlstsize(list) + 2)); + while (list) + { + ft_strcat(str, (char *)list->content); + list = list->next; + } + return (str); +} diff --git a/nmap/libft/srcs/dlst/ft_dlstsize.c b/nmap/libft/srcs/dlst/ft_dlstsize.c new file mode 100644 index 00000000..b536efa2 --- /dev/null +++ b/nmap/libft/srcs/dlst/ft_dlstsize.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dlst_size.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:27:23 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:27:23 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_dlstsize(t_dlist *list) +{ + int size; + t_dlist *tmp; + + size = 0; + if (list) + size++; + tmp = list; + while (tmp->next) + { + size++; + tmp = tmp->next; + } + tmp = list; + while (tmp->prev) + { + size++; + tmp = tmp->prev; + } + return (size); +} diff --git a/nmap/libft/srcs/error/error.c b/nmap/libft/srcs/error/error.c new file mode 100644 index 00000000..6900c094 --- /dev/null +++ b/nmap/libft/srcs/error/error.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/14 16:47:00 by jhalford #+# #+# */ +/* Updated: 2017/03/25 01:53:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "error.h" + +char g_error_msglist[E_MAX][ERRMSG_MAX_SIZE] = +{ + "unknown error 0", + "invalid option -%c", + "invalid option --%s", + "option '%c' awaits argument(s): please don't combine", + "option '%c': missing argument", + "option '%s': missing argument", + "%s: no such file or directory", + "%s: Is a directory", + "%s: Permission denied", +}; + +int g_errnum = 0; +char *g_errmsg = NULL; +char **g_argv; + +int error_set(int n, ...) +{ + va_list ap; + + g_errnum = n; + va_start(ap, n); + ft_strdel(&g_errmsg); + ft_vasprintf(&g_errmsg, g_error_msglist[n], ap); + return (g_errnum); +} + +int ft_perror(char *utility) +{ + utility = utility ? utility : g_argv[0]; + ERR_MSG(utility, g_errmsg); + return (g_errnum); +} diff --git a/nmap/libft/srcs/error/ft_usage.c b/nmap/libft/srcs/error/ft_usage.c new file mode 100644 index 00000000..0c78fa12 --- /dev/null +++ b/nmap/libft/srcs/error/ft_usage.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_usage.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/02 15:08:56 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:31:29 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_usage(char *format, ...) +{ + va_list ap; + char *usage; + + va_start(ap, format); + usage = NULL; + ft_vasprintf(&usage, format, ap); + ft_dprintf(2, "usage: %s\n", usage); + ft_strdel(&usage); + exit(-1); +} diff --git a/nmap/libft/srcs/ft_printf/ft_conversion.c b/nmap/libft/srcs/ft_printf/ft_conversion.c new file mode 100644 index 00000000..99f0cc08 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_conversion.c @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_conversion.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:31:48 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +char *ft_signed_conversion(t_fmt *fmt, va_list ap) +{ + static char base10[] = "0123456789"; + long long arg; + + arg = va_arg(ap, int); + (void)fmt; + return (ft_lltoa_base(arg, base10, fmt->flags)); +} + +char *ft_unsigned_conversion(t_fmt *fmt, va_list ap) +{ + unsigned int uiarg; + unsigned long long ullarg; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + if (!*fmt->modifier + || ft_strequ(fmt->modifier, "hh") + || ft_strequ(fmt->modifier, "h") + || ft_strequ(fmt->modifier, "z")) + { + uiarg = va_arg(ap, int); + return (ft_uitoa_base(uiarg, g_convs[i].base)); + } + ullarg = va_arg(ap, long long); + return (ft_ulltoa_base(ullarg, g_convs[i].base)); +} + +char *ft_char_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + ret = (char *)ft_malloc(sizeof(char) + 1); + ret[0] = (char)va_arg(ap, int); + ret[1] = '\0'; + return (ret); +} + +char *ft_str_conversion(t_fmt *fmt, va_list ap) +{ + char *ret; + + (void)fmt; + ret = va_arg(ap, char *); + if (ret == NULL) + return (ft_strdup("NULL")); + ret = ft_strdup(ret); + if (fmt->precision && fmt->precision < (int)ft_strlen(ret)) + ret[fmt->precision] = '\0'; + return (ret); +} diff --git a/nmap/libft/srcs/ft_printf/ft_fmt_simplify.c b/nmap/libft/srcs/ft_printf/ft_fmt_simplify.c new file mode 100644 index 00000000..f35d2ffa --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_fmt_simplify.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt_validate.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:43 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:53:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_simplify(t_fmt *fmt) +{ + char hashtag; + + hashtag = '#'; + if (fmt->conversion == 'p') + { + fmt->conversion = 'x'; + if (!ft_strchr(fmt->flags, '#')) + ft_strncat(fmt->flags, &hashtag, 1); + } + if (ft_strchr("DOUCS", fmt->conversion)) + { + fmt->conversion += 32; + ft_strcpy(fmt->modifier, "l"); + } +} diff --git a/nmap/libft/srcs/ft_printf/ft_fmt_validate_conv.c b/nmap/libft/srcs/ft_printf/ft_fmt_validate_conv.c new file mode 100644 index 00000000..a10b619c --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_fmt_validate_conv.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_conv.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:55:36 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:55:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_fmt_validate_conv(t_fmt *fmt) +{ + if (!ft_strchr(ALL_CONVERSIONS, fmt->conversion)) + { + if (fmt->conversion != '%') + ft_fmt_error_conv(fmt->conversion); + return (1); + } + return (0); +} diff --git a/nmap/libft/srcs/ft_printf/ft_fmt_validate_flags.c b/nmap/libft/srcs/ft_printf/ft_fmt_validate_flags.c new file mode 100644 index 00000000..709e3c19 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_fmt_validate_flags.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_flags.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:53:07 by jhalford #+# #+# */ +/* Updated: 2017/03/05 15:19:35 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +static void ft_fmt_validate_flag_flag(t_fmt *fmt) +{ + char *flag_ptr; + + if (ft_strchr(fmt->flags, '+') && (flag_ptr = ft_strchr(fmt->flags, ' '))) + { + ft_fmt_error_flag_flag(' ', '+'); + *flag_ptr = '.'; + } + if (ft_strchr(fmt->flags, '-') && (flag_ptr = ft_strchr(fmt->flags, '0'))) + { + ft_fmt_error_flag_flag('0', '-'); + *flag_ptr = '.'; + } + if (fmt->precision && (flag_ptr = ft_strchr(fmt->flags, '0'))) + *flag_ptr = '.'; +} + +static void ft_fmt_validate_flag_conv(t_fmt *fmt) +{ + char *flag_ptr; + char flag; + int i; + + i = 0; + flag_ptr = fmt->flags; + while (fmt->conversion != g_convs[i].id) + i++; + while (*flag_ptr) + { + flag = *flag_ptr; + if (!ft_strchr(g_convs[i].allowed_flags, flag)) + { + ft_fmt_error_flag_conv(flag, fmt->conversion); + if (flag == '#') + *flag_ptr = '.'; + } + flag_ptr++; + } +} + +void ft_fmt_validate_flags(t_fmt *fmt) +{ + ft_fmt_validate_flag_conv(fmt); + ft_fmt_validate_flag_flag(fmt); +} diff --git a/nmap/libft/srcs/ft_printf/ft_fmt_validate_mod.c b/nmap/libft/srcs/ft_printf/ft_fmt_validate_mod.c new file mode 100644 index 00000000..e5cdb60e --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_fmt_validate_mod.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fmt_validate_conv.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 16:53:42 by jhalford #+# #+# */ +/* Updated: 2016/11/07 16:53:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_validate_mod(t_fmt *fmt) +{ + if (fmt->conversion == 's' || fmt->conversion == 'c') + if (fmt->modifier[0] && ft_strcmp(fmt->modifier, "l")) + ft_fmt_error_mod_conv(fmt->modifier, fmt->conversion); +} diff --git a/nmap/libft/srcs/ft_printf/ft_printf.c b/nmap/libft/srcs/ft_printf/ft_printf.c new file mode 100644 index 00000000..53b60560 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_printf.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:27 by jhalford #+# #+# */ +/* Updated: 2017/04/02 15:22:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_printf(const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vdprintf(1, format, ap)); +} + +int ft_dprintf(int fd, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vdprintf(fd, format, ap)); +} + +int ft_asprintf(char **ret, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + return (ft_vasprintf(ret, format, ap)); +} diff --git a/nmap/libft/srcs/ft_printf/ft_printf_color.c b/nmap/libft/srcs/ft_printf/ft_printf_color.c new file mode 100644 index 00000000..85995f46 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_printf_color.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf_color.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 18:07:39 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:51:32 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_stos g_colors[] = +{ + {"{red}", FG_RED}, + {"{gre}", FG_GREEN}, + {"{yel}", FG_YELLOW}, + {"{blu}", FG_BLUE}, + {"{mag}", FG_MAGENTA}, + {"{cya}", FG_CYAN}, + {"{bla}", FG_BLACK}, + {"{eoc}", FG_DEFAULT}, + {"{bol}", ON_BOLD}, + {"{und}", ON_UNDERLINED}, + {"{inv}", ON_INVERTED}, + {NULL, NULL}, +}; + +void ft_printf_color(char **final, char **str, va_list ap) +{ + int i; + + i = 0; + if (ft_strncmp(*str, "{ran}", 5) == 0) + { + i = va_arg(ap, int) % 6; + *final = ft_strjoin(*final, g_colors[i].val); + *str += 5; + return ; + } + while (g_colors[i].key) + { + if (ft_strncmp(*str, g_colors[i].key, 5) == 0) + { + *final = ft_strjoin(*final, g_colors[i].val); + *str += 5; + return ; + } + i++; + } +} diff --git a/nmap/libft/srcs/ft_printf/ft_printf_parse.c b/nmap/libft/srcs/ft_printf/ft_printf_parse.c new file mode 100644 index 00000000..14797fbf --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_printf_parse.c @@ -0,0 +1,123 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_parse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:24 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:55:08 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +static void ft_printf_parse_flags(t_fmt *fmt, char **format) +{ + int i; + char *str; + + i = 0; + str = *format; + while (str[i]) + { + if (ft_strchr(ALL_FLAGS, (int)str[i])) + { + if (!ft_strchr(fmt->flags, (int)str[i])) + ft_strncat(fmt->flags, str + i, 1); + } + else + break ; + i++; + } + *format += i; +} + +static void ft_printf_parse_width(t_fmt *fmt, char **format, va_list ap) +{ + int i; + char buf[10]; + char *str; + + i = 0; + str = *format; + if (str[i] == '*') + { + i++; + fmt->width = va_arg(ap, int); + } + else + { + ft_strcpy(buf, "0"); + while (ft_isdigit((int)(str[i]))) + ft_strncat(buf, str + i++, 1); + fmt->width = ft_atoi(buf); + } + *format += i; +} + +static void ft_printf_parse_precision(t_fmt *fmt, char **format, va_list ap) +{ + int i; + char buf[10]; + char *str; + + i = 0; + str = *format; + if (str[i] == '.') + { + if (str[++i] == '*') + { + i++; + fmt->precision = va_arg(ap, int); + } + else + { + ft_strcpy(buf, "0"); + while (ft_isdigit(str[i])) + ft_strncat(buf, str + i++, 1); + fmt->precision = ft_atoi(buf); + } + } + *format += i; +} + +static void ft_printf_parse_modifiers(t_fmt *fmt, char **format) +{ + char *str; + + str = *format; + if (str[0] == 'h' && str[1] == 'h') + ft_strcpy(fmt->modifier, "hh"); + else if (str[0] == 'h' && str[1] != 'h') + ft_strcpy(fmt->modifier, "h"); + else if (str[0] == 'l' && str[1] == 'l') + ft_strcpy(fmt->modifier, "ll"); + else if (str[0] == 'l' && str[1] != 'l') + ft_strcpy(fmt->modifier, "l"); + else if (str[0] == 'j') + ft_strcpy(fmt->modifier, "j"); + else if (str[0] == 'z') + ft_strcpy(fmt->modifier, "z"); + else + ft_strcpy(fmt->modifier, ""); + *format += ft_strlen(fmt->modifier); +} + +t_fmt *ft_printf_parse(char **format, va_list ap) +{ + t_fmt *fmt; + + fmt = ft_fmt_init(); + ft_printf_parse_flags(fmt, format); + ft_printf_parse_width(fmt, format, ap); + ft_printf_parse_precision(fmt, format, ap); + ft_printf_parse_modifiers(fmt, format); + fmt->conversion = **format; + (*format)++; + ft_fmt_validate_mod(fmt); + ft_fmt_validate_flags(fmt); + ft_fmt_simplify(fmt); + fmt->valid = ft_fmt_validate_conv(fmt) ? 0 : 1; + return (fmt); +} diff --git a/nmap/libft/srcs/ft_printf/ft_transform.c b/nmap/libft/srcs/ft_printf/ft_transform.c new file mode 100644 index 00000000..67abd6e1 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_transform.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_transform.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:32 by jhalford #+# #+# */ +/* Updated: 2017/03/20 10:26:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +char *ft_transform(t_fmt *fmt, va_list ap) +{ + char *ret; + int i; + + i = 0; + while (fmt->conversion != g_convs[i].id) + i++; + fmt->conv = g_convs[i]; + ret = (*fmt->conv.converter)(fmt, ap); + if (fmt->width > (int)ft_strlen(ret)) + ret = ft_realloc(ret, fmt->width + 5); + else + ret = ft_realloc(ret, ft_strlen(ret) + 3); + if (ft_strchr(fmt->flags, '-')) + ft_pad_right(ret, fmt); + else + ft_pad_left(ret, fmt); + return (ret); +} diff --git a/nmap/libft/srcs/ft_printf/ft_vprintf.c b/nmap/libft/srcs/ft_printf/ft_vprintf.c new file mode 100644 index 00000000..a2b8a96a --- /dev/null +++ b/nmap/libft/srcs/ft_printf/ft_vprintf.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_vprintf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:52:57 by jhalford #+# #+# */ +/* Updated: 2017/04/02 15:22:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_conv g_convs[] = +{ + {'d', "0- +", "0123456789", &ft_signed_conversion, NULL}, + {'i', "0- +", "0123456789", &ft_signed_conversion, NULL}, + {'u', "0-", "0123456789", &ft_unsigned_conversion, NULL}, + {'o', "#0-", "01234567", &ft_unsigned_conversion, &ft_pad_sharp_o}, + {'x', "#0-", "0123456789abcdef", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'X', "#0-", "0123456789ABCDEF", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'b', "#0-", "01", &ft_unsigned_conversion, &ft_pad_sharp_xb}, + {'s', "-", "", &ft_str_conversion, NULL}, + {'c', "-", "", &ft_char_conversion, NULL}, +}; + +int ft_vdprintf(int fd, const char *format, va_list ap) +{ + char *ret; + char size; + + ret = NULL; + size = ft_vasprintf(&ret, format, ap); + if (size != -1) + ft_putstr_fd(ret, fd); + ft_strdel(&ret); + return (size); +} + +int ft_vasprintf(char **ret, const char *format, va_list ap) +{ + char *str; + char *tmp; + char *final; + + str = (char *)format; + final = ft_strnew(1); + while (*str) + { + tmp = final; + if (*str == '{') + ft_printf_color(&final, &str, ap); + else if (*str == '%') + { + if (ft_fmtcalc(&final, &str, ap)) + return (-1); + } + else if (!(final = ft_strjoin(final, (char[]){*str++, 0}))) + return (-1); + ft_strdel(&tmp); + } + *ret = final; + return (ft_strlen(final)); +} + +int ft_fmtcalc(char **final, char **str, va_list ap) +{ + t_fmt *fmt; + char *transform; + + *str += 1; + if (!(fmt = ft_printf_parse(str, ap))) + return (1); + if (!fmt->valid) + ft_strncat(*final, &fmt->conversion, 1); + else + { + transform = ft_transform(fmt, ap); + *final = ft_strjoin(*final, transform); + ft_strdel(&transform); + } + free(fmt); + return (0); +} diff --git a/nmap/libft/srcs/ft_printf/lib_fmt.c b/nmap/libft/srcs/ft_printf/lib_fmt.c new file mode 100644 index 00000000..28b7313d --- /dev/null +++ b/nmap/libft/srcs/ft_printf/lib_fmt.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:35 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +t_fmt *ft_fmt_init(void) +{ + t_fmt *fmt; + + fmt = (t_fmt *)ft_malloc(sizeof(t_fmt) + 1); + ft_bzero(fmt->flags, 6); + ft_bzero(fmt->modifier, 3); + fmt->conversion = '\0'; + fmt->width = 0; + fmt->precision = 0; + fmt->valid = 0; + return (fmt); +} + +void ft_fmt_print(t_fmt *fmt) +{ + ft_putendl("\n---"); + ft_putstr("valid: "); + ft_putnbr(fmt->valid); + ft_putendl(""); + ft_putstr("conv.: "); + ft_putchar(fmt->conversion); + ft_putendl(""); + ft_putstr("flags: "); + ft_putendl(fmt->flags); + ft_putstr("width: "); + ft_putnbr(fmt->width); + ft_putendl(""); + ft_putstr("prec.: "); + ft_putnbr(fmt->precision); + ft_putendl(""); + ft_putstr("modifier: "); + ft_putendl(fmt->modifier); + ft_putendl("---"); +} diff --git a/nmap/libft/srcs/ft_printf/lib_fmt_error.c b/nmap/libft/srcs/ft_printf/lib_fmt_error.c new file mode 100644 index 00000000..a10954ff --- /dev/null +++ b/nmap/libft/srcs/ft_printf/lib_fmt_error.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_fmt_error.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:38 by jhalford #+# #+# */ +/* Updated: 2016/11/07 17:22:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_fmt_error_conv(char conv) +{ + ft_putstr("Warning: invalid or unsupported conversion specifier '"); + ft_putchar(conv); + ft_putendl("'"); +} + +void ft_fmt_error_mod_conv(char *mod, char conv) +{ + ft_putstr("warning: length modifier '"); + ft_putstr(mod); + ft_putstr("' results in undefined behaviour or no effect with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_conv(char flag, char conv) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag); + ft_putstr("' results in undefined behaviour with '"); + ft_putchar(conv); + ft_putendl("' conversion specifier"); +} + +void ft_fmt_error_flag_flag(char flag1, char flag2) +{ + ft_putstr("warning: flag '"); + ft_putchar(flag1); + ft_putstr("' is ignored when flag '"); + ft_putchar(flag2); + ft_putendl("' is present"); +} diff --git a/nmap/libft/srcs/ft_printf/lib_pad.c b/nmap/libft/srcs/ft_printf/lib_pad.c new file mode 100644 index 00000000..57da1c1b --- /dev/null +++ b/nmap/libft/srcs/ft_printf/lib_pad.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_pad.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:45 by jhalford #+# #+# */ +/* Updated: 2017/02/18 13:14:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_pad_right(char *str, t_fmt *fmt) +{ + if (ft_strchr(fmt->flags, '#')) + (fmt->conv.sharp_func)(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + ft_strcat(str, " "); +} + +void ft_pad_left(char *str, t_fmt *fmt) +{ + char sign; + + sign = 0; + if (str[0] == '-' || str[0] == '+' || str[0] == ' ') + { + sign = str[0]; + str++; + } + if (ft_strchr(fmt->flags, '0')) + while ((int)ft_strlen(str) < fmt->width - (sign ? 1 : 0)) + ft_strcatf(str, "0"); + if (sign) + str--; + if (ft_strchr(fmt->flags, '#')) + (fmt->conv.sharp_func)(str, fmt); + while ((int)ft_strlen(str) < fmt->width) + ft_strcatf(str, " "); +} diff --git a/nmap/libft/srcs/ft_printf/lib_pad_sharp.c b/nmap/libft/srcs/ft_printf/lib_pad_sharp.c new file mode 100644 index 00000000..5d065581 --- /dev/null +++ b/nmap/libft/srcs/ft_printf/lib_pad_sharp.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_pad_sharp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:33:48 by jhalford #+# #+# */ +/* Updated: 2017/03/20 15:54:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_pad_sharp_o(char *str, t_fmt *fmt) +{ + char buf[100]; + + (void)fmt; + ft_bzero(buf, 100); + if (str[0] != '0') + ft_strcatf(buf, "0"); +} + +void ft_pad_sharp_xb(char *str, t_fmt *fmt) +{ + char start[3]; + + start[0] = '0'; + start[1] = fmt->conversion; + start[2] = 0; + if (str[0] == '0') + { + if (str[1] == '0') + str[1] = fmt->conversion; + else + { + str[0] = fmt->conversion; + ft_strcatf(str, "0"); + } + } + else + ft_strcatf(str, start); +} diff --git a/nmap/libft/srcs/get_next_line/get_next_line.c b/nmap/libft/srcs/get_next_line/get_next_line.c new file mode 100644 index 00000000..3eed0dee --- /dev/null +++ b/nmap/libft/srcs/get_next_line/get_next_line.c @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/15 13:12:06 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" + +static int ft_fdcmp(t_save *a, int *b) +{ + return (a->fd - *b); +} + +static void ft_gnlfree(void *a, size_t size) +{ + (void)size; + ft_strdel(&((t_save*)a)->str); + free(a); +} + +static t_list *ft_newfd(t_list **head, int fd) +{ + t_save new; + + new.fd = fd; + new.str = ft_memalloc((BUFF_SIZE > 0 ? BUFF_SIZE : 0) + 1); + ft_lstadd(head, ft_lstnew(&new, sizeof(t_save))); + return (*head); +} + +static int ft_loop_read(int fd, char **line, char *save) +{ + char buf[BUFF_SIZE + 1]; + char *pos; + char *tmp; + int ret; + + while ((ret = read(fd, buf, BUFF_SIZE)) > 0) + { + buf[ret] = 0; + tmp = *line; + if ((pos = ft_strchr(buf, '\n'))) + { + ft_strcpy(save, pos + 1); + *pos = 0; + } + if (!(*line = ft_strjoin(*line, buf))) + return (-1); + ft_strdel(&tmp); + if (pos) + return (1); + } + if (ret < 0) + return (-1); + return (**line ? 1 : 0); +} + +int get_next_line(int const fd, char **line) +{ + static t_list *head; + t_list *tmp; + char *pos; + char *save; + int ret; + + if (fd < 0 || !line) + return (-1); + if (!(tmp = ft_lst_find(head, (void *)&fd, &ft_fdcmp))) + tmp = ft_newfd(&head, fd); + save = ((t_save*)tmp->content)->str; + if (!(*line = ft_strdup(save))) + return (-1); + ft_bzero(save, BUFF_SIZE + 1); + if ((pos = ft_strchr(*line, '\n'))) + { + ft_strcpy(save, pos + 1); + *pos = 0; + return (1); + } + if (!(ret = ft_loop_read(fd, line, save))) + ft_lst_delif(&head, (int *)&fd, ft_fdcmp, &ft_gnlfree); + return (ret); +} diff --git a/nmap/libft/srcs/lst/ft_id.c b/nmap/libft/srcs/lst/ft_id.c new file mode 100644 index 00000000..d5bac3fb --- /dev/null +++ b/nmap/libft/srcs/lst/ft_id.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_id.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:08:55 by jhalford #+# #+# */ +/* Updated: 2017/03/07 22:43:40 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_id(t_list *a) +{ + return (a); +} diff --git a/nmap/libft/srcs/lst/ft_lst2str.c b/nmap/libft/srcs/lst/ft_lst2str.c new file mode 100644 index 00000000..b985083d --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst2str.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst2str.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:18 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:53:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_lst2str(t_list *list) +{ + size_t size; + t_list *tmp; + char *new; + + size = 0; + tmp = list; + while (tmp) + { + size += ft_strlen((char *)tmp->content) + 1; + tmp = tmp->next; + } + new = ft_memalloc(size); + while (list) + { + ft_strcat(new, (char *)list->content); + if (list->next) + ft_strcat(new, " "); + list = list->next; + } + return (new); +} diff --git a/nmap/libft/srcs/lst/ft_lst_at.c b/nmap/libft/srcs/lst/ft_lst_at.c new file mode 100644 index 00000000..516c0147 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_at.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_at.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:18:48 by jhalford #+# #+# */ +/* Updated: 2017/06/21 18:33:52 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "lst.h" + +t_list *ft_lst_at(t_list *list, unsigned int nbr) +{ + unsigned int i; + + if (!list) + return (NULL); + i = 0; + while (i < nbr && list) + { + list = list->next; + i++; + } + return (list); +} diff --git a/nmap/libft/srcs/lst/ft_lst_bfree.c b/nmap/libft/srcs/lst/ft_lst_bfree.c new file mode 100644 index 00000000..82c6dec4 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_bfree.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_bfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 16:55:04 by jhalford #+# #+# */ +/* Updated: 2017/05/15 21:35:59 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_bfree(void *ptr, size_t size) +{ + t_list *lst; + + lst = ptr; + (void)size; + if (lst) + { + ft_strdel((char **)&lst->content); + free(lst); + } +} diff --git a/nmap/libft/srcs/lst/ft_lst_cfree.c b/nmap/libft/srcs/lst/ft_lst_cfree.c new file mode 100644 index 00000000..d70068ac --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_cfree.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_cfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:10 by jhalford #+# #+# */ +/* Updated: 2017/05/15 21:36:03 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_cfree(void *ptr, size_t size) +{ + (void)size; + if (ptr) + free(ptr); +} diff --git a/nmap/libft/srcs/lst/ft_lst_delif.c b/nmap/libft/srcs/lst/ft_lst_delif.c new file mode 100644 index 00000000..b14fcd85 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_delif.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_delif.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:12 by jhalford #+# #+# */ +/* Updated: 2017/06/22 17:16:50 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_delif( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = (*indirect); + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + } + else + indirect = &(*indirect)->next; + } +} diff --git a/nmap/libft/srcs/lst/ft_lst_delsub.c b/nmap/libft/srcs/lst/ft_lst_delsub.c new file mode 100644 index 00000000..b3912fc2 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_delsub.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_delsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:15 by jhalford #+# #+# */ +/* Updated: 2017/01/12 14:33:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_delsub( + t_list **alst, + t_list *sub, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, sub->content) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + sub = sub->next; + ft_lstdelone(&tmp, del); + } + indirect = &(*indirect)->next; + } +} diff --git a/nmap/libft/srcs/lst/ft_lst_filter.c b/nmap/libft/srcs/lst/ft_lst_filter.c new file mode 100644 index 00000000..cc528142 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_filter.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_filter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:17 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:34:15 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_filter( + t_list *lst, + void const *data_ref, + t_list *(*f)(t_list *elem, void const *)) +{ + t_list *out; + t_list *elem; + + out = NULL; + while (lst) + { + if (f) + elem = (*f)(lst, data_ref); + else + elem = lst; + elem = ft_lstnew(elem->content, elem->content_size); + ft_lsteadd(&out, elem); + lst = lst->next; + } + return (out); +} diff --git a/nmap/libft/srcs/lst/ft_lst_filterout.c b/nmap/libft/srcs/lst/ft_lst_filterout.c new file mode 100644 index 00000000..9a97c09d --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_filterout.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_filterout.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/26 16:56:02 by jhalford #+# #+# */ +/* Updated: 2017/03/26 19:10:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_filterout( + t_list **alst, + void *data_ref, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + } + else + indirect = &(*indirect)->next; + } +} diff --git a/nmap/libft/srcs/lst/ft_lst_find.c b/nmap/libft/srcs/lst/ft_lst_find.c new file mode 100644 index 00000000..da738ceb --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_find.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_find.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:20 by jhalford #+# #+# */ +/* Updated: 2017/06/21 18:20:30 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_find(t_list *begin_list, void *data_ref, int (*cmp)()) +{ + t_list *list_ptr; + + list_ptr = begin_list; + while (list_ptr) + { + if ((cmp)(list_ptr->content, data_ref) == 0) + return (list_ptr); + list_ptr = list_ptr->next; + } + return (NULL); +} diff --git a/nmap/libft/srcs/lst/ft_lst_merge.c b/nmap/libft/srcs/lst/ft_lst_merge.c new file mode 100644 index 00000000..f8160381 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_merge.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_merge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:50:32 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_merge(t_list **begin_list1, t_list *begin_list2) +{ + t_list *list_ptr; + + if (*begin_list1) + { + list_ptr = *begin_list1; + while (list_ptr->next) + list_ptr = list_ptr->next; + list_ptr->next = begin_list2; + } + else + *begin_list1 = begin_list2; +} diff --git a/nmap/libft/srcs/lst/ft_lst_order_delsub.c b/nmap/libft/srcs/lst/ft_lst_order_delsub.c new file mode 100644 index 00000000..5bf2067c --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_order_delsub.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_order_delsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:25 by jhalford #+# #+# */ +/* Updated: 2016/11/04 12:01:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_order_delsub( + t_list **alst, + t_list *sub, + int (*cmp)(), + void (*del)(void *, size_t)) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, sub->content) > 0) + { + sub = sub->next; + continue ; + } + if ((*cmp)((*indirect)->content, sub->content) == 0) + { + tmp = *indirect; + (*indirect) = (*indirect)->next; + ft_lstdelone(&tmp, del); + sub = sub->next; + } + indirect = &(*indirect)->next; + } +} diff --git a/nmap/libft/srcs/lst/ft_lst_pop.c b/nmap/libft/srcs/lst/ft_lst_pop.c new file mode 100644 index 00000000..1e22b0d7 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_pop.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_pop.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:30 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:53:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_pop(t_list **lst) +{ + t_list *top; + + top = *lst; + if (lst && *lst) + *lst = (*lst)->next; + return (top); +} diff --git a/nmap/libft/srcs/lst/ft_lst_print.c b/nmap/libft/srcs/lst/ft_lst_print.c new file mode 100644 index 00000000..18493eb3 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_print.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:27 by jhalford #+# #+# */ +/* Updated: 2017/05/16 21:00:09 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_print(t_list *list, void (*printer)()) +{ + while (list) + { + ft_putstr("["); + (*printer)(list->content); + ft_putstr("]->"); + list = list->next; + } + ft_putendl("X\n"); +} diff --git a/nmap/libft/srcs/lst/ft_lst_print2.c b/nmap/libft/srcs/lst/ft_lst_print2.c new file mode 100644 index 00000000..2016c78c --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_print2.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_print2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:29 by jhalford #+# #+# */ +/* Updated: 2017/05/16 21:00:19 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_print2(t_list *list, void (*printer)()) +{ + t_list *list2; + + while (list) + { + ft_putendl("---"); + list2 = *(t_list**)list->content; + while (list2) + { + ft_putstr("["); + (*printer)(*(int *)list2->content); + ft_putstr("]->"); + list2 = list2->next; + } + ft_putendl("X"); + ft_putendl("---"); + ft_putendl(" |"); + ft_putendl(" V"); + list = list->next; + } + ft_putendl(" X\n"); +} diff --git a/nmap/libft/srcs/lst/ft_lst_removeif.c b/nmap/libft/srcs/lst/ft_lst_removeif.c new file mode 100644 index 00000000..e27041d2 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_removeif.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_removeif.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:30 by jhalford #+# #+# */ +/* Updated: 2017/06/22 22:04:23 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lst_removeif(t_list **alst, void *data_ref, int (*cmp)()) +{ + t_list *tmp; + t_list **indirect; + + indirect = alst; + while (*indirect) + { + if ((*cmp)((*indirect)->content, data_ref) == 0) + { + tmp = (*indirect); + (*indirect) = (*indirect)->next; + tmp->next = NULL; + return (tmp); + } + indirect = &(*indirect)->next; + } + return (NULL); +} diff --git a/nmap/libft/srcs/lst/ft_lst_reverse.c b/nmap/libft/srcs/lst/ft_lst_reverse.c new file mode 100644 index 00000000..7765d598 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_reverse.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_list_reverse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/14 13:20:13 by jhalford #+# #+# */ +/* Updated: 2017/03/08 00:31:33 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_reverse(t_list **begin_list) +{ + t_list *new_start; + t_list *tmp; + + new_start = NULL; + while (*begin_list) + { + tmp = (*begin_list)->next; + (*begin_list)->next = new_start; + new_start = *begin_list; + *begin_list = tmp; + } + *begin_list = new_start; +} diff --git a/nmap/libft/srcs/lst/ft_lst_size.c b/nmap/libft/srcs/lst/ft_lst_size.c new file mode 100644 index 00000000..1f8c03b8 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_size.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_size.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:35 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int i; + + i = 0; + if (lst) + { + i = 1; + while (lst->next) + { + lst = lst->next; + i++; + } + } + return (i); +} diff --git a/nmap/libft/srcs/lst/ft_lst_sorted_insert.c b/nmap/libft/srcs/lst/ft_lst_sorted_insert.c new file mode 100644 index 00000000..f4821326 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_sorted_insert.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_sorted_insert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:39 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_sorted_insert(t_list **begin_list, t_list *insert, int (*cmp)()) +{ + t_list *link; + + link = *begin_list; + if (!link || (*cmp)(insert->content, link->content) < 0) + { + *begin_list = insert; + insert->next = link ? link : NULL; + return ; + } + while (link->next) + { + if ((*cmp)(insert->content, link->content) > 0 + && (*cmp)(insert->content, link->next->content) <= 0) + { + insert->next = link->next; + link->next = insert; + return ; + } + link = link->next; + } + link->next = insert; + insert->next = NULL; +} diff --git a/nmap/libft/srcs/lst/ft_lst_sorted_merge.c b/nmap/libft/srcs/lst/ft_lst_sorted_merge.c new file mode 100644 index 00000000..38308849 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lst_sorted_merge.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lst_sorted_merge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:40 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lst_sorted_merge( + t_list **begin_list1, + t_list *begin_list2, + int (*cmp)()) +{ + t_list *tail; + t_list *head1; + t_list *head2; + int comp; + + if (!*begin_list1 || !begin_list2) + { + *begin_list1 = begin_list2 ? begin_list2 : *begin_list1; + return ; + } + comp = (*cmp)(begin_list2->content, (*begin_list1)->content); + head1 = (comp < 0) ? *begin_list1 : (*begin_list1)->next; + head2 = (comp < 0) ? begin_list2->next : begin_list2; + *begin_list1 = (comp < 0) ? begin_list2 : *begin_list1; + tail = *begin_list1; + while (head1 && head2) + { + comp = (*cmp)(head2->content, head1->content); + tail->next = (comp < 0 ? head2 : head1); + head1 = comp < 0 ? head1 : head1->next; + head2 = comp < 0 ? head2->next : head2; + tail = tail->next; + } + tail->next = head2 ? head2 : head1; +} diff --git a/nmap/libft/srcs/lst/ft_lstadd.c b/nmap/libft/srcs/lst/ft_lstadd.c new file mode 100644 index 00000000..94d32d0d --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstadd.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:13 by jhalford #+# #+# */ +/* Updated: 2017/05/15 19:31:42 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd(t_list **alst, t_list *new) +{ + if (new) + { + new->next = *alst; + *alst = new; + } +} diff --git a/nmap/libft/srcs/lst/ft_lstdel.c b/nmap/libft/srcs/lst/ft_lstdel.c new file mode 100644 index 00000000..f63c3f6b --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 15:18:57 by jhalford #+# #+# */ +/* Updated: 2017/06/22 16:57:53 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdel(t_list **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst && del) + { + ft_lstdel(&(*alst)->next, del); + ft_lstdelone(alst, del); + } +} diff --git a/nmap/libft/srcs/lst/ft_lstdelone.c b/nmap/libft/srcs/lst/ft_lstdelone.c new file mode 100644 index 00000000..7b950442 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstdelone.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 13:39:33 by jhalford #+# #+# */ +/* Updated: 2017/06/22 22:36:02 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdelone(t_list **alst, void (*del)(void *, size_t)) +{ + if (alst && *alst) + { + if (del) + (*del)((*alst)->content, (*alst)->content_size); + free(*alst); + *alst = NULL; + } +} diff --git a/nmap/libft/srcs/lst/ft_lsteadd.c b/nmap/libft/srcs/lst/ft_lsteadd.c new file mode 100644 index 00000000..142f9660 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lsteadd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lsteadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:17 by jhalford #+# #+# */ +/* Updated: 2017/03/13 15:37:23 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lsteadd(t_list **alst, t_list *new) +{ + t_list *lst; + + lst = *alst; + if (lst) + { + while (lst->next) + lst = lst->next; + lst->next = new; + } + else + *alst = new; +} diff --git a/nmap/libft/srcs/lst/ft_lstiter.c b/nmap/libft/srcs/lst/ft_lstiter.c new file mode 100644 index 00000000..40ebc9c3 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstiter.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:19 by jhalford #+# #+# */ +/* Updated: 2017/05/16 17:18:12 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstiter(t_list *lst, int (*f)(), void *data) +{ + if (!lst) + return (0); + if ((*f)(lst->content, data)) + return (1); + return (ft_lstiter(lst->next, f, data)); +} diff --git a/nmap/libft/srcs/lst/ft_lstlast.c b/nmap/libft/srcs/lst/ft_lstlast.c new file mode 100644 index 00000000..addae8fc --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstlast.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:48 by jhalford #+# #+# */ +/* Updated: 2017/02/09 20:46:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (lst) + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/nmap/libft/srcs/lst/ft_lstmap.c b/nmap/libft/srcs/lst/ft_lstmap.c new file mode 100644 index 00000000..e0edbbaa --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstmap.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:21 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *)) +{ + t_list *elem; + + if (!lst) + return (NULL); + if (!(elem = (t_list *)ft_malloc(sizeof(*elem)))) + return (NULL); + elem->content = (*f)(lst->content); + elem->next = ft_lstmap(lst->next, f); + return (elem); +} diff --git a/nmap/libft/srcs/lst/ft_lstnadd.c b/nmap/libft/srcs/lst/ft_lstnadd.c new file mode 100644 index 00000000..3f542fad --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstnadd.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnadd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:51 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstnadd(t_list **alst, t_list *new, int n) +{ + t_list *lst; + int i; + + lst = *alst; + if (lst) + { + i = 0; + while (lst->next && i < n) + { + lst = lst->next; + i++; + } + while (lst->next) + lst = lst->next; + lst->next = new; + } + else + *alst = new; +} diff --git a/nmap/libft/srcs/lst/ft_lstnew.c b/nmap/libft/srcs/lst/ft_lstnew.c new file mode 100644 index 00000000..e72d9ab7 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 15:57:38 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void const *content, size_t content_size) +{ + t_list *new; + + if (!(new = (t_list *)ft_malloc(sizeof(*new)))) + return (NULL); + new->next = NULL; + new->content_size = content_size; + new->content = ft_memalloc(content_size + 1); + if (content) + ft_memcpy(new->content, content, content_size); + return (new); +} diff --git a/nmap/libft/srcs/lst/ft_lstnew_range.c b/nmap/libft/srcs/lst/ft_lstnew_range.c new file mode 100644 index 00000000..26632a3b --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstnew_range.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew_range.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:54 by jhalford #+# #+# */ +/* Updated: 2016/11/04 11:09:54 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew_range(int a, int b) +{ + t_list *lst; + + if (a >= b) + return (NULL); + lst = NULL; + while (a < b) + { + b--; + ft_lstadd(&lst, ft_lstnew(&b, sizeof(int))); + } + return (lst); +} diff --git a/nmap/libft/srcs/lst/ft_lstsort.c b/nmap/libft/srcs/lst/ft_lstsort.c new file mode 100644 index 00000000..950d6fd3 --- /dev/null +++ b/nmap/libft/srcs/lst/ft_lstsort.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:58 by jhalford #+# #+# */ +/* Updated: 2017/01/09 12:29:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstsort(t_list **begin_list, int (*cmp)()) +{ + t_list **indirect; + t_list *tmp; + t_list *tmp2; + + indirect = begin_list; + if (!*begin_list) + return ; + while (*indirect && (*indirect)->next) + { + if ((*cmp)((*indirect)->content, (*indirect)->next->content) > 0) + { + tmp = *indirect; + tmp2 = (*indirect)->next; + (*indirect)->next = (*indirect)->next->next; + *indirect = tmp2; + (*indirect)->next = tmp; + indirect = begin_list; + } + else + indirect = &(*indirect)->next; + } +} diff --git a/nmap/libft/srcs/lst/lst_insert_sort.c b/nmap/libft/srcs/lst/lst_insert_sort.c new file mode 100644 index 00000000..d1a62412 --- /dev/null +++ b/nmap/libft/srcs/lst/lst_insert_sort.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lst_insert_sort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/05/20 19:59:41 by ariard #+# #+# */ +/* Updated: 2017/05/20 20:05:32 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void lst_insert_sort(t_list **head, + int (cmp)()) +{ + t_list *new; + t_list *ptr; + + new = NULL; + while (*head) + { + ptr = *head; + *head = (*head)->next; + ft_lst_sorted_insert(&new, ptr, cmp); + } + *head = new; +} diff --git a/nmap/libft/srcs/lst/pop.c b/nmap/libft/srcs/lst/pop.c new file mode 100644 index 00000000..df3be22e --- /dev/null +++ b/nmap/libft/srcs/lst/pop.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* pop.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:09:56 by jhalford #+# #+# */ +/* Updated: 2017/03/24 20:05:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int pop(t_list **lst) +{ + t_list *top; + int item; + + top = *lst; + item = top ? *(int*)top->content : 0; + if (lst && *lst) + *lst = (*lst)->next; + ft_lstdelone(&top, ft_lst_cfree); + return (item); +} diff --git a/nmap/libft/srcs/lst/push.c b/nmap/libft/srcs/lst/push.c new file mode 100644 index 00000000..111b3505 --- /dev/null +++ b/nmap/libft/srcs/lst/push.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* push.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/09 15:59:39 by jhalford #+# #+# */ +/* Updated: 2017/03/02 20:59:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *push(t_list **stack, int elem) +{ + ft_lstadd(stack, ft_lstnew(&elem, sizeof(elem))); + return (*stack); +} diff --git a/nmap/libft/srcs/lst/top.c b/nmap/libft/srcs/lst/top.c new file mode 100644 index 00000000..2c3186e2 --- /dev/null +++ b/nmap/libft/srcs/lst/top.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* top.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/24 20:04:27 by jhalford #+# #+# */ +/* Updated: 2017/03/24 20:09:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int top(t_list *top) +{ + return (top ? *(int*)top->content : 0); +} diff --git a/nmap/libft/srcs/math/ft_addrcmp.c b/nmap/libft/srcs/math/ft_addrcmp.c new file mode 100644 index 00000000..5c430c71 --- /dev/null +++ b/nmap/libft/srcs/math/ft_addrcmp.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_addrcmp.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/14 15:59:10 by jhalford #+# #+# */ +/* Updated: 2017/01/11 16:28:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_addrcmp(void *a, void *b) +{ + return (a - b); +} diff --git a/nmap/libft/srcs/math/ft_ilen.c b/nmap/libft/srcs/math/ft_ilen.c new file mode 100644 index 00000000..bbce37b5 --- /dev/null +++ b/nmap/libft/srcs/math/ft_ilen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ilen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:53:53 by jhalford #+# #+# */ +/* Updated: 2017/02/18 15:41:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_ilen(int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/nmap/libft/srcs/math/ft_ilen_base.c b/nmap/libft/srcs/math/ft_ilen_base.c new file mode 100644 index 00000000..3c6f9ae4 --- /dev/null +++ b/nmap/libft/srcs/math/ft_ilen_base.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ilen_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:53:53 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:45:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_ilen_base(int n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} diff --git a/nmap/libft/srcs/math/ft_itoa.c b/nmap/libft/srcs/math/ft_itoa.c new file mode 100644 index 00000000..b1342f1c --- /dev/null +++ b/nmap/libft/srcs/math/ft_itoa.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:10 by jhalford #+# #+# */ +/* Updated: 2017/03/07 12:08:47 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} + +char *ft_itoa(int n) +{ + int i; + char *str; + int neg; + + i = 0; + str = ft_strnew(ft_size(n) + 1); + neg = FT_NEG(n) ? 1 : 0; + if (n == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (n) + { + str[i++] = FT_ABS(n % 10) + '0'; + n /= 10; + } + if (neg) + str[i++] = '-'; + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/nmap/libft/srcs/math/ft_itoa_base.c b/nmap/libft/srcs/math/ft_itoa_base.c new file mode 100644 index 00000000..edc60b46 --- /dev/null +++ b/nmap/libft/srcs/math/ft_itoa_base.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:51 by jhalford #+# #+# */ +/* Updated: 2017/01/22 16:38:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static char *ft_flags(char *str, int *i, char *flags, int neg) +{ + if (neg) + str[*i++] = '-'; + else if (ft_strchr(flags, '+')) + str[*i++] = '+'; + else if (ft_strchr(flags, ' ')) + str[*i++] = ' '; + return (str); +} + +char *ft_itoa_base(int nbr, char *base, char *flags) +{ + int i; + int neg; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_ilen_base(nbr, base_size) + 1); + neg = FT_NEG(nbr); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[FT_ABS(nbr % base_size)]; + nbr = nbr / base_size; + } + str = ft_flags(str, &i, flags, neg); + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/nmap/libft/srcs/math/ft_lllen.c b/nmap/libft/srcs/math/ft_lllen.c new file mode 100644 index 00000000..4ef07cc8 --- /dev/null +++ b/nmap/libft/srcs/math/ft_lllen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lllen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:45:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_lllen(long long n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/nmap/libft/srcs/math/ft_lllen_base.c b/nmap/libft/srcs/math/ft_lllen_base.c new file mode 100644 index 00000000..74b934eb --- /dev/null +++ b/nmap/libft/srcs/math/ft_lllen_base.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lllen_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 14:46:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_lllen_base(long long n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} diff --git a/nmap/libft/srcs/math/ft_lltoa_base.c b/nmap/libft/srcs/math/ft_lltoa_base.c new file mode 100644 index 00000000..69d31aff --- /dev/null +++ b/nmap/libft/srcs/math/ft_lltoa_base.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lltoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:10:42 by jhalford #+# #+# */ +/* Updated: 2017/02/18 15:23:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static char *ft_flags(char *str, int *i, char *flags, int neg) +{ + if (neg) + str[(*i)++] = '-'; + else if (ft_strchr(flags, '+')) + str[(*i)++] = '+'; + else if (ft_strchr(flags, ' ')) + str[(*i)++] = ' '; + return (str); +} + +char *ft_lltoa_base(long long nbr, char *base, char *flags) +{ + int i; + int neg; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_lllen_base(nbr, base_size) + 1); + neg = FT_NEG(nbr); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[FT_ABS(nbr % base_size)]; + nbr = nbr / base_size; + } + str = ft_flags(str, &i, flags, neg); + str[i] = 0; + ft_strrev(str); + return (str); +} diff --git a/nmap/libft/srcs/math/ft_uilen.c b/nmap/libft/srcs/math/ft_uilen.c new file mode 100644 index 00000000..9e87ca1f --- /dev/null +++ b/nmap/libft/srcs/math/ft_uilen.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_uilen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:52:35 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:54:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_uilen(unsigned int n) +{ + size_t i; + + i = 1; + while (n /= 10) + i++; + return (i); +} diff --git a/nmap/libft/srcs/math/ft_uitoa_base.c b/nmap/libft/srcs/math/ft_uitoa_base.c new file mode 100644 index 00000000..a09cb11e --- /dev/null +++ b/nmap/libft/srcs/math/ft_uitoa_base.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_uitoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:08:10 by jhalford #+# #+# */ +/* Updated: 2016/11/07 13:10:35 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(unsigned int n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} + +char *ft_uitoa_base(unsigned int nbr, char *base) +{ + int i; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_size(nbr, base_size) + 1); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[nbr % base_size]; + nbr = nbr / base_size; + } + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/nmap/libft/srcs/math/ft_ulltoa_base.c b/nmap/libft/srcs/math/ft_ulltoa_base.c new file mode 100644 index 00000000..5a5a3675 --- /dev/null +++ b/nmap/libft/srcs/math/ft_ulltoa_base.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ulltoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 13:07:50 by jhalford #+# #+# */ +/* Updated: 2017/02/18 16:07:02 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static size_t ft_size(unsigned long long n, int base) +{ + size_t i; + + i = 1; + while (n /= base) + i++; + return (i); +} + +char *ft_ulltoa_base(unsigned long long nbr, char *base) +{ + int i; + int base_size; + char *str; + + i = 0; + base_size = ft_strlen(base); + str = ft_strnew(ft_size(nbr, base_size) + 1); + if (nbr == 0) + { + str[i++] = '0'; + str[i] = '\0'; + return (str); + } + while (nbr) + { + str[i++] = base[nbr % base_size]; + nbr = nbr / base_size; + } + str[i] = '\0'; + return (ft_strrev(str)); +} diff --git a/nmap/libft/srcs/math/id.c b/nmap/libft/srcs/math/id.c new file mode 100644 index 00000000..e23a5831 --- /dev/null +++ b/nmap/libft/srcs/math/id.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* id.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 12:20:59 by jhalford #+# #+# */ +/* Updated: 2017/03/20 12:21:01 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *id(void *data) +{ + return (data); +} diff --git a/nmap/libft/srcs/mem/ft_bzero.c b/nmap/libft/srcs/mem/ft_bzero.c new file mode 100644 index 00000000..6f1834b5 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_bzero.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:56:08 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:56:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + size_t i; + + i = -1; + while (++i < n) + *(char *)s++ = 0; +} diff --git a/nmap/libft/srcs/mem/ft_malloc.c b/nmap/libft/srcs/mem/ft_malloc.c new file mode 100644 index 00000000..bb1b9b54 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_malloc.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_malloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/21 15:45:00 by jhalford #+# #+# */ +/* Updated: 2017/03/23 18:31:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_malloc(size_t size) +{ + void *ptr; + + ptr = malloc(size); + if (!ptr) + { + ft_putstr_fd(strerror(errno), 2); + exit(errno); + } + return (ptr); +} diff --git a/nmap/libft/srcs/mem/ft_memalloc.c b/nmap/libft/srcs/mem/ft_memalloc.c new file mode 100644 index 00000000..c2908094 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memalloc.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memalloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:25 by jhalford #+# #+# */ +/* Updated: 2017/06/22 21:51:30 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memalloc(size_t size) +{ + void *addr; + size_t i; + + addr = ft_malloc(size); + if (addr == NULL) + return (NULL); + i = -1; + while (++i < size) + ((char *)addr)[i] = 0; + return (addr); +} diff --git a/nmap/libft/srcs/mem/ft_memccpy.c b/nmap/libft/srcs/mem/ft_memccpy.c new file mode 100644 index 00000000..ee5d8071 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memccpy.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memccpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:26 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:36:13 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memccpy(void *dst, const void *src, int c, size_t n) +{ + size_t i; + + i = -1; + while (++i < n) + { + *(char *)dst++ = *(char *)src; + if (*(char *)src++ == c) + return (dst); + } + return (NULL); +} diff --git a/nmap/libft/srcs/mem/ft_memchr.c b/nmap/libft/srcs/mem/ft_memchr.c new file mode 100644 index 00000000..96ddf009 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:28 by jhalford #+# #+# */ +/* Updated: 2016/11/11 17:41:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + void *a; + size_t i; + + i = -1; + a = (unsigned char *)s; + while (++i < n) + { + if (*(unsigned char *)a == (unsigned char)c) + return (a); + a++; + } + return (NULL); +} diff --git a/nmap/libft/srcs/mem/ft_memcmp.c b/nmap/libft/srcs/mem/ft_memcmp.c new file mode 100644 index 00000000..9dd827ee --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memcmp.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:30 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:44:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + size_t i; + int cmp; + + i = -1; + while (++i < n) + { + cmp = *(unsigned char *)s1++ - *(unsigned char *)s2++; + if (cmp) + return (cmp); + } + return (cmp); +} diff --git a/nmap/libft/srcs/mem/ft_memcpy.c b/nmap/libft/srcs/mem/ft_memcpy.c new file mode 100644 index 00000000..a8edafaa --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:31 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:39:36 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + char *c1; + char *c2; + + if (n == 0 || dst == src) + return (dst); + c1 = (char *)dst; + c2 = (char *)src; + while (--n) + *c1++ = *c2++; + *c1 = *c2; + return (dst); +} diff --git a/nmap/libft/srcs/mem/ft_memdel.c b/nmap/libft/srcs/mem/ft_memdel.c new file mode 100644 index 00000000..59a18066 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:33 by jhalford #+# #+# */ +/* Updated: 2017/03/20 16:19:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_memdel(void **ap) +{ + if (ap && *ap) + { + free(*ap); + *ap = NULL; + } +} diff --git a/nmap/libft/srcs/mem/ft_memmove.c b/nmap/libft/srcs/mem/ft_memmove.c new file mode 100644 index 00000000..904d1aca --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memmove.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:34 by jhalford #+# #+# */ +/* Updated: 2016/11/11 17:41:14 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + char *srcc; + char *dstc; + size_t i; + + i = -1; + srcc = (char *)src; + dstc = (char *)dst; + if (srcc < dstc) + while ((int)(--len) >= 0) + *(dstc + len) = *(srcc + len); + else + while (++i < len) + *(dstc + i) = *(srcc + i); + return (dst); +} diff --git a/nmap/libft/srcs/mem/ft_memset.c b/nmap/libft/srcs/mem/ft_memset.c new file mode 100644 index 00000000..b99906e2 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_memset.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:36 by jhalford #+# #+# */ +/* Updated: 2017/03/06 15:39:24 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + size_t i; + + i = -1; + while (++i < len) + ((unsigned char *)b)[i] = (unsigned char)c; + return (b); +} diff --git a/nmap/libft/srcs/mem/ft_realloc.c b/nmap/libft/srcs/mem/ft_realloc.c new file mode 100644 index 00000000..33f667a8 --- /dev/null +++ b/nmap/libft/srcs/mem/ft_realloc.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_realloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/11 17:37:53 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_realloc(void *data, int size) +{ + void *new; + + new = ft_memalloc(size); + ft_memcpy(new, data, ft_strlen(data)); + ft_memdel(&data); + return (new); +} diff --git a/nmap/libft/srcs/net/cksum.c b/nmap/libft/srcs/net/cksum.c new file mode 100644 index 00000000..fa61a3ad --- /dev/null +++ b/nmap/libft/srcs/net/cksum.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* cksum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 12:45:43 by jhalford #+# #+# */ +/* Updated: 2017/10/08 12:48:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +unsigned short cksum(const void *b, size_t len) +{ + unsigned int sum; + + sum = 0; + while (len > 1) + { + sum += *((uint16_t*)b++); + b++; + len -= 2; + } + if (len == 1) + sum += *(uint8_t*)b; + while (sum >> 16) sum = (sum & 0xFFFF)+(sum >> 16); + return (~sum); +} diff --git a/nmap/libft/srcs/net/create_client.c b/nmap/libft/srcs/net/create_client.c new file mode 100644 index 00000000..7a9cae0b --- /dev/null +++ b/nmap/libft/srcs/net/create_client.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_client.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:59:28 by jhalford #+# #+# */ +/* Updated: 2017/10/26 16:59:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int create_client(char *addr, int port, char *protoname) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname(protoname))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = inet_addr(addr); + if (connect(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + return (sock); +} + +void listener(int domain, int sock, int proto, + void (*handler)(void *buf, int bytes, struct sockaddr_in *addr)) +{ + int sd; + struct sockaddr_in addr; + unsigned char buf[1024]; + int bytes; + socklen_t len; + + len = sizeof(addr); + sd = socket(domain, sock, proto); + if (sd < 0) + { + perror("listener socket"); + exit(0); + } + while (1) + { + bzero(buf, sizeof(buf)); + bytes = recvfrom(sd, buf, sizeof(buf), 0, + (struct sockaddr*)&addr, &len); + if (bytes > 0 && handler) + handler(buf, bytes, &addr); + else + perror("recvfrom"); + } + exit(0); +} diff --git a/nmap/libft/srcs/net/create_server.c b/nmap/libft/srcs/net/create_server.c new file mode 100644 index 00000000..be766e5d --- /dev/null +++ b/nmap/libft/srcs/net/create_server.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_server.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:51 by jhalford #+# #+# */ +/* Updated: 2017/10/26 17:03:11 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int create_server(int port, int backlog, char *protoname) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname(protoname))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = htonl(INADDR_ANY); + if (bind(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + listen(sock, backlog); + return (sock); +} diff --git a/nmap/libft/srcs/net/host.c b/nmap/libft/srcs/net/host.c new file mode 100644 index 00000000..34ec7909 --- /dev/null +++ b/nmap/libft/srcs/net/host.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* host.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 15:47:45 by jhalford #+# #+# */ +/* Updated: 2017/10/08 15:58:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +int host_format(struct sockaddr *addr) +{ + char dn[1024]; + char sv[20]; + char ip[INET_ADDRSTRLEN]; + + if (getnameinfo(addr, sizeof(*addr), dn, sizeof(dn), + sv, sizeof(sv), 0)) + { + perror("getnameinfo"); + return (1); + } + printf(" %s (%s)", dn, + inet_ntop(AF_INET, &(((struct sockaddr_in*)addr)->sin_addr), + ip, INET_ADDRSTRLEN)); + return (0); +} diff --git a/nmap/libft/srcs/net/ip.c b/nmap/libft/srcs/net/ip.c new file mode 100644 index 00000000..e3584952 --- /dev/null +++ b/nmap/libft/srcs/net/ip.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* forge_ip.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:39 by jhalford #+# #+# */ +/* Updated: 2017/10/24 12:44:35 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +void ip_hdrinit(struct ip *header) +{ + memset(header, 0, sizeof(*header)); + header->ip_v = 4; + header->ip_hl = 5; + header->ip_tos = 0; + header->ip_len = 0; + header->ip_id = ntohl(epoch_micro()); + header->ip_off = 0; + header->ip_ttl = 255; + header->ip_p = 0; + header->ip_sum = 0; + memset(&header->ip_src, 0, sizeof(struct in_addr)); + memset(&header->ip_dst, 0, sizeof(struct in_addr)); +} + +void ip_load_icmp(struct icmp *icmp, void *buf) +{ + struct ip *ip; + int hlen; + + ip = buf; + hlen = ip->ip_hl << 2; + ft_memcpy(icmp, buf + hlen, sizeof(struct icmp)); +} diff --git a/nmap/libft/srcs/net/net_get.c b/nmap/libft/srcs/net/net_get.c new file mode 100644 index 00000000..e75b58ad --- /dev/null +++ b/nmap/libft/srcs/net/net_get.c @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net_get.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:59:19 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:59:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int net_get(int sock, char *msg, int size) +{ + int ack; + + ack = htons(ACK); + if (read(sock, msg, size) < 0) + return (-1); + if (write(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + return (0); +} + +int net_get_fd(int sock, int fd, int size) +{ + int ack; + char msg[size]; + + ack = htons(ACK); + if (read(sock, msg, size) < 0) + return (-1); + if (write(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + if (write(fd, msg, size) < 0) + return (-1); + return (0); +} + +int net_get_large(int sock, int fd) +{ + int i; + int num_blks; + int num_last_blk; + + net_get(sock, (char*)&num_blks, sizeof(num_blks)); + net_get(sock, (char*)&num_last_blk, sizeof(num_last_blk)); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_get_fd(sock, fd, NET_MAXSIZE); + if (num_last_blk) + net_get_fd(sock, fd, num_last_blk); + return (0); +} diff --git a/nmap/libft/srcs/net/net_send.c b/nmap/libft/srcs/net/net_send.c new file mode 100644 index 00000000..c9a026a1 --- /dev/null +++ b/nmap/libft/srcs/net/net_send.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* net_send.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:03:19 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:03:31 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int net_send(int sock, char *msg, int size) +{ + int ack; + + if (write(sock, msg, size) < 0) + return (-1); + if (read(sock, (char*)&ack, sizeof(ack)) < 0) + return (-1); + if (ntohs(ack) != ACK) + return (1); + return (0); +} + +int net_send_large(int sock, char *msg, int size) +{ + int i; + int num_blks; + int num_last_blk; + + num_blks = htons(size / NET_MAXSIZE + 1); + num_last_blk = htons(size % NET_MAXSIZE); + if (net_send(sock, (char*)&num_blks, sizeof(num_blks))) + return (1); + if (net_send(sock, (char*)&num_last_blk, sizeof(num_blks))) + return (1); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_send(sock, msg + i * NET_MAXSIZE, NET_MAXSIZE); + if (num_last_blk) + net_send(sock, msg + i * NET_MAXSIZE, num_last_blk); + return (0); +} diff --git a/nmap/libft/srcs/net/prettypacket.c b/nmap/libft/srcs/net/prettypacket.c new file mode 100644 index 00000000..277c0a40 --- /dev/null +++ b/nmap/libft/srcs/net/prettypacket.c @@ -0,0 +1,707 @@ +/* + * prettypacket.c + * + * Created on: 03/dec/2012 + * Author: Acri Emanuele + * + * Disassemble network packet and print their fields. + * Uses the stdin to receive raw packet data. Prints on stdout. + */ + +#include +#include +#include + +#include "prettypacket.h" + +#define VERSION "1.5" + +#define BUFFER_SIZE 8192 +/** + * Byte multiplier: a printed byte uses 3 characters + */ +#define BYTE_MULT 3 + +/** + * Packet type arguments + */ +enum packet_type { + no_type = 0, + tcp, + udp, + icmp, + igmp, + arp, + stp +}; + +/** + * List of available colors + */ +static const char *colors[] = { + /// Black + "\\e[0;30m", + /// Red + "\\e[0;31m", + /// Green + "\\e[0;32m", + /// Yellow + "\\e[0;33m", + /// Blue + "\\e[0;34m", + /// Purple + "\\e[0;35m", + /// Cyan + "\\e[0;36m", + /// White + "\\e[0;37m", +}; + +/** + * Default terminal columns + */ +static const int cols = 80; + +/* +** Packets disassembling loop +** layer 2: isl, llc1, llc2, ethenet or payload +** layer 3: IPv4, IPv6, arp or payload +** layer 4: icmp, igmp, tcp, udp or payload +*/ +int prettypacket(void *pkt, size_t size) +{ + + layer_2_dispatcher(pkt, size, 0); + puts("\n ----------- "); + fflush(stdout); + return 0; +} + +/** + * Return the successive color iterating on colors + * + * @return pointer to the next color string + */ +const char *next_color() { + static int total_colors = sizeof(colors)/sizeof(char *); + static int index = -1; + + return colors[ (++index) % total_colors ]; +} + +/** + * Extract protocol number (8bit version) + * + * @param packet_buffer raw packet captured from the network + * @param counter protocol number offset + * @return protocol number in host format + */ +static inline uint8_t protocol_8bit_extract(const char *packet_buffer, int counter) { + return *(packet_buffer + counter); +} + +/** + * Extract protocol number (16bit version) + * + * @param packet_buffer raw packet captured from the network + * @param counter protocol number offset + * @return protocol number in host format + */ +static inline uint16_t protocol_16bit_extract(const char *packet_buffer, int counter) { + return ntohs(*((uint16_t *)(packet_buffer + counter))); +} + +/** + * Extract protocol type from ethernet Destination MAC Address (48bit) + * @param packet_buffer raw packet captured from the network + * @param counter protocol number offset + * @return protocol number in host format + */ +static inline uint64_t protocol_48bit_extract(const char *packet_buffer, int counter) { + uint64_t value = 0; + + int i; + for(i=0; i < 6; i++) { + uint8_t byte = *((uint8_t *)(packet_buffer + counter + i)); + + value = byte + (value * 256); + } + + return value; +} + +/** + * Diplay a single field of an header + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param field_size size in bytes of the field to print + * @param counter read bytes counter + * @param field_text description of the field + */ +static inline void field_print (const char *packet_buffer, int field_size, + int *counter, const char *field_text) { + + char *tmp_hexstr = raw_to_hexstr(packet_buffer + *counter, field_size); + + printf(" %-24s %s", tmp_hexstr, field_text); + if (strstr(field_text, "port") && field_size == 2) + { + short port = *(short*)(packet_buffer + *counter); + char service[20]; + struct sockaddr sa; + + ((struct sockaddr_in *)&sa)->sin_family = AF_INET; + ((struct sockaddr_in *)&sa)->sin_port = port; + getnameinfo(&sa, sizeof sa, NULL, 0, service, sizeof service, 0); + printf(" (%s)", service); + } + printf("\n"); + free(tmp_hexstr); + *counter += field_size; +} + +/** + * Print the payload part of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void payload_print (const char *packet_buffer, int size) { + + if (size < 1) { + return; + } + + puts("\nPayload or Trailer:"); + + int bytes_per_row = cols / BYTE_MULT; + + int i, j=0; + + // new line + while (j < size) { + + // bytes in the line + for (i = 0; (i < bytes_per_row) && (j < size); i++, j++) { // columns + char str[BYTE_MULT]; + + hex_to_str(packet_buffer[j], str); + + printf(" %s", str); + } + + puts(""); + } + +} + +/** + * Print the TCP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void tcp_print(const char *packet_buffer, int size) { + int counter = 0; + unsigned short check = cksum(packet_buffer, 20); + if (check == 0) + printf("\nTCP Header: (20 bytes), cksum OK\n"); + else + printf("\nTCP Header: (20 bytes), cksum incorrect, malformed packet! (%x)\n", check); + + if (size < 8) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 2, &counter, "Source port"); + field_print(packet_buffer, 2, &counter, "Destination port"); + field_print(packet_buffer, 4, &counter, "Sequence number"); + field_print(packet_buffer, 4, &counter, "Acknowledgement number"); + field_print(packet_buffer, 1, &counter, "Header length"); + field_print(packet_buffer, 1, &counter, "Flags"); + field_print(packet_buffer, 2, &counter, "Window"); + field_print(packet_buffer, 2, &counter, "Checksum"); + field_print(packet_buffer, 2, &counter, "Urgent pointer"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the UDP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void udp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nUDP Header: (8 bytes)"); + + if (size < 8) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 2, &counter, "Source port"); + field_print(packet_buffer, 2, &counter, "Destination port"); + field_print(packet_buffer, 2, &counter, "Length"); + field_print(packet_buffer, 2, &counter, "Checksum"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the ICMP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void icmp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nICMP Header:"); + + if (size < 8) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 1, &counter, "Type"); + field_print(packet_buffer, 1, &counter, "Code"); + field_print(packet_buffer, 2, &counter, "Checksum"); + field_print(packet_buffer, 2, &counter, "ID"); + field_print(packet_buffer, 2, &counter, "Sequence number"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the IGMP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void igmp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nIGMP Header:"); + + if (size < 8) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 1, &counter, "Type"); + field_print(packet_buffer, 1, &counter, "Max response time"); + field_print(packet_buffer, 2, &counter, "Checksum"); + field_print(packet_buffer, 4, &counter, "Group address"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the IP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void ip_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nIP Header:"); + + if (size < 20) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 1, &counter, "Version / Header length"); + field_print(packet_buffer, 1, &counter, "ToS / DFS"); + field_print(packet_buffer, 2, &counter, "Total length"); + field_print(packet_buffer, 2, &counter, "ID"); + field_print(packet_buffer, 2, &counter, "Flags / Fragment offset"); + field_print(packet_buffer, 1, &counter, "TTL"); + + int next_protocol = protocol_8bit_extract(packet_buffer, counter); + field_print(packet_buffer, 1, &counter, "Protocol"); + + field_print(packet_buffer, 2, &counter, "Checksum"); + field_print(packet_buffer, 4, &counter, "Source address"); + field_print(packet_buffer, 4, &counter, "Destination address"); + + // go up to the next layer + layer_4_dispatcher(packet_buffer + counter, size - counter, next_protocol); +} + +/** + * Print the ARP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void arp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nARP Header:"); + + if (size < 28) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 2, &counter, "Hardware type"); + field_print(packet_buffer, 2, &counter, "Protocol type"); + + int hs = *(packet_buffer + counter); + field_print(packet_buffer, 1, &counter, "Hardware size"); + + int ps = *(packet_buffer + counter); + field_print(packet_buffer, 1, &counter, "Protocol size"); + + field_print(packet_buffer, 2, &counter, "Opcode"); + + field_print(packet_buffer, hs, &counter, "Sender hardware address"); + field_print(packet_buffer, ps, &counter, "Sender protocol address"); + field_print(packet_buffer, hs, &counter, "Target hardware address"); + field_print(packet_buffer, ps, &counter, "Target protocol address"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the ETHERNET header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void ethernet_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nEthernet Header:"); + + if (size < 14) { + puts (" invalid header size"); + return; + } + + // print header fields + uint64_t dst_mac = protocol_48bit_extract(packet_buffer, counter); + field_print(packet_buffer, 6, &counter, "Destination hardware address"); + field_print(packet_buffer, 6, &counter, "Source hardware address"); + + int next_protocol = protocol_16bit_extract(packet_buffer, counter); + field_print(packet_buffer, 2, &counter, "Lenght/Type"); + + /* + * if the last field value is less or equal to 1500 is a lenght + * otherwise is a protocol type (check IEEE 802.3 documentation...) + */ + + if (next_protocol > 1500) { + + // go up to the next layer + layer_3_dispatcher(packet_buffer + counter, size - counter, next_protocol); + + } else { + + // remain on the same layer + layer_2_dispatcher(packet_buffer + counter, size - counter, dst_mac); + + } +} + +/** + * Print the ISL header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void isl_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nISL Header:"); + + if (size < 30) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 5, &counter, "Destination"); + + + int next_protocol = protocol_8bit_extract(packet_buffer, counter); + next_protocol >>= 4; + + field_print(packet_buffer, 1, &counter, "Type/User"); + field_print(packet_buffer, 6, &counter, "Source"); + field_print(packet_buffer, 2, &counter, "Length"); + field_print(packet_buffer, 1, &counter, "DSAP"); + field_print(packet_buffer, 1, &counter, "SSAP"); + field_print(packet_buffer, 1, &counter, "Control"); + field_print(packet_buffer, 3, &counter, "HSA"); + field_print(packet_buffer, 2, &counter, "Vlan ID/BPDU"); + field_print(packet_buffer, 2, &counter, "Index"); + field_print(packet_buffer, 2, &counter, "RES"); + + /* + * Note: we subtrack 4 to the size of the packet to exclude + * the final frame check sequence + */ + + if (next_protocol == 0) { + + // go up to the next layer + ethernet_print(packet_buffer + counter, size - counter - 4); + + } else { + + // go up to the next layer + payload_print(packet_buffer + counter, size - counter - 4); + + } + + counter = size - 4; + + puts("\nISL Header (end):"); + + field_print(packet_buffer, 4, &counter, "Frame check seq."); +} + +/** + * Print the DTP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void dtp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nDinamic Trunking Protocol Header:"); + + if (size < 29) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 1, &counter, "Version"); + field_print(packet_buffer, 8, &counter, "Domain"); + + field_print(packet_buffer, 5, &counter, "Status"); + field_print(packet_buffer, 5, &counter, "DTP Type"); + + field_print(packet_buffer, 8, &counter, "Neighbor"); + field_print(packet_buffer, 2, &counter, ""); // splitted since too long... + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the STP header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void stp_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nSpanning Tree Protocol Header:"); + + if (size < 38) { + puts (" invalid header size"); + return; + } + + // print header fields + field_print(packet_buffer, 2, &counter, "Protocol Identifier"); + field_print(packet_buffer, 1, &counter, "Protocol Version Identifier"); + + field_print(packet_buffer, 1, &counter, "BPDU Type"); + field_print(packet_buffer, 1, &counter, "BPDU Flags"); + + field_print(packet_buffer, 2, &counter, "Root Priority/System ID Extension"); + field_print(packet_buffer, 6, &counter, "Root System ID"); + + field_print(packet_buffer, 4, &counter, "Root Path Cost"); + + field_print(packet_buffer, 2, &counter, "Bridge Priority/System ID Extension"); + field_print(packet_buffer, 6, &counter, "Bridge System ID"); + + field_print(packet_buffer, 2, &counter, "Port Identifier"); + field_print(packet_buffer, 2, &counter, "Message Age"); + field_print(packet_buffer, 2, &counter, "Max Age"); + field_print(packet_buffer, 2, &counter, "Hello Time"); + field_print(packet_buffer, 2, &counter, "Forward Delay"); + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); +} + +/** + * Print the LLC header of the packet + * + * @param packet_buffer raw packet captured from the network, starting at the part to process + * @param size packet_buffer size + */ +void llc_print (const char *packet_buffer, int size) { + int counter = 0; + + puts("\nLogical-Link Control Header:"); + + if (size < 3) { + puts (" invalid header size"); + return; + } + + // print header fields + int dsap = protocol_8bit_extract(packet_buffer, counter); + field_print(packet_buffer, 1, &counter, "DSAP"); + + int ssap = protocol_8bit_extract(packet_buffer, counter); + field_print(packet_buffer, 1, &counter, "SSAP"); + + field_print(packet_buffer, 1, &counter, "Control field"); + + if (dsap == 0x42 && ssap == 0x42) { + + // spanning tree protocol + stp_print(packet_buffer + counter, size - counter); + + } else if (dsap == 0xaa && ssap == 0xaa) { + + if (size < 8) { + puts (" invalid header size"); + return; + } + + // continue printing LLC fields + field_print(packet_buffer, 3, &counter, "Organization code"); + + int pid = protocol_16bit_extract(packet_buffer, counter); + field_print(packet_buffer, 2, &counter, "PID"); + + if (pid == 0x2004) { + + // dinamic trunking protocol + dtp_print(packet_buffer + counter, size - counter); + + } else { + + // print remaining payload + payload_print(packet_buffer + counter, size - counter); + + } + + } + +} + +/** + * Determine the packet type and call the appropriate function to disassemble it. + * Operates on layer 2 (OSI model) packet's headers. + * + * @param packet_buffer raw packet captured from the network, starting at layer 2 + * @param size packet_buffer size + * @param protocol protocol number + */ +void layer_2_dispatcher (const char *packet_buffer, int size, uint64_t protocol) { + + uint64_t llc1 = 0x0180C20000LLU, llc2 = 0x01000CCCCCCCLLU; + + if (size < 1) { + return; + } + + if (memcmp(packet_buffer, "\x01\x00\x0C\x00\x00", 5)==0 || + memcmp(packet_buffer, "\x03\x00\x0c\x00\x00", 5)==0 ) { + + isl_print(packet_buffer, size); + + } else if ((protocol / 256) == llc1) { + + llc_print(packet_buffer, size); // spanning tree + + } else if (protocol == llc2) { + + llc_print(packet_buffer, size); + + } else { + + ethernet_print(packet_buffer, size); + + } +} + +/** + * Determine the packet type and call the appropriate function to disassemble it. + * Operates on layer 3 (OSI model) packet's headers. + * + * @param packet_buffer raw packet captured from the network, starting at layer 3 + * @param size packet_buffer size + * @param protocol protocol number + */ +void layer_3_dispatcher (const char *packet_buffer, int size, uint64_t protocol) { + + if (size < 1) { + return; + } + + /* + * if the last field value (of an ethernet header) is less or equal to 1500 + * then is a lenght otherwise is a protocol type (check IEEE 802.3 documentation...) + */ + + if (protocol <= 0xffff) { // check if it's a 16bit field + // (i.e. last ethernet field was a protocol) + switch (protocol) { + + case 0x0800: ip_print(packet_buffer, size); break; + case 0x0806: arp_print(packet_buffer, size); break; + + default: payload_print(packet_buffer, size); + + } + + } else { + payload_print(packet_buffer, size); + } + +} + +/** + * Determine the packet type and call the appropriate function to disassemble it. + * Operates on layer 4 (OSI model) packet's headers. + * + * @param packet_buffer raw packet captured from the network, starting at layer 4 + * @param size packet_buffer size + * @param protocol protocol number + */ +void layer_4_dispatcher (const char *packet_buffer, int size, uint64_t protocol) { + + if (size < 1) { + return; + } + + switch (protocol) { + case 1: icmp_print(packet_buffer, size); break; + case 2: igmp_print(packet_buffer, size); break; + case 6: tcp_print(packet_buffer, size); break; + case 17: udp_print(packet_buffer, size); break; + default: payload_print(packet_buffer, size); + } +} + diff --git a/nmap/libft/srcs/net/reserve_port.c b/nmap/libft/srcs/net/reserve_port.c new file mode 100644 index 00000000..6c3bf493 --- /dev/null +++ b/nmap/libft/srcs/net/reserve_port.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* reserve_port.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:55 by jhalford #+# #+# */ +/* Updated: 2017/10/24 17:30:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +int reserve_port(int s, struct sockaddr *sa) +{ + unsigned short i; + + i = 49152; + while (i < 65535) + { + ((struct sockaddr_in*)sa)->sin_port = htons(i); + if (bind(s, sa, sizeof(sa)) == 0) + return (0); + ++i; + } + return (1); +} diff --git a/nmap/libft/srcs/net/tcp.c b/nmap/libft/srcs/net/tcp.c new file mode 100644 index 00000000..9205d75e --- /dev/null +++ b/nmap/libft/srcs/net/tcp.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* forge_tcp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 18:02:34 by jhalford #+# #+# */ +/* Updated: 2017/10/24 20:24:09 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "net.h" + +void tcp_hdrinit(struct tcphdr *header) +{ + memset(header, 0, sizeof(*header)); + header->th_sport = htons(0); + header->th_dport = htons(0); + /* header->th_seq = epoch_micro(); */ + header->th_seq = 0; + header->th_ack = 0; + header->th_off = 5; + header->th_flags = 0; + header->th_win = htons(1024); + header->th_sum = 0; + header->th_urp = 0; +} diff --git a/nmap/libft/srcs/path/ft_path_notdir.c b/nmap/libft/srcs/path/ft_path_notdir.c new file mode 100644 index 00000000..b59044f3 --- /dev/null +++ b/nmap/libft/srcs/path/ft_path_notdir.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_path_notdir.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/04 11:45:07 by jhalford #+# #+# */ +/* Updated: 2017/03/25 15:03:39 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_path_notdir(char *path) +{ + char *slash; + char *ret; + + ret = path; + if ((slash = ft_strrchr(path, '/')) && slash != path) + ret = slash + 1; + return (ret); +} diff --git a/nmap/libft/srcs/printing/ft_putchar.c b/nmap/libft/srcs/printing/ft_putchar.c new file mode 100644 index 00000000..b607cf9a --- /dev/null +++ b/nmap/libft/srcs/printing/ft_putchar.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:37 by jhalford #+# #+# */ +/* Updated: 2016/11/04 13:11:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putchar_fd(int c, int fd) +{ + return (write(fd, &c, 1)); +} + +int ft_putchar(int c) +{ + return (write(1, &c, 1)); +} diff --git a/nmap/libft/srcs/printing/ft_putendl.c b/nmap/libft/srcs/printing/ft_putendl.c new file mode 100644 index 00000000..615c929f --- /dev/null +++ b/nmap/libft/srcs/printing/ft_putendl.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:40 by jhalford #+# #+# */ +/* Updated: 2017/02/20 18:17:01 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putendl_fd(char const *s, int fd) +{ + char nl; + int ret; + + nl = '\n'; + if ((ret = write(fd, s, ft_strlen(s)))) + return (ret); + return (write(fd, &nl, 1)); +} + +int ft_putendl(char const *s) +{ + return (ft_putendl_fd(s, 1)); +} diff --git a/nmap/libft/srcs/printing/ft_putnbr.c b/nmap/libft/srcs/printing/ft_putnbr.c new file mode 100644 index 00000000..e0850ba8 --- /dev/null +++ b/nmap/libft/srcs/printing/ft_putnbr.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/02 21:25:03 by jhalford #+# #+# */ +/* Updated: 2017/02/18 17:47:04 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putnbr_loop(long n, int base, int fd) +{ + if (n >= base) + ft_putnbr_loop(n / base, base, fd); + return (ft_putchar_fd("0123456789abcdef"[n % base], fd)); +} + +int ft_putnbr_hex_fd(long n, int fd) +{ + ft_putstr_fd("0x", fd); + return (ft_putnbr_loop(n, 16, fd)); +} + +int ft_putnbr_fd(long n, int fd) +{ + if (n < 0) + ft_putchar_fd('-', fd); + n = FT_ABS(n); + return (ft_putnbr_loop(n, 10, fd)); +} + +int ft_putnbr_hex(long n) +{ + return (ft_putnbr_hex_fd(n, 1)); +} + +int ft_putnbr(long n) +{ + return (ft_putnbr_fd(n, 1)); +} diff --git a/nmap/libft/srcs/printing/ft_putstr.c b/nmap/libft/srcs/printing/ft_putstr.c new file mode 100644 index 00000000..985f1a99 --- /dev/null +++ b/nmap/libft/srcs/printing/ft_putstr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/03 16:13:07 by jhalford #+# #+# */ +/* Updated: 2016/08/25 17:03:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_putstr_fd(char const *s, int fd) +{ + return (write(fd, s, ft_strlen(s))); +} + +int ft_putstr(char const *s) +{ + return (write(1, s, ft_strlen(s))); +} diff --git a/nmap/libft/srcs/printing/hexdump.c b/nmap/libft/srcs/printing/hexdump.c new file mode 100644 index 00000000..cdb9588d --- /dev/null +++ b/nmap/libft/srcs/printing/hexdump.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* hexdump.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:56:14 by jhalford #+# #+# */ +/* Updated: 2017/10/24 14:33:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "libft.h" + +static void print_hex_contents(void *addr, unsigned int size) +{ + void *a; + + a = addr; + while (a - addr < 16) + { + if ((a - addr) >= size) + break ; + else + ft_printf("%02x", *(unsigned char*)a); + ft_putchar(' '); + a++; + } +} + +void *hexdump(void *addr, unsigned int offset, unsigned int size) +{ + void *a; + + addr += offset; + a = addr; + if (addr == NULL) + return (addr); + while ((a - addr) < size) + { + ft_printf("%0*llx\t", 16, (a - addr) + (unsigned long)offset); + print_hex_contents(a, (size - (a - addr))); + ft_putchar('\n'); + a += 16; + } + return (addr); +} diff --git a/nmap/libft/srcs/rs/rs.c b/nmap/libft/srcs/rs/rs.c new file mode 100644 index 00000000..7e83bdff --- /dev/null +++ b/nmap/libft/srcs/rs/rs.c @@ -0,0 +1,62 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* rs.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:57:54 by jhalford #+# #+# */ +/* Updated: 2017/10/07 18:19:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include + +struct s_stats g_rs = {0, 0, 0, 0, 0, 0, 0}; + +double sqrt(double x); + +void rs_clear(void) +{ + g_rs.count = 0; + g_rs.min = DBL_MAX; + g_rs.max = -DBL_MAX; +} + +void rs_push(double n) +{ + double delta; + + g_rs.count++; + n < g_rs.min ? g_rs.min = n : (0); + n > g_rs.max ? g_rs.max = n : (0); + if (g_rs.count == 1) + { + g_rs.avg = n; + g_rs.m = 0; + } + else + { + delta = n - g_rs.avg; + g_rs.avg += delta / g_rs.count; + g_rs.m += delta * (n - g_rs.avg); + } +} + +void rs_calcmore(void) +{ + if (g_rs.count == 0) + { + g_rs.min = 0; + g_rs.max = 0; + } + if (g_rs.count < 2) + { + g_rs.var = 0; + g_rs.stdev = 0; + return ; + } + g_rs.var = g_rs.m / (g_rs.count - 1); + g_rs.stdev = sqrt(g_rs.var); +} diff --git a/nmap/libft/srcs/sstr/ft_sstradd.c b/nmap/libft/srcs/sstr/ft_sstradd.c new file mode 100644 index 00000000..c81a256d --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstradd.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstradd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:58 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:43:51 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstradd(char **sstr, char *new) +{ + int size; + char **newlist; + + size = 0; + if (sstr) + while (sstr[size]) + size++; + if (!(newlist = (char **)ft_memalloc(sizeof(char *) * (size + 2)))) + return (NULL); + if (sstr) + ft_memcpy(newlist, sstr, sizeof(char*) * size); + newlist[size] = ft_strdup(new); + newlist[size + 1] = NULL; + free(sstr); + return (newlist); +} diff --git a/nmap/libft/srcs/sstr/ft_sstrcat.c b/nmap/libft/srcs/sstr/ft_sstrcat.c new file mode 100644 index 00000000..313fc24d --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrcat.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/10 16:58:06 by jhalford #+# #+# */ +/* Updated: 2016/12/10 17:03:27 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_sstrcat(char **sstr, char sep) +{ + int len; + int i; + char *out; + + i = 0; + len = 0; + if (!sstr) + return (NULL); + while (sstr[i]) + len += ft_strlen(sstr[i++]); + if (!(out = ft_strnew(sizeof(char) * (len + i + 1)))) + return (NULL); + ft_strcpy(out, sstr[0]); + i = 1; + while (sstr[i]) + { + ft_strcat(out, (char[]){sep, 0}); + ft_strcat(out, sstr[i++]); + } + return (out); +} diff --git a/nmap/libft/srcs/sstr/ft_sstrdel.c b/nmap/libft/srcs/sstr/ft_sstrdel.c new file mode 100644 index 00000000..403fcf00 --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrdel.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:04:07 by jhalford #+# #+# */ +/* Updated: 2017/03/25 01:38:51 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrdel(char **sstr, int index) +{ + int i; + + i = index; + ft_strdel(&sstr[index]); + while (i == index || sstr[i]) + { + sstr[i] = sstr[i + 1]; + ++i; + } +} diff --git a/nmap/libft/srcs/sstr/ft_sstrdup.c b/nmap/libft/srcs/sstr/ft_sstrdup.c new file mode 100644 index 00000000..8517a125 --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrdup.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 14:25:45 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstrdup(char **list) +{ + int i; + int size; + char **cpy; + + i = 0; + size = 0; + while (list[size]) + size++; + cpy = (char **)ft_malloc(sizeof(char *) * (size + 1)); + while (*list) + { + cpy[i++] = ft_strdup(*list); + list++; + } + cpy[i] = NULL; + return (cpy); +} diff --git a/nmap/libft/srcs/sstr/ft_sstrfree.c b/nmap/libft/srcs/sstr/ft_sstrfree.c new file mode 100644 index 00000000..7855228d --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrfree.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/05 11:53:36 by jhalford #+# #+# */ +/* Updated: 2017/03/22 23:19:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrfree(char **sstr) +{ + int i; + + i = 0; + if (sstr) + { + while (sstr[i]) + { + ft_strdel(sstr + i); + i++; + } + ft_strdel(sstr + i); + free(sstr); + } +} diff --git a/nmap/libft/srcs/sstr/ft_sstrmerge.c b/nmap/libft/srcs/sstr/ft_sstrmerge.c new file mode 100644 index 00000000..2705a285 --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrmerge.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrmerge.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/24 17:40:50 by jhalford #+# #+# */ +/* Updated: 2017/03/24 18:05:08 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char **ft_sstrmerge(char **s1, char **s2) +{ + char **out; + + out = ft_sstrdup(s1); + if (!s2) + return (out); + while (*s2) + { + out = ft_sstradd(out, *s2); + s2++; + } + return (out); +} diff --git a/nmap/libft/srcs/sstr/ft_sstrprint.c b/nmap/libft/srcs/sstr/ft_sstrprint.c new file mode 100644 index 00000000..1ebc0f5e --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 15:17:33 by jhalford #+# #+# */ +/* Updated: 2016/11/28 15:18:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrprint(char **list, char sep) +{ + ft_sstrprint_fd(STDOUT, list, sep); +} diff --git a/nmap/libft/srcs/sstr/ft_sstrprint_fd.c b/nmap/libft/srcs/sstr/ft_sstrprint_fd.c new file mode 100644 index 00000000..42225b7c --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrprint_fd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrprint_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 15:17:29 by jhalford #+# #+# */ +/* Updated: 2017/03/18 03:37:16 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrprint_fd(int fd, char **list, char sep) +{ + int i; + + i = 0; + if (!list || !*list) + return ; + while (list[i]) + { + ft_putstr_fd(list[i++], fd); + if (list[i]) + ft_putchar_fd(sep, fd); + } +} diff --git a/nmap/libft/srcs/sstr/ft_sstrsort.c b/nmap/libft/srcs/sstr/ft_sstrsort.c new file mode 100644 index 00000000..25cf4134 --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrsort.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrsort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:37 by jhalford #+# #+# */ +/* Updated: 2017/03/23 14:40:25 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_sstrsort(char **list, int (*cmp)()) +{ + int i; + char *tmp; + + i = 0; + while (list[i] && list[i + 1]) + { + if ((*cmp)(list[i], list[i + 1]) > 0) + { + tmp = list[i]; + list[i] = list[i + 1]; + list[i + 1] = tmp; + i = 0; + } + else + i++; + } +} diff --git a/nmap/libft/srcs/sstr/ft_sstrstr.c b/nmap/libft/srcs/sstr/ft_sstrstr.c new file mode 100644 index 00000000..d6618563 --- /dev/null +++ b/nmap/libft/srcs/sstr/ft_sstrstr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sstrstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 11:29:54 by ariard #+# #+# */ +/* Updated: 2017/03/22 21:54:40 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_sstrstr(char **sstr, char *find) +{ + int size; + + if (!sstr) + return (NULL); + size = ft_strlen(find); + while ((*sstr)) + { + if (ft_strncmp(*sstr, find, size) == 0) + return (*sstr); + sstr++; + } + return (NULL); +} diff --git a/nmap/libft/srcs/str/ft_atoi.c b/nmap/libft/srcs/str/ft_atoi.c new file mode 100644 index 00000000..546c58f6 --- /dev/null +++ b/nmap/libft/srcs/str/ft_atoi.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/03 16:17:21 by jhalford #+# #+# */ +/* Updated: 2017/03/22 22:21:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_iswhitespace(char c) +{ + if (c == ' ' || c == '\t' || c == '\n') + return (1); + else if (c == '\v' || c == '\f' || c == '\r') + return (1); + return (0); +} + +int ft_atoi(const char *str) +{ + int i; + int res; + int sign; + + if (!str || !*str) + return (0); + i = 0; + res = 0; + sign = 1; + while (ft_iswhitespace(str[i])) + i++; + if (str[i] == '-' || str[i] == '+') + { + if (str[i + 1] >= '0' && str[i + 1] <= '9') + { + sign = (str[i] == '+') ? 1 : -1; + i++; + } + else + return (0); + } + while (str[i] >= '0' && str[i] <= '9') + res = res * 10 + str[i++] - '0'; + res *= sign; + return (res); +} diff --git a/nmap/libft/srcs/str/ft_convert_base.c b/nmap/libft/srcs/str/ft_convert_base.c new file mode 100644 index 00000000..633a82ef --- /dev/null +++ b/nmap/libft/srcs/str/ft_convert_base.c @@ -0,0 +1,86 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 23:31:20 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:03:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int get_size(char *str) +{ + int i; + int j; + + i = 0; + while (str[i] != '\0') + { + if (str[i] == '+' || str[i] == '-') + return (0); + if (str[i] < 32 || str[i] > 126) + return (0); + j = 0; + while (j < i) + { + if (str[j] == str[i]) + return (0); + j++; + } + i++; + } + return (i); +} + +static int get_pos(char c, char *str) +{ + int i; + + i = 0; + while (c != str[i] && str[i]) + i++; + return (i); +} + +static int ft_check_str(char *str, char *base, int base_size) +{ + while (*str) + { + if (!(get_pos(*str, base) < base_size || *str == '-' || *str == '+')) + return (0); + str++; + } + return (1); +} + +char *ft_convert_base( + char *str, char *base_from, char *base_to, char *flags) +{ + int base_size; + int res; + int sign; + + base_size = get_size(base_from); + res = 0; + sign = 1; + if (!ft_check_str(str, base_from, base_size)) + return (ft_itoa_base(0, "0", flags)); + if (base_size > 1) + { + if (*str == '-' || *str == '+') + { + if (get_pos(*(str + 1), base_from) < base_size) + sign = (*str == '+') ? 1 : -1; + else + return (ft_itoa_base(0, "0", flags)); + str++; + } + while (get_pos(*str, base_from) < base_size) + res = res * base_size + sign * get_pos(*str++, base_from); + } + return (ft_itoa_base(res, base_to, flags)); +} diff --git a/nmap/libft/srcs/str/ft_putaddr_fd.c b/nmap/libft/srcs/str/ft_putaddr_fd.c new file mode 100644 index 00000000..a6c52a37 --- /dev/null +++ b/nmap/libft/srcs/str/ft_putaddr_fd.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putaddr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/18 18:47:04 by jhalford #+# #+# */ +/* Updated: 2017/02/18 18:48:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putaddr_fd(void *a, int fd) +{ + char out[19]; + unsigned long long addr; + int i; + + ft_putnbr((long)a); + ft_putchar('\n'); + addr = (unsigned long long)a; + out[18] = 0; + i = 17; + while (addr) + { + ft_putnbr(addr); + ft_putchar('\n'); + out[i--] = "0123456789ABCDEF"[addr % 16]; + addr /= 16; + } + out[i--] = 'x'; + out[i] = '0'; + ft_putstr_fd(out + i, fd); +} diff --git a/nmap/libft/srcs/str/ft_split_whitespaces.c b/nmap/libft/srcs/str/ft_split_whitespaces.c new file mode 100644 index 00000000..ed744d0d --- /dev/null +++ b/nmap/libft/srcs/str/ft_split_whitespaces.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split_whitespaces.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/02/03 16:07:17 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdupi_w(char const *s) +{ + int i; + char *str; + + i = 0; + while (s[i] && s[i] != ' ' && s[i] != '\t') + i++; + str = (char *)ft_malloc(sizeof(char) * (i + 1)); + if (str) + { + str[i--] = '\0'; + while (i >= 0) + { + str[i] = s[i]; + i--; + } + } + return (str); +} + +static int ft_len_words(char const *s) +{ + int i; + int len; + + i = 0; + len = 0; + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + len++; + i++; + } + return (len); +} + +char **ft_split_whitespaces(char const *s) +{ + int i; + char **str; + int j; + + str = NULL; + if (!(s)) + return (str); + str = (char **)ft_malloc(sizeof(char *) * (ft_len_words(s) + 1)); + i = 0; + j = 0; + if (!(str)) + return (str); + while (s[i]) + { + if ((i == 0 && s[i] != ' ' && s[i] != '\t') || ((s[i] != ' ' + && s[i] != '\t') && (s[i - 1] == ' ' || s[i - 1] == '\t'))) + { + str[j] = ft_strdupi_w((s + i)); + j++; + } + i++; + } + str[j] = NULL; + return (str); +} diff --git a/nmap/libft/srcs/str/ft_str3join.c b/nmap/libft/srcs/str/ft_str3join.c new file mode 100644 index 00000000..91384cbc --- /dev/null +++ b/nmap/libft/srcs/str/ft_str3join.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_str3join.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:03:26 by jhalford #+# #+# */ +/* Updated: 2017/03/13 16:07:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_str3join(char const *s1, char const *s2, char const *s3) +{ + char *join; + int size; + + size = ft_strlen(s1) + ft_strlen(s2) + ft_strlen(s3); + join = ft_strnew(size + 1); + ft_strcpy(join, s1); + ft_strcat(join, s2); + ft_strcat(join, s3); + return (join); +} diff --git a/nmap/libft/srcs/str/ft_strappend.c b/nmap/libft/srcs/str/ft_strappend.c new file mode 100644 index 00000000..2e52529d --- /dev/null +++ b/nmap/libft/srcs/str/ft_strappend.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strappend.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/13 12:16:31 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:50:12 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strappend(char **dst, char *src) +{ + char *out; + + if (!(out = ft_strjoin(*dst, src))) + return (-1); + ft_strdel(dst); + *dst = out; + return (0); +} diff --git a/nmap/libft/srcs/str/ft_strbetween.c b/nmap/libft/srcs/str/ft_strbetween.c new file mode 100644 index 00000000..7492077e --- /dev/null +++ b/nmap/libft/srcs/str/ft_strbetween.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strbetween.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/11 16:26:44 by jhalford #+# #+# */ +/* Updated: 2017/01/12 14:54:17 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strbetween(char *start, char *end) +{ + char *out; + + out = ft_strnew(end - start + 1); + ft_strncpy(out, start, end - start); + return (out); +} diff --git a/nmap/libft/srcs/str/ft_strcat.c b/nmap/libft/srcs/str/ft_strcat.c new file mode 100644 index 00000000..76f6f25c --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcat.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:56:53 by jhalford #+# #+# */ +/* Updated: 2017/03/21 14:21:22 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcat(char *s1, const char *s2) +{ + char *start; + + start = s1; + s1 += ft_strlen(s1); + if (s2) + while (*s2) + *s1++ = *s2++; + *s1 = 0; + return (start); +} diff --git a/nmap/libft/srcs/str/ft_strcatf.c b/nmap/libft/srcs/str/ft_strcatf.c new file mode 100644 index 00000000..8caa7036 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcatf.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcatf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/07 15:46:03 by jhalford #+# #+# */ +/* Updated: 2016/12/09 19:02:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcatf(char *s1, const char *s2) +{ + char buf[ft_strlen(s1) + 1]; + + ft_strcpy(buf, s1); + ft_strcpy(s1, s2); + ft_strcat(s1, buf); + return (s1); +} diff --git a/nmap/libft/srcs/str/ft_strchr.c b/nmap/libft/srcs/str/ft_strchr.c new file mode 100644 index 00000000..c2ad43f6 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strchr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:53 by jhalford #+# #+# */ +/* Updated: 2017/02/20 16:43:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + char *a; + + if (!s) + return (NULL); + a = (char *)s; + while (*a) + { + if (*a == (char)c) + return (a); + a++; + } + if (*a == (char)c) + return (a); + return (NULL); +} diff --git a/nmap/libft/srcs/str/ft_strchrcpy.c b/nmap/libft/srcs/str/ft_strchrcpy.c new file mode 100644 index 00000000..06b88879 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strchrcpy.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchrcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 15:43:59 by ariard #+# #+# */ +/* Updated: 2017/03/07 11:08:55 by ariard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strchrcpy(char *dst, const char *src, char c) +{ + while (*src && *src != c) + *dst++ = *src++; + *dst = '\0'; + return (dst); +} diff --git a/nmap/libft/srcs/str/ft_strclr.c b/nmap/libft/srcs/str/ft_strclr.c new file mode 100644 index 00000000..834eb6f1 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strclr.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strclr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:57:54 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:57:55 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strclr(char *s) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + s[i] = 0; +} diff --git a/nmap/libft/srcs/str/ft_strcmp.c b/nmap/libft/srcs/str/ft_strcmp.c new file mode 100644 index 00000000..de85d971 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcmp.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:49:02 by jhalford #+# #+# */ +/* Updated: 2017/03/14 18:09:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strcmp(const char *s1, const char *s2) +{ + int i; + + i = 0; + if (!s1 || !s2) + return (1); + while (*(s1 + i) && *(s1 + i) == *(s2 + i)) + i++; + return (*((unsigned char*)s1 + i) - *((unsigned char*)s2 + i)); +} diff --git a/nmap/libft/srcs/str/ft_strcpy.c b/nmap/libft/srcs/str/ft_strcpy.c new file mode 100644 index 00000000..63ee8897 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcpy.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:12 by jhalford #+# #+# */ +/* Updated: 2017/03/13 16:06:49 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcpy(char *dst, const char *src) +{ + int i; + + i = 0; + while (src && src[i]) + { + dst[i] = src[i]; + i++; + } + dst[i] = '\0'; + return (dst); +} diff --git a/nmap/libft/srcs/str/ft_strcspn.c b/nmap/libft/srcs/str/ft_strcspn.c new file mode 100644 index 00000000..d55d8081 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcspn.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcspn.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/20 15:55:33 by jhalford #+# #+# */ +/* Updated: 2017/03/20 16:00:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strcspn(char *s, const char *delim) +{ + char *str; + + str = s; + while (*str) + if (ft_strchr(delim, *str)) + return (str - s); + else + str++; + return (str - s); +} diff --git a/nmap/libft/srcs/str/ft_strcut.c b/nmap/libft/srcs/str/ft_strcut.c new file mode 100644 index 00000000..75b4d51b --- /dev/null +++ b/nmap/libft/srcs/str/ft_strcut.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcut.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:04:37 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:04:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strcut(char *str, char *cut) +{ + char *target; + + while ((target = ft_strstr(str, cut))) + { + ft_strcpy(target, target + ft_strlen(cut)); + } + return (str); +} diff --git a/nmap/libft/srcs/str/ft_strdel.c b/nmap/libft/srcs/str/ft_strdel.c new file mode 100644 index 00000000..f9eb34e4 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strdel.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:00 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:47:47 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_strdel(char **as) +{ + if (as && *as) + { + free(*as); + *as = NULL; + } +} diff --git a/nmap/libft/srcs/str/ft_strdup.c b/nmap/libft/srcs/str/ft_strdup.c new file mode 100644 index 00000000..556558f4 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strdup.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/07 14:25:41 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdup(const char *s1) +{ + char *dup; + + if (!s1 || !(dup = (char*)ft_malloc(sizeof(*dup) * (ft_strlen(s1) + 1)))) + return (NULL); + ft_strcpy(dup, s1); + return (dup); +} diff --git a/nmap/libft/srcs/str/ft_strdupchr.c b/nmap/libft/srcs/str/ft_strdupchr.c new file mode 100644 index 00000000..3fd5d0d5 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strdupchr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdupchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 11:01:15 by ariard #+# #+# */ +/* Updated: 2017/03/22 23:12:37 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strdupchr(const char *str, char c) +{ + char *new; + + if (!str || !(new = ft_memalloc(sizeof(*new) * (ft_strlenchr(str, c) + 1)))) + return (NULL); + ft_strchrcpy(new, str, c); + return (new); +} diff --git a/nmap/libft/srcs/str/ft_strduptr.c b/nmap/libft/srcs/str/ft_strduptr.c new file mode 100644 index 00000000..59cfd835 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strduptr.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strduptr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/06 13:37:12 by ariard #+# #+# */ +/* Updated: 2017/03/21 15:43:52 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strduptr(char *str, int (*is)(int c)) +{ + char *new; + char *tmp; + + new = ft_memalloc(sizeof(char *) * ft_strlen(str) + 1); + tmp = new; + while (*str && (is)((int)*str)) + *new++ = *str++; + *new = 0; + return (tmp); +} diff --git a/nmap/libft/srcs/str/ft_strequ.c b/nmap/libft/srcs/str/ft_strequ.c new file mode 100644 index 00000000..88e5580c --- /dev/null +++ b/nmap/libft/srcs/str/ft_strequ.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:04 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strequ(char const *s1, char const *s2) +{ + return (ft_strcmp(s1, s2) == 0); +} diff --git a/nmap/libft/srcs/str/ft_strinsert.c b/nmap/libft/srcs/str/ft_strinsert.c new file mode 100644 index 00000000..fcf8b1b6 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strinsert.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strinsert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/21 18:21:57 by jhalford #+# #+# */ +/* Updated: 2016/11/21 18:21:57 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strinsert(char *str, char c, int n) +{ + char tmp[ft_strlen(str)]; + char *out; + + ft_strcpy(tmp, str + n); + str[n] = 0; + out = ft_str3join(str, (char[]){c, 0}, tmp); + return (out); +} diff --git a/nmap/libft/srcs/str/ft_stris.c b/nmap/libft/srcs/str/ft_stris.c new file mode 100644 index 00000000..ba809f85 --- /dev/null +++ b/nmap/libft/srcs/str/ft_stris.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_stris.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/02 15:11:28 by ariard #+# #+# */ +/* Updated: 2017/03/20 16:01:06 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_stris(char *str, int (*f)()) +{ + while (*str) + if (!(f)(*str++)) + return (0); + return (1); +} diff --git a/nmap/libft/srcs/str/ft_striter.c b/nmap/libft/srcs/str/ft_striter.c new file mode 100644 index 00000000..8c309549 --- /dev/null +++ b/nmap/libft/srcs/str/ft_striter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:13 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:58:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striter(char *s, void (*f)(char *)) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + (*f)(s + i); +} diff --git a/nmap/libft/srcs/str/ft_striteri.c b/nmap/libft/srcs/str/ft_striteri.c new file mode 100644 index 00000000..80cdd8b5 --- /dev/null +++ b/nmap/libft/srcs/str/ft_striteri.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:15 by jhalford #+# #+# */ +/* Updated: 2016/11/03 14:58:15 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char *)) +{ + size_t size; + size_t i; + + size = ft_strlen(s); + i = -1; + while (++i < size) + (*f)(i, s + i); +} diff --git a/nmap/libft/srcs/str/ft_strjoin.c b/nmap/libft/srcs/str/ft_strjoin.c new file mode 100644 index 00000000..2c064f33 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strjoin.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:18 by jhalford #+# #+# */ +/* Updated: 2017/02/19 05:50:20 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *join; + + if (!(join = ft_strnew(ft_strlen(s1) + ft_strlen(s2) + 1))) + return (NULL); + if (s1) + ft_strcpy(join, s1); + if (s2) + ft_strcat(join, s2); + return (join); +} diff --git a/nmap/libft/srcs/str/ft_strlcat.c b/nmap/libft/srcs/str/ft_strlcat.c new file mode 100644 index 00000000..df94eea4 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strlcat.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:57:16 by jhalford #+# #+# */ +/* Updated: 2016/08/07 21:44:13 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlcat(char *dst, const char *src, size_t size) +{ + size_t i; + size_t dst_size; + size_t src_size; + + dst_size = ft_strlen(dst); + src_size = ft_strlen(src); + i = 0; + while (src[i] != '\0' && ((dst_size + i) < (size - 1))) + { + dst[dst_size + i] = src[i]; + i++; + } + dst[dst_size + i] = '\0'; + return (src_size + ((dst_size < size) ? dst_size : size)); +} diff --git a/nmap/libft/srcs/str/ft_strlen.c b/nmap/libft/srcs/str/ft_strlen.c new file mode 100644 index 00000000..9b65ad39 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strlen.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:22 by jhalford #+# #+# */ +/* Updated: 2017/03/18 14:25:09 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlen(const char *s) +{ + int i; + + i = 0; + if (!s) + return (0); + while (s[i]) + i++; + return (i); +} diff --git a/nmap/libft/srcs/str/ft_strlenchr.c b/nmap/libft/srcs/str/ft_strlenchr.c new file mode 100644 index 00000000..1ea82cfa --- /dev/null +++ b/nmap/libft/srcs/str/ft_strlenchr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlenchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ariard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 16:10:54 by ariard #+# #+# */ +/* Updated: 2017/03/22 22:12:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +size_t ft_strlenchr(const char *s, char c) +{ + size_t i; + + i = 0; + while (*s && *s++ != c) + i++; + return (i); +} diff --git a/nmap/libft/srcs/str/ft_strmap.c b/nmap/libft/srcs/str/ft_strmap.c new file mode 100644 index 00000000..5c0353ae --- /dev/null +++ b/nmap/libft/srcs/str/ft_strmap.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:24 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmap(char const *s, char (*f)(char)) +{ + size_t size; + size_t i; + char *out; + + size = ft_strlen(s); + out = (char *)ft_malloc(sizeof(char) * (size + 1)); + if (out == NULL) + return (NULL); + i = -1; + while (++i < size) + out[i] = (*f)(s[i]); + return (out); +} diff --git a/nmap/libft/srcs/str/ft_strmapi.c b/nmap/libft/srcs/str/ft_strmapi.c new file mode 100644 index 00000000..7cc6d089 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strmapi.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:28 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + size_t size; + size_t i; + char *out; + + size = ft_strlen(s); + out = (char *)ft_malloc(sizeof(char) * (size + 1)); + if (out == NULL) + return (NULL); + i = -1; + while (++i < size) + out[i] = (*f)(i, s[i]); + return (out); +} diff --git a/nmap/libft/srcs/str/ft_strncat.c b/nmap/libft/srcs/str/ft_strncat.c new file mode 100644 index 00000000..31ab2262 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strncat.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:57:07 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:27 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncat(char *s1, const char *s2, size_t n) +{ + size_t size; + size_t j; + + size = ft_strlen(s1); + j = 0; + while (s2[j] != '\0' && j < n) + { + s1[size + j] = s2[j]; + j++; + } + s1[size + j] = '\0'; + return (s1); +} diff --git a/nmap/libft/srcs/str/ft_strncmp.c b/nmap/libft/srcs/str/ft_strncmp.c new file mode 100644 index 00000000..57b55b5f --- /dev/null +++ b/nmap/libft/srcs/str/ft_strncmp.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:49:12 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:11:00 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + int i; + + i = 0; + while (*(s1 + i) && *(s1 + i) == *(s2 + i) && i < (int)n) + i++; + if (i < (int)n) + return (*((unsigned char*)s1 + i) - *((unsigned char*)s2 + i)); + else + return (0); +} diff --git a/nmap/libft/srcs/str/ft_strncpy.c b/nmap/libft/srcs/str/ft_strncpy.c new file mode 100644 index 00000000..85dd41c7 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strncpy.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:21 by jhalford #+# #+# */ +/* Updated: 2016/08/07 10:48:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strncpy(char *dst, const char *src, size_t len) +{ + size_t i; + + i = 0; + while (src[i] != '\0' && i < len) + { + dst[i] = src[i]; + i++; + } + while (i < len) + { + dst[i] = '\0'; + i++; + } + return (dst); +} diff --git a/nmap/libft/srcs/str/ft_strndup.c b/nmap/libft/srcs/str/ft_strndup.c new file mode 100644 index 00000000..ee942d34 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strndup.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strndup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:53:55 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:54:30 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strndup(const char *s1, size_t n) +{ + char *dup; + + if (!(dup = ft_memalloc(n))) + return (NULL); + ft_strncpy(dup, s1, n); + return (dup); +} diff --git a/nmap/libft/srcs/str/ft_strnequ.c b/nmap/libft/srcs/str/ft_strnequ.c new file mode 100644 index 00000000..5dfd6005 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strnequ.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:32 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:02:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_strnequ(char const *s1, char const *s2, size_t n) +{ + return (ft_strncmp(s1, s2, n) == 0); +} diff --git a/nmap/libft/srcs/str/ft_strnew.c b/nmap/libft/srcs/str/ft_strnew.c new file mode 100644 index 00000000..2e2ae1d6 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:34 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnew(size_t size) +{ + char *addr; + size_t i; + + addr = (char *)ft_malloc(size + 1); + if (addr == NULL) + return (NULL); + i = -1; + while (++i <= size) + addr[i] = '\0'; + return (addr); +} diff --git a/nmap/libft/srcs/str/ft_strnstr.c b/nmap/libft/srcs/str/ft_strnstr.c new file mode 100644 index 00000000..efa7e54f --- /dev/null +++ b/nmap/libft/srcs/str/ft_strnstr.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:36 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:34:42 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + int j; + + i = -1; + if (!*little) + return ((char *)big); + while (big[++i] && i < len) + { + j = 0; + while (big[i + j] == little[j] && i + j < len) + { + j++; + if (!little[j]) + return ((char *)big + i); + } + } + return (NULL); +} diff --git a/nmap/libft/srcs/str/ft_strrchr.c b/nmap/libft/srcs/str/ft_strrchr.c new file mode 100644 index 00000000..e41d4566 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strrchr.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:38 by jhalford #+# #+# */ +/* Updated: 2016/11/03 15:08:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + char *a; + int i; + + a = (char *)s; + i = ft_strlen(a); + while (i >= 0) + { + if (a[i] == (char)c) + return (a + i); + i--; + } + return (NULL); +} diff --git a/nmap/libft/srcs/str/ft_strreplace.c b/nmap/libft/srcs/str/ft_strreplace.c new file mode 100644 index 00000000..7fb72527 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strreplace.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strreplace.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/12 13:50:21 by jhalford #+# #+# */ +/* Updated: 2017/01/12 13:59:25 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strreplace(char **str, char *start, char *end, char *new) +{ + char *out; + + out = ft_strnew(ft_strlen(*str) - (end - start) + ft_strlen(new) + 1); + ft_strncpy(out, *str, start - *str); + ft_strcat(out, new); + ft_strcat(out, end + 1); + ft_strdel(str); + *str = out; + return (out); +} diff --git a/nmap/libft/srcs/str/ft_strrev.c b/nmap/libft/srcs/str/ft_strrev.c new file mode 100644 index 00000000..73884204 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strrev.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrev.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 18:01:36 by jhalford #+# #+# */ +/* Updated: 2016/11/03 18:01:36 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strrev(char *str) +{ + int len; + char tmp; + int i; + + i = 0; + len = 0; + while (str[len] != '\0') + len++; + while (i < len / 2) + { + tmp = str[len - (i + 1)]; + str[len - (i + 1)] = str[i]; + str[i] = tmp; + i++; + } + return (str); +} diff --git a/nmap/libft/srcs/str/ft_strsepjoin.c b/nmap/libft/srcs/str/ft_strsepjoin.c new file mode 100644 index 00000000..054e4061 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strsepjoin.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsepjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:54:06 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:54:07 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strsepjoin(char **tab, char sep) +{ + char *join; + char **p; + int len; + + len = 0; + if (!(p = tab)) + return (NULL); + while (*p) + len += ft_strlen(*p++) + 1; + if (!(join = ft_strnew(len))) + return (NULL); + *join = 0; + p = tab; + while (*p) + { + ft_strcat(join, *p++); + ft_strcat(join, &sep); + } + join[len - 1] = 0; + return (join); +} diff --git a/nmap/libft/srcs/str/ft_strsplit.c b/nmap/libft/srcs/str/ft_strsplit.c new file mode 100644 index 00000000..049aa7ed --- /dev/null +++ b/nmap/libft/srcs/str/ft_strsplit.c @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsplit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:40 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int ft_countwords(char const *s, char c) +{ + if (c == '\0') + return ((*s == '\0') ? 0 : 1); + while (*s == c) + s++; + if (*s == '\0') + return (0); + while (*s != c && *s != '\0') + s++; + return (1 + ft_countwords(s, c)); +} + +static int get_word_len(char const *str, char c) +{ + int i; + int len; + + i = 0; + len = 0; + while (str[i] == c) + i++; + while (str[i] != c && str[i] != '\0') + { + i++; + len++; + } + return (len); +} + +char **ft_strsplit(char const *s, char c) +{ + int i; + int j; + int k; + char **str2; + + if (!s || !(str2 = (char **)ft_malloc(sizeof(*str2) * + (ft_countwords(s, c) + 1)))) + return (NULL); + i = -1; + j = 0; + while (++i < ft_countwords(s, c)) + { + k = 0; + if (!(str2[i] = ft_strnew(get_word_len(&s[j], c) + 1))) + str2[i] = NULL; + while (s[j] == c) + j++; + while (s[j] != c && s[j]) + str2[i][k++] = s[j++]; + str2[i][k] = '\0'; + } + str2[i] = 0; + return (str2); +} diff --git a/nmap/libft/srcs/str/ft_strstr.c b/nmap/libft/srcs/str/ft_strstr.c new file mode 100644 index 00000000..bf8ab37a --- /dev/null +++ b/nmap/libft/srcs/str/ft_strstr.c @@ -0,0 +1,37 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/08/07 10:48:35 by jhalford #+# #+# */ +/* Updated: 2016/11/03 16:28:05 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strstr(const char *big, const char *little) +{ + int i; + int j; + char *a; + + a = (char *)big; + i = 0; + if (!*little) + return (a); + while (a[i]) + { + j = 0; + while (a[i + j] == little[j]) + { + j++; + if (!little[j]) + return (a + i); + } + i++; + } + return (NULL); +} diff --git a/nmap/libft/srcs/str/ft_strsub.c b/nmap/libft/srcs/str/ft_strsub.c new file mode 100644 index 00000000..0c3fb11b --- /dev/null +++ b/nmap/libft/srcs/str/ft_strsub.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strsub.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:43 by jhalford #+# #+# */ +/* Updated: 2017/03/21 15:42:19 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strsub(char const *s, unsigned int start, size_t len) +{ + char *out; + size_t i; + + if (!(out = (char *)ft_malloc(sizeof(char) * (len + 1)))) + return (NULL); + i = -1; + while (++i < len) + out[i] = s[i + start]; + out[i] = '\0'; + return (out); +} diff --git a/nmap/libft/srcs/str/ft_strtok.c b/nmap/libft/srcs/str/ft_strtok.c new file mode 100644 index 00000000..dbb73ed9 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strtok.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtok.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/07 18:08:31 by jhalford #+# #+# */ +/* Updated: 2017/03/22 22:23:33 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtok(char *s, const char *delim) +{ + static char *lasts; + int ch; + + if (s == 0) + s = lasts; + if ((ch = *s++) == 0) + return (0); + while (ft_strchr(delim, ch)) + if ((ch = *s++) == 0) + return (0); + --s; + lasts = s + ft_strcspn(s, delim); + if (*lasts != 0) + *lasts++ = 0; + return (s); +} diff --git a/nmap/libft/srcs/str/ft_strtrim.c b/nmap/libft/srcs/str/ft_strtrim.c new file mode 100644 index 00000000..22d17250 --- /dev/null +++ b/nmap/libft/srcs/str/ft_strtrim.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/03 14:58:45 by jhalford #+# #+# */ +/* Updated: 2016/11/04 13:11:59 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_strtrim(char const *s) +{ + char *out; + char *last; + + while (*s && FT_WS(*s)) + s++; + out = ft_strdup(s); + last = out + ft_strlen(out) - 1; + while (last > out && FT_WS(*last)) + *last-- = 0; + return (out); +} diff --git a/nmap/libft/srcs/str/hexstring.c b/nmap/libft/srcs/str/hexstring.c new file mode 100644 index 00000000..2306b5e9 --- /dev/null +++ b/nmap/libft/srcs/str/hexstring.c @@ -0,0 +1,202 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* hexstring.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/24 21:42:59 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:47:58 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "hexstring.h" + +/** + * Byte multiplier: a printed byte uses 3 characters + */ +#define BYTE_MULT 3 + +/** + * Convert a 2-bytes string to an uint8_t integer (e.g. "1A\0" -> 0x1A) + * + * @param str hexstring to convert, of expected size BYTE_MULT + * @return converted uint8_t integer + */ +uint8_t str_to_hex(char *str) { + + assert(str != NULL); + + uint8_t hex = 0; + + if(isdigit(str[0])) { + hex |= (str[0] & 0x0F) << 4; + } else { + hex |= ((str[0]+0x09) & 0x0F) << 4; + } + + if(isdigit(str[1])) { + hex |= (str[1] & 0x0F); + } else { + hex |= ((str[1]+0x09) & 0x0F); + } + + return hex; +} + +/** + * Convert an uint8_t integer to a 2-bytes hexstring (e.g. 0x1A -> "1A\0") + * + * @param hex uint8_t integer to convert + * @param str destination hexstring, of expected size BYTE_MULT + */ +void hex_to_str(uint8_t hex, char *str) { + + assert(str != NULL); + + str[0] = (hex & 0xF0) >> 4; + str[1] = (hex & 0x0F); + str[2] = '\0'; + + if(str[0]<0x0A) { + str[0] |= 0x30; + } else { + str[0] |= 0x40; + str[0] -= 0x09; + } + + if(str[1]<0x0A) { + str[1] |= 0x30; + } else { + str[1] |= 0x40; + str[1] -= 0x09; + } +} + +/** + * Check if the character is hexadecimal. + * + * @param c character to check + * @return + * - 1 if hexadecimal + * - 0 if not hexadecimal + */ +int is_hex(char c) { + if ((c >= 'A' && c <= 'F') || (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) + return 1; + return 0; +} + +/** + * Return the length of the hexstring. + * + * @param hexstr input string + * @return hexstr length + */ +int hexstr_size(const char *hexstr) { + + assert(hexstr != NULL); + + int size = 0; + const char *p = hexstr; + + /* + * Parse an hexstring and calculate it's size. + * Analyze three bytes at a time, in this format: HEX HEX (SPACE|NULL) + * (Ex. "FF ", "2A ", "EE") + */ + while ( is_hex(p[0]) && is_hex(p[1]) && (p[2] == ' ' || p[2] == '\n' || p[2] == '\0') ) { + //printf("p[0] = %c, p[1] = %c, p[2] = %c\n", p[0], p[1], p[2] == '\0' ? 'N' : p[2]); + + size++; + p += BYTE_MULT; + } + + return size; +} + +/** + * Create a raw buffer from an hexstring. The buffer must be manually free()d. + * + * @param hexstr hexstring to convert + * @param size hexstring size + * @return pointer to the converted raw buffer + */ +char *hexstr_to_raw(const char *hexstr, int *size) { + + assert(hexstr != NULL); + assert(size != NULL); + + char *raw = NULL; + const char *p = hexstr; + + *size = hexstr_size(hexstr); + raw = (char *) malloc(*size); // malloc the raw buffer + + char hex[BYTE_MULT]; + int i = 0; + + /* + * Parse an hexstring. + * Analyze three bytes at a time, in this format: HEX HEX (SPACE|NULL) + * (Ex. "FF ", "2A ", "EE") + */ + while ( is_hex(p[0]) && is_hex(p[1]) && (p[2] == ' ' || p[2] == '\n' || p[2] == '\0') ) { + //printf("p[0] = %c, p[1] = %c, p[2] = %c\n", p[0], p[1], p[2] == '\0' ? 'N' : p[2]); + + // extract a single byte + hex[0] = p[0]; + hex[1] = p[1]; + hex[2] = '\0'; + + raw[i] = str_to_hex(hex); + + i++; + p += BYTE_MULT; + } + + //hex_dump(raw, size); + + return raw; +} + +/** + * Create an hexstring from a raw buffer. The hexstring must be manually free()d. + * + * @param raw raw buffer to convert + * @param size raw buffer size + * @return converted hexstring + */ +char *raw_to_hexstr(const char *raw, int size) { + + assert(raw != NULL); + if(size == 0) return NULL; + + char *hexstr = NULL; + + hexstr = (char *) malloc(size*BYTE_MULT); // malloc the hexstring + + char hex[BYTE_MULT]; + int i = 0; + char *p = hexstr; + + /* + * Parse an hexstring. + * Analyze three bytes at a time, in this format: HEX HEX (SPACE|NULL) + * (Ex. "FF ", "2A ", "EE") + */ + for (i=0; i +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:56:58 by jhalford #+# #+# */ +/* Updated: 2017/10/07 17:57:28 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** If file already exists, create xxx(1) instead, etc up to 9 +*/ + +int open_new(char *filename, int oflag) +{ + char *fname; + int fd; + int i; + int len; + + len = ft_strlen(filename); + fname = ft_strnew(len + 4); + ft_strcpy(fname, filename); + i = 0; + while (i < 10 && (fd = open(fname, oflag | O_CREAT | O_EXCL, 0644)) < 0 + && errno == EEXIST) + { + fname[len] = '('; + fname[len + 1] = ++i + '0'; + fname[len + 2] = ')'; + } + ft_strdel(&fname); + return (fd); +} diff --git a/nmap/libft/srcs/time/epoch.c b/nmap/libft/srcs/time/epoch.c new file mode 100644 index 00000000..21ceb475 --- /dev/null +++ b/nmap/libft/srcs/time/epoch.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* epoch.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/07 17:58:42 by jhalford #+# #+# */ +/* Updated: 2017/10/08 13:15:50 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_time.h" + +uint64_t epoch_micro(void) +{ + struct timeval tv; + + if (gettimeofday(&tv, NULL)) + return (0); + return (tv.tv_sec * 1000000 + tv.tv_usec); +} + +double time_milli(void) +{ + struct timeval tv; + + if (gettimeofday(&tv, NULL)) + return (0); + return ((double)((double)tv.tv_sec / 1000. + tv.tv_usec * 1000.)); +} diff --git a/nmap/srcs/capture.c b/nmap/srcs/capture.c new file mode 100644 index 00000000..81b3bae4 --- /dev/null +++ b/nmap/srcs/capture.c @@ -0,0 +1,36 @@ + +#include "nmap.h" + +#define PCAP_FILTER "src host %s and src port %i and dst host %s and dst port %i" + +pcap_t *nmap_capture(ipaddr dst, ipaddr src) +{ + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *handle; + bpf_u_int32 netp; + bpf_u_int32 maskp; + char buf[IPADDR_MAXSTRLEN]; + struct bpf_program fp; + char str[100]; + + if (pcap_lookupnet("any", &netp, &maskp, errbuf) == -1) + { + exit(EXIT_FAILURE); + } + if (!(handle = pcap_open_live("any", BUFSIZ, 0, -1, errbuf))) + { + fprintf(stderr, "pcap_open_live: %s", errbuf); + exit(EXIT_FAILURE); + } + if (pcap_setdirection(handle, PCAP_D_IN)) + exit(EXIT_FAILURE); + if (!(sprintf(str, PCAP_FILTER, ipaddrstr(dst, buf), ipport(dst), + ipaddrstr(src, buf), ipport(src)))) + exit(EXIT_FAILURE); + DG("filter is: %s", str); + if (pcap_compile(handle, &fp, str, 1, netp) == -1) + exit(EXIT_FAILURE); + if (pcap_setfilter(handle, &fp) == -1) + exit(EXIT_FAILURE); + return (handle); +} diff --git a/nmap/srcs/format.c b/nmap/srcs/format.c new file mode 100644 index 00000000..ee8dd037 --- /dev/null +++ b/nmap/srcs/format.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* format.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/24 15:07:14 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:48:03 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "nmap.h" + +int g_njobs; +char g_port_status[][20] = +{ + "OPEN", + "FILTERED", + "CLOSED", + "UNFILTERED", + "OPEN_FILTERED", +}; + +void nmap_format(chan results) +{ + t_result result; + char buf[IPADDR_MAXSTRLEN]; + int i; + + i = 0; + while (i++ < g_njobs) + { + result = chr(results, t_result); + printf("%s:%i %s(%s)\n", + ipaddrstr(result.dest, buf), + ipport(result.dest), + g_port_status[result.status], + result.scan); + } + DG("finished reading %i jobs\n", g_njobs); +} diff --git a/nmap/srcs/ip.c b/nmap/srcs/ip.c new file mode 100644 index 00000000..7a06bbda --- /dev/null +++ b/nmap/srcs/ip.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ip.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/24 17:22:16 by jhalford #+# #+# */ +/* Updated: 2017/10/26 17:10:53 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "nmap.h" + +/* +** some libmill ip extensions +*/ + +uint16_t ipport(ipaddr ip) +{ + return (ntohs(((struct sockaddr_in*)&ip)->sin_port)); +} + +uint16_t ipfamily(ipaddr ip) +{ + return (((struct sockaddr*)&ip)->sa_family); +} + +uint16_t ipmode(ipaddr ip) +{ + if (((struct sockaddr*)&ip)->sa_family == AF_INET) + return (IPADDR_IPV4); + else + return (IPADDR_IPV6); +} + +ipaddr iplocal_randport(const char *name, int mode, int sock) +{ + unsigned short port; + ipaddr ip; + + port = 49152; + while (port < 65535) + { + ip = iplocal(name, port, mode); + if (bind(sock, (struct sockaddr*)&ip, sizeof(ip)) == 0) + return (ip); + ++port; + } + errno = EBUSY; + return (ip); +} diff --git a/nmap/srcs/main.c b/nmap/srcs/main.c new file mode 100644 index 00000000..4f4eab63 --- /dev/null +++ b/nmap/srcs/main.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 19:10:04 by jhalford #+# #+# */ +/* Updated: 2017/10/26 16:06:16 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "nmap.h" + +#define NMAP_USAGE1 " [--ip HOST] [--file FILE]" +#define NMAP_USAGE2 " [--ports PORTS] [--speedup [NUMBER]] [--scan [TYPE]] HOST" + +t_data *g_data; + +coroutine void jobs_loop(chan jobs, chan results) +{ + t_job job; + chan copy; + int i; + + i = 0; + while (1) + { + DG("before chr jobs"); + job = chr(jobs, t_job); + DG("after chr jobs"); + if (job.scan == NULL) + break ; + copy = chdup(results); + go(job.scan(copy, job)); + i++; + } + printf("finished starting jobs\n"); +} + +static chan nmap(chan jobs) +{ + chan results; + + results = chmake(t_result, 0); + go(jobs_loop(jobs, results)); + return (results); +} + +int main(int ac, char **av) +{ + chan jobs; + chan results; + + /* if (getuid() != 0) */ + /* { */ + /* fprintf(stderr, "You must have root privileges to use nmap\n"); */ + /* return(1); */ + /* } */ + jobs = nmap_parse(ac, av); + results = nmap(jobs); + nmap_format(results); + return (0); +} diff --git a/nmap/srcs/parser.c b/nmap/srcs/parser.c new file mode 100644 index 00000000..247a65e3 --- /dev/null +++ b/nmap/srcs/parser.c @@ -0,0 +1,138 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parser.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/08 19:10:05 by jhalford #+# #+# */ +/* Updated: 2017/10/24 21:00:10 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "nmap.h" + +extern int g_njobs; + +/* static t_cliopts g_opts[] = */ +/* { */ +/* {'h', "host", 0, 0, nmap_get_host, 0}, */ +/* /1* {'f', "file", 0, 0, nmap_get_file, 0}, *1/ */ +/* /1* {'p', "ports", 0, 0, nmap_get_ports, 0}, *1/ */ +/* {'t', "threads", 0, 0, nmap_get_threads, 0}, */ +/* {'s', "scan", 0, 0, nmap_get_scan, 0}, */ +/* {0, 0, 0, 0, 0, 0}, */ +/* }; */ + +/* static t_host nmap_get_host(char *node) */ +/* { */ +/* t_host host; */ +/* struct addrinfo *servinfo, hints; */ + +/* memset (&hints, 0, sizeof (hints)); */ +/* hints.ai_family = PF_UNSPEC; */ +/* hints.ai_socktype = SOCK_RAW; */ +/* hints.ai_flags = AI_CANONNAME; */ + +/* if (getaddrinfo(node, NULL, &hints, &servinfo)) */ +/* { */ +/* fprintf(stderr, "Failed to resolve \"%s\"\n", node); */ +/* return (host); */ +/* } */ +/* host.addr = servinfo->ai_addr; */ +/* host.addrlen = servinfo->ai_addrlen; */ +/* host.host = node; */ +/* host.dn = servinfo->ai_canonname; */ + +/* void *addr; */ +/* if (servinfo->ai_family == AF_INET) { // IPv4 */ +/* struct sockaddr_in *ipv4 = (struct sockaddr_in *)servinfo->ai_addr; */ +/* addr = &(ipv4->sin_addr); */ +/* } else { // IPv6 */ +/* struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)servinfo->ai_addr; */ +/* addr = &(ipv6->sin6_addr); */ +/* } */ + +/* // convert the IP to a string and print it: */ +/* inet_ntop(servinfo->ai_family, addr, host.ip, sizeof(host.ip)); */ + +/* printf("dn=%s, ip=%s\n", host.dn, host.ip); */ + +/* /1* MUST DO rDNS search here *1/ */ +/* /1* printf("rDNS record for %s: %s\n", addrstr, DOMAIN NAME WITH RDNS); *1/ */ +/* return (host); */ +/* } */ + +/* int nmap_get_file(char *opt_arg, t_data *data) */ +/* { */ +/* } */ + +/* int nmap_get_ports(char *opt_arg, t_data *data) */ +/* { */ +/* } */ + +/* static int nmap_get_threads(char *opt_arg, t_data *data) */ +/* { */ +/* data->threads = ft_atoi(opt_arg); */ +/* return (0); */ +/* } */ + +/* static int nmap_get_scan(char *opt_arg, t_data *data) */ +/* { */ +/* while (*opt_arg) */ +/* { */ +/* if (*opt_arg == 'T') */ +/* bitfield_biton(data->scans, SCAN_TCP); */ +/* else if (*opt_arg == 'S') */ +/* bitfield_biton(data->scans, SCAN_SYN); */ +/* else if (*opt_arg == 'A') */ +/* bitfield_biton(data->scans, SCAN_ACK); */ +/* else if (*opt_arg == 'F') */ +/* bitfield_biton(data->scans, SCAN_FIN); */ +/* else if (*opt_arg == 'X') */ +/* bitfield_biton(data->scans, SCAN_XMAS); */ +/* else if (*opt_arg == 'U') */ +/* bitfield_biton(data->scans, SCAN_UDP); */ +/* else */ +/* return (1); */ +/* opt_arg++; */ +/* } */ +/* return (0); */ +/* } */ + +coroutine void coarse_dispatcher(chan jobs) +{ + t_job job; + + job.scan = nmap_scan_tcp; + + job.dest = ipremote("scanme.nmap.org", 80, IPADDR_IPV4, -1); + chs(jobs, t_job, job); + /* job.dest = ipremote("scanme.nmap.org", 81, IPADDR_IPV4, -1); */ + /* chs(jobs, t_job, job); */ + + job.scan = 0; + DG("sending done job"); + chdone(jobs, t_job, job); + chclose(jobs); +} + +chan nmap_parse(int ac, char **av) +{ + (void)ac; + (void)av; + /* if (cliopts_get(av, g_opts, data)) */ + /* return (ft_perror("nmap")); */ + /* if (!data->host && data->av_data && data->av_data) */ + /* nmap_get_host(*data->av_data, data); */ + + chan jobs; + jobs = chmake(t_job, 0); + + /* ft_usage("nmap"NMAP_USAGE1 NMAP_USAGE2); */ + + go(coarse_dispatcher(jobs)); + g_njobs = 1; + + return (chdup(jobs)); +} diff --git a/nmap/srcs/scanners.c b/nmap/srcs/scanners.c new file mode 100644 index 00000000..51487c2e --- /dev/null +++ b/nmap/srcs/scanners.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* scanners.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/10/09 15:28:42 by jhalford #+# #+# */ +/* Updated: 2017/10/26 17:37:43 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "nmap.h" + +coroutine void nmap_scan_tcp(chan results, t_job job) +{ + t_result result; + ipaddr src; + int sock; + + sock = socket(ipfamily(job.dest), SOCK_STREAM, IPPROTO_TCP); + src = iplocal_randport(NULL, ipmode(job.dest), sock); + + pcap_t *handle = nmap_capture(job.dest, src); + /* chan pkts; */ + /* pkts = nmap_listener(job.dest, src); */ + /* (void)pkts; */ + /* DG("after listener"); */ + + result.dest = job.dest; + ft_strcpy(result.scan, "TCP"); + + struct tcphdr pkt; + result.status = CLOSED; + + tcp_hdrinit(&pkt); + pkt.th_dport = htons(ipport(job.dest)); + pkt.th_sport = htons(ipport(src)); + pkt.th_flags = 0; + pkt.th_sum = cksum(&pkt, sizeof(pkt)); + + tcp_print((char *)&pkt, sizeof(pkt)); + + // REQ + DG("check"); + fdwait(sock, FDW_IN, now() + 1000); + if (sendto(sock, &pkt, sizeof(pkt), 0, (struct sockaddr*)&job.dest, sizeof(job.dest)) < 0) + { + DG("check 1"); + perror("sendto"); + } + DG("check 2"); + + // RESP + struct pcap_pkthdr pkthdr; + const u_char *resp; + resp = pcap_next(handle, &pkthdr); + tcp_print((char *)resp, pkthdr.len); + + chs(results, t_result, result); + chclose(results); + return ; + +}