From 81d78420a1b27197e1f1855da2eecb84f7852481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl?= <35407363+EniumRaphael@users.noreply.github.com> Date: Thu, 16 Nov 2023 16:09:03 +0100 Subject: [PATCH] ft_printf --- Makefile | 46 +++++++++++++++++++++++++ libft/ft_strdup.c | 26 ++++++++++++++ libft/ft_strdup.o | Bin 0 -> 1304 bytes libft/ft_strlcpy.c | 31 +++++++++++++++++ libft/ft_strlcpy.o | Bin 0 -> 1264 bytes libft/ft_strlen.c | 23 +++++++++++++ libft/ft_strlen.o | Bin 0 -> 1024 bytes src/ft_printf.c | 66 ++++++++++++++++++++++++++++++++++++ src/ft_printf.h | 35 +++++++++++++++++++ src/ft_printf.o | Bin 0 -> 3384 bytes src/ft_put.c | 82 +++++++++++++++++++++++++++++++++++++++++++++ src/ft_put.o | Bin 0 -> 2728 bytes 12 files changed, 309 insertions(+) create mode 100644 Makefile create mode 100644 libft/ft_strdup.c create mode 100644 libft/ft_strdup.o create mode 100644 libft/ft_strlcpy.c create mode 100644 libft/ft_strlcpy.o create mode 100644 libft/ft_strlen.c create mode 100644 libft/ft_strlen.o create mode 100644 src/ft_printf.c create mode 100644 src/ft_printf.h create mode 100644 src/ft_printf.o create mode 100644 src/ft_put.c create mode 100644 src/ft_put.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..516b556 --- /dev/null +++ b/Makefile @@ -0,0 +1,46 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: rparodi +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2023/11/12 11:05:05 by rparodi #+# #+# # +# Updated: 2023/11/16 15:14:07 by rparodi ### ########.fr # +# # +# **************************************************************************** # + +NAME=libftprintf.a +CC=cc +CFLAGS=-Wall -Wextra -Werror +RM=rm -f +LIBFT = ./libft/ft_strdup.c ./libft/ft_strlcpy.c ./libft/ft_strlen.c +SRC = ./src/ft_printf.c ./src/ft_put.c +OBJ = $(SRC:.c=.o) +OBJLibft = $(LIBFT:.c=.o) + +$(NAME): $(OBJ) $(OBJLibft) + ar rc $(NAME) $(OBJ) $(OBJLibft) + ranlib $(NAME) + +%.o: %.c + $(CC) -I. -o $@ -c $? $(CFLAGS) + +all: $(NAME) + +bonus: $(OBJ) $(OBJLibft) + ar rc $(NAME) $(OBJ) $(OBJLibft) + ranlib $(NAME) + + +dev: all bonus clean + +clean: + $(RM) $(OBJ) $(OBJLibft) + +fclean: clean + $(RM) $(NAME) + +re: fclean all bonus + +.PHONY: clean clean diff --git a/libft/ft_strdup.c b/libft/ft_strdup.c new file mode 100644 index 0000000..2574a8b --- /dev/null +++ b/libft/ft_strdup.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 16:53:59 by rparodi #+# #+# */ +/* Updated: 2023/11/16 15:12:05 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../src/ft_printf.h" + +char *ft_strdup(const char *s) +{ + size_t len; + char *to_return; + + len = ft_strlen(s) + 1; + to_return = (char *)malloc(sizeof(char) * len); + if (!to_return) + return (NULL); + ft_strlcpy(to_return, s, len); + return (to_return); +} diff --git a/libft/ft_strdup.o b/libft/ft_strdup.o new file mode 100644 index 0000000000000000000000000000000000000000..c9b3be46b39c58cad94b7eb436b04e54a3400bad GIT binary patch literal 1304 zcmb<-^>JfjWMqH=Mg}_u1P><4z%YXe!FB*M9T>P67#Tu6I-hzpzfth$to`88UHjn$ zNY11A0Ha5z>kE(W+7})NpEE!NJ6#`mG}k_0;BVz+U|{e#?)n3y_N63<(_Q<(qr3Ej zM|bE8h~jS72OgcSKRmi!e|R(>QHVXv5Smn)S5m5woRgTBu27a*RGgWgr(kHLXP{@O zYiL;tmNjM&0h!6bz`$4)#K2e~z$neb&M|?JfkB1=f}EgWL&{0{H-hL2M9aWn*DTD~T^IDauJMsASM9O3g{s zD@m;=VbDv?&&^HED}hRV5_3}-auaiM@{^&uQ%Vc;k{R@hONvSolNj`hD|10K$SD-z5(WkaW-KNM zLp|GqCWoHpLE#J%1BE5BQb^ioV1UIdOb$J6dBEugCX1jqfD8qtc&HF30|Pj=T@ zR9qaIW(=Tw7_}10P>0em3TiAo@0vjM!{lM~1sDU3hUte1hePxiK!Xb=%mCAG0T+QV zVD5+T7#M +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 16:55:25 by rparodi #+# #+# */ +/* Updated: 2023/11/16 15:12:05 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../src/ft_printf.h" + +size_t ft_strlcpy(char *dst, const char *src, size_t size) +{ + size_t i; + + i = 0; + while (src[i] && i + 1 < size) + { + dst[i] = src[i]; + i++; + } + if (size > 0) + { + dst[i] = '\0'; + i++; + } + return (ft_strlen(src)); +} diff --git a/libft/ft_strlcpy.o b/libft/ft_strlcpy.o new file mode 100644 index 0000000000000000000000000000000000000000..6c2ce8960671319fe599f994bd717202601a415d GIT binary patch literal 1264 zcmb<-^>JfjWMqH=Mg}_u1P><4z)--1U^{@B4h&ojj0~Y3oliZQ-xzpw*8cG5EdAio z8T!KGxa$Lu5|3`z4<6mV5BT@-a2OtF{>jkcdY`{Vh=GB@qucd?NAm$j4{O&K{F4rJ zxZdw_y}yEyzm=7Nf#Ib(L=tgO_vv|NrmNT>FB7zfA(7 z1FY;A3kSmdPS*z>-L)THfSuEP#31%CLugWIUP-A!a!z7ix{b!6H`)(iZj!pdQ&sv(~1&vQ(@YY3o7-J8T5)vib@ib81#xO zb3ru7VhV8z0|Nsy7BhZ=0*rxyp#)71DhwAD1jQ)>0|Oge1j2x%X$A&ZI737+!Kmj=ts`ZAY}|N{T5&zf`GXnCgOp^{|}%R!TbsGKPZf0`eEW$p!oCopU=R+ r&;T +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/07 16:56:24 by rparodi #+# #+# */ +/* Updated: 2023/11/16 15:11:46 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../src/ft_printf.h" + +size_t ft_strlen(const char *s) +{ + size_t i; + + i = 0; + while (s[i] != '\0') + i++; + return (i); +} diff --git a/libft/ft_strlen.o b/libft/ft_strlen.o new file mode 100644 index 0000000000000000000000000000000000000000..8f97ae8c453d7ace75010fa7497a6ed7c4483632 GIT binary patch literal 1024 zcmb<-^>JfjWMqH=Mg}_u1P><4z;FOb&;cy$z`)7C$Pnt$`P8Gc_J_xD*AF0Jk8al= z9^Jkl`1i4JH2+}WZxLi*VDRX6{ov7jfYGDV^~1|s|Ns973B(>|2u&)@D=Ae-&PmKm zS13y@D$dN$Q!q5rGte{CHMA@R%Nm1BWnd72Pz;P!K@5x)0*ul;>>Lvq85m?3AQ&WV z10o#x1lpLKdD+T&*f~Ia9N3+Kfq{kL<9}?@%nVEz!U7Bo3_?iaV7nL?7!;r?K{`Mf z%4J~CD@m;=VbDv?&&^HED`7}0i7zfG%1O;*(96p&N!4@r3)L+yNleaW(96jw%Z*P= zNhvDMOlQz5O3g{sOU;N+D@x2wMQGDYX3#4xDJn@!V$dtD%mvYKt0-XvGcYhPV=*8C z8sEuia!_HoD2NZjY;X|>1CmA<7+~Q95oKTig(Hj&qS+Z3!0F8Z#6iL}P_{ahhEX89 zKx`N-1=SA{L&l4dIY?}nKA4a#M1KKF+%YgPtbi)8fYLAuJxzh+SzwY#v;)*438)xI zA1ea`1BeC*!Nj#d;qUW5pMim)0VEE?u<(cRVfvuP!h{*385odKC0v-{0hE~lr9t{Y K@eDHuW +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/14 17:27:44 by rparodi #+# #+# */ +/* Updated: 2023/11/16 12:14:01 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +int ft_check_args(char c, va_list args, int *ret_value) +{ + if (c == 'c') + ft_putchar((char)va_arg(args, int), ret_value); + else if (c == 's') + ft_putstr((char *)va_arg(args, char *), ret_value); + else if (c == 'i' || c == 'd') + ft_putnbr((int)va_arg(args, int), ret_value); + else if (c == '%') + ft_putchar('%', ret_value); + else if (c == 'u') + ft_putnbr_unsigned((unsigned int)va_arg(args, unsigned int), ret_value); + else if (c == 'x') + ft_putnbr_base((unsigned int)va_arg(args, unsigned int), \ + "0123456789abcdef", ret_value, c); + else if (c == 'X') + ft_putnbr_base((unsigned int)va_arg(args, unsigned int), \ + "0123456789ABCDEF", ret_value, c); + else if (c == 'p') + ft_putnbr_base((unsigned long long)va_arg(args, unsigned long long), \ + "0123456789abcdef", ret_value, c); + va_end(args); + return (1); +} + +int ft_printf(const char *s, ...) +{ + size_t i; + int nb_flag; + va_list args; + char *str; + int ret_value; + + ret_value = 0; + str = ft_strdup(s); + va_start(args, s); + i = 0; + nb_flag = 0; + while (str[i]) + { + if (str[i] == '%') + { + nb_flag += ft_check_args(str[i + 1], args, &ret_value); + i++; + } + else + ft_putchar(str[i], &ret_value); + i++; + } + free(str); + return (ret_value); +} diff --git a/src/ft_printf.h b/src/ft_printf.h new file mode 100644 index 0000000..3bc6780 --- /dev/null +++ b/src/ft_printf.h @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/14 15:59:10 by rparodi #+# #+# */ +/* Updated: 2023/11/16 15:10:41 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H +# include +# include +# include + +# define UINT_MAX 4294967295 +# define INT_MAX 2147483647 +# define INT_MIN -2147483648 + +int ft_printf(const char *str, ...); +int ft_check_args(char c, va_list args, int *ret_value); +void ft_putnbr_unsigned(unsigned int nb, int *ret_value); +void ft_putnbr(int nb, int *ret_value); +void ft_putchar(char c, int *ret_value); +void ft_putstr(char *str, int *ret_value); +void ft_putnbr_base(\ + unsigned long long nbr, char *base, int *ret_value, char c); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlen(const char *s); +char *ft_strdup(const char *s); + +#endif diff --git a/src/ft_printf.o b/src/ft_printf.o new file mode 100644 index 0000000000000000000000000000000000000000..8b9f41ead6b198ac34126025a7d90b4d60727b80 GIT binary patch literal 3384 zcmb<-^>JfjWMqH=Mg}_u1P><4z)-=3U^{@B4h-B3j0~Y3oliX)-yC3IU~uU8(c${v zqqFpbM`!2@{(Y|hn|~zpwmYz0u9k>H4JkhX#MU3|Q3nMtA5FkK{uh z%#H%hhd4R~Jvv=4ycCDZd2|PIcywOyXg`eMH- z0|NuZSsHNpQWTd=0J&rivP&j(ht5HBNe9d&6EI!U;nD5df$Wl=X0 z){6iC|AQ=R0b8a7mgofwhPI&E*IMxZ|Nob=2o)H%f>n5QgQ;$Y&f^~4p)Wl4fub6O z`S2;t6l{~mTChzTTfsJI>;>7xuelc#BK(?L1O9^?x)v0j z{F+NaX^vkrwt-(WbOOJo?*e{J*9{)stspBsx_iM6=!Q6_dn?#+-Frb!_33VfI@|){ zMguUlRRc^-RRB}H5@5>p$8pyqpkVXpu7wm#9-XcyJbGO(c=YxPfR%U%c=Y-TcyxMj z9Cu(bU|?W4&cFdmw#QvRfHWR=eFLIAx?N9rbo+j2u;F0fZ^;8GfQs<%W8rB2p~~NC zj3n6Q!old#TYABxH}nXsNMv?>)9LyK6ty1B2N*p%T|c}OMbhHYTY7|lpA82%8=Ka;>f@O^v7(_sRWME)mtO{aatPo(7=3(cUz{tP= zst-UIBz=*Yfq}u1PoRy-nU{_E3^NZq2Uy+)B+0$OPfdLe-LP+L--Oj+kkj22j01|%y@(aw(3=9nB zILy(-Azp$*d^!$sWgOy8IK*qAeggTJoq>Vj&wmI2CjoHSF)(l=iN`ZSG=S8DQZGz> zJ(4)GIWLjKK}`sl`V45$gQTHB1U9%7Dh@KA6Up9RP;r=gL9l8D26m`sboJd(ahQ6j za)udDadh=!tPm9-aULXlCm@M~m@xP60db(=gY4gHNa7%~VCoeh#)DG|)GJ^SNLz{l zE)GjCtnAzzT%0^C40=VWIf;5DsTCy*ddc~@xv6<23~43t$r-81+3|@*>BS&kL1{^G zNfDHlmjq)aXC#7|#U({4r3DOndHE%&dhULqy2T}l$=M8gIXPvy@rfxZMa7xvV9iCD zc_nFJR%uCIQc-+TVsR?e1*sYFX+?>-sSIgFsi{axO7n^{)ALeOz(QdCddUoW#U({0 ziAfB4#g(~Wx+p&-u_O^BY^Y}l_Be&aHgNvMG-LrN(J(MDTt$-tr2}LkHc%M^%9qH3 zphhf|{|p+BP%cK^2bl+oUzj|c24xBc28Ilf0tN;KP?`tDH&mEG0;=#B)P5r +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/11/16 12:13:14 by rparodi #+# #+# */ +/* Updated: 2023/11/16 12:14:35 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +void ft_putchar(char c, int *ret_value) +{ + write(1, &c, 1); + (*ret_value)++; +} + +void ft_putnbr(int nb, int *ret_value) +{ + if (nb < 0) + { + if (nb == INT_MIN) + { + write(1, "-2147483648", 11); + *ret_value += 11; + return ; + } + nb = -nb; + ft_putchar('-', ret_value); + } + if (nb >= 10) + { + ft_putnbr(nb / 10, ret_value); + nb = nb % 10; + } + if (nb < 10) + ft_putchar(nb + 48, ret_value); +} + +void ft_putnbr_base(\ + unsigned long long nbr, char *base, int *ret_value, char c) +{ + if (c == 'p') + { + if (nbr != 0) + ft_putstr("0x", ret_value); + if (nbr == 0) + { + ft_putstr("(nil)", ret_value); + return ; + } + c++; + } + if (c != 'p') + { + if (nbr >= 16) + ft_putnbr_base(nbr / 16, base, ret_value, c); + ft_putchar(base[nbr % 16], ret_value); + } +} + +void ft_putnbr_unsigned(unsigned int nb, int *ret_value) +{ + if (nb >= 10) + { + ft_putnbr_unsigned(nb / 10, ret_value); + nb = nb % 10; + } + if (nb < 10) + ft_putchar(nb + 48, ret_value); +} + +void ft_putstr(char *str, int *ret_value) +{ + if (!str) + *ret_value += write(1, "(null)", 6); + else + *ret_value += write(1, str, ft_strlen(str)); +} diff --git a/src/ft_put.o b/src/ft_put.o new file mode 100644 index 0000000000000000000000000000000000000000..5894fe4ec22ccc283ec0b7b7c46eb29e08feac5c GIT binary patch literal 2728 zcmb<-^>JfjWMqH=Mg}_u1P><4!0>_{!FB*M9T>P77#Tu6I-hzpzY%cg_|f6|-=nki z!+wx zpMinFBiZ$jhb;pGLj!-SCIbTl#MpgcO$-bSySNz`7*Gu7?&Nrxz`(#@ctG3rPp9i2 zkM7bB`*mTenrr`X@%N}OFfeqx{@KaJz`!u``_InfAVpwPkVQlPfK~SjK~y&%FaRmz z-}eKo65<0i_bYUq@aU}l0rG-JXXuL#*XR8ET%R}pDBy4P1bL>p_6Gxhi!g}UUHZaf zKg=6Y6G5`A64+&5hA=QNbh$ofVMH>u#U7-%x%P(uf0HDL*WndqQ?LmENneG z4}oIXBbmd4@nR>(OGB`OTz`0Uy1ww}u7w60$lslZz=l9vhN{b>`G`X7;R&$xgh&ru z{7q_*hyX{M;ic~%vBVo#7#eZS_##f%$k4>x#KPFj#Dc+~fLDFU*!jVs)jmeppt&oSE11e_&5@%pw*a4zp@=Tk-3PAc}K;jGx3P`@)UFeE|6VTBIZ&!Ain6%T+~4fYEI1A{13 z`~s+OfrSAB1A_?z1A_pDYZw?nVTny#5vmsC15j!3=RX7#K*d4EGeg-Rst!be!-#sP z{806AAOWa5k=4&Z5(i~mm^s^##6fnz#6LmBK@`Y*P`HDwfW`+%Epj-hB8hV%`PU3d z99ex0k~pYpf!VtpNgQMcOk4qMIRiLlL6v|-VCe}Y2Es5ts3rg@0EvMxIAEda3RxVM zjuwCf84%{f(j5yID;ozpCxc#5YEGhFNoqw2gI;oeZf*d_ieRaY+%Bm6rr# zC1)gpnZ+eVIjMOJdU^RJse0~yp}NH-iOJavdO0~|x$%i9DMiJZ=?vvXnI)+RBjS@1 zi<YrDnvZ6(!~(%a-O9XQt<+ra(35B{S$1mlTyGCNbz0SLTB0qWqM^l0=ZOp&qC# zhI)-63RI?m(gC_5>Y&JDU|`sdCILz}$U>kr2NDC($l|d0+6ay$gbaF~1?dH)2ZRa; z>jzYD14sb_ByWO@0;PSB3Q(mAqSrw4mJx`9gg=55L(63(VOVm3)1dqavcdpa5d#AQ zFEmip(ZoS&K|(Ov4r)J03>lk1^&^Xc*f4z{HVBtN^cOlaij3#fi@T>=(?5HSBk zcnl1M&@utWhtVsb5mEsa0Oe6ol*07G!q1O^fq~iQe?C$c0_#u!DP~|`fKuSH5hQ`` Zeo#4y?sky64^a1WKsA6UP?VzE4*