From 18fb7cb8ae69fc3439266a154aa6b0f947d6805d Mon Sep 17 00:00:00 2001 From: Christopher Uhlig Date: Thu, 23 Jan 2025 18:41:18 +0100 Subject: [PATCH] a --- include/debug_tools.h | 4 +- lib/libft/_obj/ft_atoi.o | Bin 1336 -> 0 bytes lib/libft/_obj/ft_atol.o | Bin 1352 -> 0 bytes lib/libft/_obj/ft_bzero.o | Bin 1144 -> 0 bytes lib/libft/_obj/ft_calloc.o | Bin 1352 -> 0 bytes lib/libft/_obj/ft_isalnum.o | Bin 1160 -> 0 bytes lib/libft/_obj/ft_isalpha.o | Bin 1144 -> 0 bytes lib/libft/_obj/ft_isascii.o | Bin 1136 -> 0 bytes lib/libft/_obj/ft_isdigit.o | Bin 1136 -> 0 bytes lib/libft/_obj/ft_isprint.o | Bin 1136 -> 0 bytes lib/libft/_obj/ft_isspace.o | Bin 1136 -> 0 bytes lib/libft/_obj/ft_itoa.o | Bin 1728 -> 0 bytes lib/libft/_obj/ft_lstadd_back_bonus.o | Bin 1200 -> 0 bytes lib/libft/_obj/ft_lstadd_front_bonus.o | Bin 1160 -> 0 bytes lib/libft/_obj/ft_lstclear_bonus.o | Bin 1384 -> 0 bytes lib/libft/_obj/ft_lstdelone_bonus.o | Bin 1272 -> 0 bytes lib/libft/_obj/ft_lstiter_bonus.o | Bin 1184 -> 0 bytes lib/libft/_obj/ft_lstlast_bonus.o | Bin 1152 -> 0 bytes lib/libft/_obj/ft_lstmap_bonus.o | Bin 1544 -> 0 bytes lib/libft/_obj/ft_lstnew_bonus.o | Bin 1296 -> 0 bytes lib/libft/_obj/ft_lstsize_bonus.o | Bin 1168 -> 0 bytes lib/libft/_obj/ft_memchr.o | Bin 1176 -> 0 bytes lib/libft/_obj/ft_memcmp.o | Bin 1192 -> 0 bytes lib/libft/_obj/ft_memcpy.o | Bin 1192 -> 0 bytes lib/libft/_obj/ft_memmove.o | Bin 1256 -> 0 bytes lib/libft/_obj/ft_memset.o | Bin 1152 -> 0 bytes lib/libft/_obj/ft_printaddr.o | Bin 1712 -> 0 bytes lib/libft/_obj/ft_printf.o | Bin 3024 -> 0 bytes lib/libft/_obj/ft_printhex.o | Bin 1552 -> 0 bytes lib/libft/_obj/ft_printnbr.o | Bin 2312 -> 0 bytes lib/libft/_obj/ft_putchar_fd.o | Bin 1272 -> 0 bytes lib/libft/_obj/ft_putendl_fd.o | Bin 1504 -> 0 bytes lib/libft/_obj/ft_putnbr_fd.o | Bin 1760 -> 0 bytes lib/libft/_obj/ft_putstr_fd.o | Bin 1336 -> 0 bytes lib/libft/_obj/ft_split.o | Bin 2392 -> 0 bytes lib/libft/_obj/ft_strcat.o | Bin 1232 -> 0 bytes lib/libft/_obj/ft_strchr.o | Bin 1200 -> 0 bytes lib/libft/_obj/ft_strcmp.o | Bin 1216 -> 0 bytes lib/libft/_obj/ft_strcpy.o | Bin 1192 -> 0 bytes lib/libft/_obj/ft_strdup.o | Bin 1408 -> 0 bytes lib/libft/_obj/ft_striteri.o | Bin 1176 -> 0 bytes lib/libft/_obj/ft_strjoin.o | Bin 1568 -> 0 bytes lib/libft/_obj/ft_strlcat.o | Bin 1320 -> 0 bytes lib/libft/_obj/ft_strlcpy.o | Bin 1264 -> 0 bytes lib/libft/_obj/ft_strlen.o | Bin 1136 -> 0 bytes lib/libft/_obj/ft_strmapi.o | Bin 1456 -> 0 bytes lib/libft/_obj/ft_strncmp.o | Bin 1224 -> 0 bytes lib/libft/_obj/ft_strncpy.o | Bin 1192 -> 0 bytes lib/libft/_obj/ft_strnstr.o | Bin 1360 -> 0 bytes lib/libft/_obj/ft_strrchr.o | Bin 1224 -> 0 bytes lib/libft/_obj/ft_strtrim.o | Bin 1688 -> 0 bytes lib/libft/_obj/ft_substr.o | Bin 1464 -> 0 bytes lib/libft/_obj/ft_tolower.o | Bin 1128 -> 0 bytes lib/libft/_obj/ft_toupper.o | Bin 1128 -> 0 bytes lib/libft/_obj/get_next_line.o | Bin 2448 -> 0 bytes lib/libft/_obj/get_next_line_utils.o | Bin 1880 -> 0 bytes lib/libft/libft.a | Bin 81400 -> 0 bytes src/collect_redirs.c | 22 +- src/debug_tools.c | 22 +- src/format_string.c | 6 +- src/parse_cmd.c | 99 +++-- src/parser.c | 35 +- src/praise_the_norme.c | 22 +- src/repl.c | 6 +- x.c | 528 +++++++++++++++++++++++++ 65 files changed, 674 insertions(+), 70 deletions(-) delete mode 100644 lib/libft/_obj/ft_atoi.o delete mode 100644 lib/libft/_obj/ft_atol.o delete mode 100644 lib/libft/_obj/ft_bzero.o delete mode 100644 lib/libft/_obj/ft_calloc.o delete mode 100644 lib/libft/_obj/ft_isalnum.o delete mode 100644 lib/libft/_obj/ft_isalpha.o delete mode 100644 lib/libft/_obj/ft_isascii.o delete mode 100644 lib/libft/_obj/ft_isdigit.o delete mode 100644 lib/libft/_obj/ft_isprint.o delete mode 100644 lib/libft/_obj/ft_isspace.o delete mode 100644 lib/libft/_obj/ft_itoa.o delete mode 100644 lib/libft/_obj/ft_lstadd_back_bonus.o delete mode 100644 lib/libft/_obj/ft_lstadd_front_bonus.o delete mode 100644 lib/libft/_obj/ft_lstclear_bonus.o delete mode 100644 lib/libft/_obj/ft_lstdelone_bonus.o delete mode 100644 lib/libft/_obj/ft_lstiter_bonus.o delete mode 100644 lib/libft/_obj/ft_lstlast_bonus.o delete mode 100644 lib/libft/_obj/ft_lstmap_bonus.o delete mode 100644 lib/libft/_obj/ft_lstnew_bonus.o delete mode 100644 lib/libft/_obj/ft_lstsize_bonus.o delete mode 100644 lib/libft/_obj/ft_memchr.o delete mode 100644 lib/libft/_obj/ft_memcmp.o delete mode 100644 lib/libft/_obj/ft_memcpy.o delete mode 100644 lib/libft/_obj/ft_memmove.o delete mode 100644 lib/libft/_obj/ft_memset.o delete mode 100644 lib/libft/_obj/ft_printaddr.o delete mode 100644 lib/libft/_obj/ft_printf.o delete mode 100644 lib/libft/_obj/ft_printhex.o delete mode 100644 lib/libft/_obj/ft_printnbr.o delete mode 100644 lib/libft/_obj/ft_putchar_fd.o delete mode 100644 lib/libft/_obj/ft_putendl_fd.o delete mode 100644 lib/libft/_obj/ft_putnbr_fd.o delete mode 100644 lib/libft/_obj/ft_putstr_fd.o delete mode 100644 lib/libft/_obj/ft_split.o delete mode 100644 lib/libft/_obj/ft_strcat.o delete mode 100644 lib/libft/_obj/ft_strchr.o delete mode 100644 lib/libft/_obj/ft_strcmp.o delete mode 100644 lib/libft/_obj/ft_strcpy.o delete mode 100644 lib/libft/_obj/ft_strdup.o delete mode 100644 lib/libft/_obj/ft_striteri.o delete mode 100644 lib/libft/_obj/ft_strjoin.o delete mode 100644 lib/libft/_obj/ft_strlcat.o delete mode 100644 lib/libft/_obj/ft_strlcpy.o delete mode 100644 lib/libft/_obj/ft_strlen.o delete mode 100644 lib/libft/_obj/ft_strmapi.o delete mode 100644 lib/libft/_obj/ft_strncmp.o delete mode 100644 lib/libft/_obj/ft_strncpy.o delete mode 100644 lib/libft/_obj/ft_strnstr.o delete mode 100644 lib/libft/_obj/ft_strrchr.o delete mode 100644 lib/libft/_obj/ft_strtrim.o delete mode 100644 lib/libft/_obj/ft_substr.o delete mode 100644 lib/libft/_obj/ft_tolower.o delete mode 100644 lib/libft/_obj/ft_toupper.o delete mode 100644 lib/libft/_obj/get_next_line.o delete mode 100644 lib/libft/_obj/get_next_line_utils.o delete mode 100644 lib/libft/libft.a create mode 100644 x.c diff --git a/include/debug_tools.h b/include/debug_tools.h index 3f3dd26..9a24875 100644 --- a/include/debug_tools.h +++ b/include/debug_tools.h @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 18:34:37 by dkaiser #+# #+# */ -/* Updated: 2025/01/20 19:38:02 by dkaiser ### ########.fr */ +/* Updated: 2025/01/23 15:22:14 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,7 @@ # define DEBUG_TOOLS_H # include "libft.h" # include +# include "token.h" # ifndef DEBUG # define DEBUG 0 @@ -22,5 +23,6 @@ void dbg(char *str); void panic(char *msg); +void print_token_list(t_token *token_list); #endif diff --git a/lib/libft/_obj/ft_atoi.o b/lib/libft/_obj/ft_atoi.o deleted file mode 100644 index b5601c8d2f22565c44594f0d479cf6d188bc1455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1336 zcmb<-^>JfjWMqH=Mg}_u1P><4z)-=2U^{@B4h-B3TnwQeoliYFYhN69{Q}Z<-1QGg z^0?~{5cQg++4Towx9bm&$Jt=Y@k0m>4fG9_T!Xu8x1-0mc)}FAO?e|6p~aJ{C7x)~)V# z{lmZB^-Jtw26ty?D+LXg)TGSBJOx7|JtI8>T|*O1D3d`1*p3AYD=fp)+8tlGKV42ECNTl0*i*q~c-* zz2yAd+|)dvSYCcfs-C-FsBUpdVsbWvUQudJqF!o7d|FXrZYtC!$|z}|c2JnGp&8=< z<-`38<%85B14SSQB*u&^2xMEJD}>6U3#$XgLD5C7ejT7*keLQRj0|A*Dc2=r1RhurE+vTHV*cd7&XX7-!!n|W{My%i7EVvKM^ZA?J`Fla}g&6T&>>D@ zk;Z|>UOxu5y}*`_ADR1r6FY+#9kL`%@a~C)cd>jb8D|VBBRuLs)CBxFh|0wyHaL&O zQx-nzMdGsB@Kt@2mrOLS=#3rF+O5?C@aC(k@{8zIW9%y?Qo*(Y{@hnS@M5zGyi~7N zgBoJBx(fLE!$PL1{L)L{jbPK~L1m-d@T-CD^nY#{iEGd?CV1p6d`x=|tHDVR5zwYSW zKT}{nfhXtimUO`-jgyXcWb_87Hg0c{eA4}&(FN@&9-6VMH#l*oOcy;p1y1H?;FB1* QyQ5rI>z^2+_U>5!0xCnQ)c^nh diff --git a/lib/libft/_obj/ft_bzero.o b/lib/libft/_obj/ft_bzero.o deleted file mode 100644 index 14b59f26d03aed485cd635cd4a5b419d40b2d1b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1144 zcmbtSO-sW-5S^{XZ^cg#^bk)f=u$;d6eLn(7ZDF)kD_T!sc2hBBWgiB2tw(lH~lHz z1-<$c3L+FddFxGQ(%ra(deMQIeednOog|wZYiBFM7^q;d4nIt(0FRnz`mzZ<&<#mZ zei!BIx+tI5#EaFSt&d?*N!CThY6$lF3?Oc;2J`8fRde5})q^KU#N(^R^rn+KvGd0K z0$<>=dq^+g!5>dCsK={Mhzv z;HhE}c)F0wIeFCb1<&D$-Q--+v(u-*UFXc^PWCY4+BqjU`afVC&Gb#$Lx-4>2k$F6 z_3AN+gtRtYM0^qAiiZ7DxIy>zSN|+}>C70W9%{a!i-^^HwJvFz-g>VS4J)6Lwh@p< z_pQf+BrCdzIQ(x~s6{bNOg)4gG$uvz(H$wj(p$|Y%PSR(BfkQ4;Y!~)>{q&M3znFi aKN=`aAmut%JQ#2j6b=Q7P0<&q_BsxC$vx2c?!i*lU5w#bOu8TROPz zWTE@>5>|`FMSFVLD}QmSc78!EsQJ14n;E9mZh{_Y*6t^;nprD1GB9|8FZ>)eI%MzZ z@op@8m?@6-XEbJzkZ$y?y>R!C7VSyd#3&|?$Mk3xYLj@fDNSDfMTc#(={l84%~fuf zgC9vGly|*)4d4a$>_wz=|IoH#Oz(^7HtTd{WsXyf$pL|(W$_`>{-Ie ze>8^y+D}0e7=Li$Jo`h4B*`x^#riAOd)OB^7Lvf^{8@}s&ws7YV=eWR_e2_*%(vMW zkokg(7!WQwgr{*Q#*?`pF-F>>e+KkJO8vHk*2f r^gugl0}Lb5j+6D&H@SN%Y4ZHnY5S@!LekCD_g`!2QR4{84g~UQmqDDk4L_q{eF7ZNwULv^_qF^ip!Oqss zpJ8v~Pw)>|S=kFZbGN&$M{IOpX5PG=H* zy^Y(~+slvZ%MY_1!FbRf!C3V0MLUXkwjINmz3O?S5pUg(q&|Ftd@i??oLaR@HLISS zn`iSZotj&i7SLOPVORj;Vh4;?!WfJ8^xom1apcL#vJ_V0iJMR^7U9@H^)E)x5Qg{9 zPRCsx-aL+tLmKbxB5{QmYOZxsKXX`FE9Bgy03poe%9wlZaH|B&ATnwdt|P3}+XBx1Q==0%OuTkrKk!%`=yO$5aK zxNEE*(8)4>QZe|CuHi`--BcYu*cXdN1W!7;BdM2sr`;rZp@3HOB0wKz`o=-MnMdPmO^g&Sn1vai$uK)l5 diff --git a/lib/libft/_obj/ft_isalpha.o b/lib/libft/_obj/ft_isalpha.o deleted file mode 100644 index 3989dd3002ec848e59e68923bc131cffb7ce989f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1144 zcmbtSJxc>Y5S>e6{ES4gP_&4Z3TBBxK`i7Xej#EZ+6a3-*} z)9l_iyLKy%{;V~IzR*gbZ?p$}+55mVDb8PDFPGa$Ep9u-imawqvLY)o>6O(b4XJ60 z9GcZQ2CJU5X2%AHo^bXYa&*Yj50P9VUd9H>e=&OO7<_#8D@Xgh={Pn{8oWP? z#Fr{x@#OVwS&EX8@VzMwA{gleCcHaW$s!0()q1haNI7){;zBA3qUd=bN;j_SRFSLR zC`araou)k{OIILj&b1UyIe%G`t`l7SA25qz`Zn>jIk*f$ zF|1#}I_>SR`eoG8of$l)@%)rYBIfxV*9^{VeKZpTvyQ0)1jPN=HReycVO>WK;eT`o z3o$%4H|V&p2TkjobhIPZGv9AENnXjJ6?_jcjFG-^SkJs}3&NtFKNB!Lpy_~}Kos5` O6$`rYBK1&T~J2= diff --git a/lib/libft/_obj/ft_isascii.o b/lib/libft/_obj/ft_isascii.o deleted file mode 100644 index 2023ffc46272c49cadde08318eb6cc83ecb0fd6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmbtS&r1S96n?9w{ZcGC6n5B77382&5FKK}%!ud^2^|U>ZN;Tl!QF!eA`wL1`cpc3 z4EkF-b?PqEd+W?LEq18~Gw*xfeBXP!JKHTB?u9fBWN5Gr-<4zmo)yyYXalBT5=#5M zw_ay(-x)wVj(fKo>yz|-tWT=*S19K5Tl&hbS+RIS&*oT;WzyO8RRO(LxXlTm-5!J1 zPHL&?*!UART11`}#S(2hiR42lACI1)fa+g@o*@DspQDb$Bi=B9!dZp)W|6t(mMw=n zRm);krI3Af0YaE*`N5nU+vOEtj@ugMx zxV(A=tYuzvX4cEK7Pn2m^?yJL&Gc=efhLBi{r46%Y1N=};=(G4mIxrB6}^2#EV}*H}La!KTPE1^>|k9z<{%QXsM+ z2F;6_d~`?BFZofk$?`%Q#)Y>7Okk#O9P~?G$o!;>`3pWX1cLV28AQRmqr+1nJn@x7 H5cGcm6DUc% diff --git a/lib/libft/_obj/ft_isdigit.o b/lib/libft/_obj/ft_isdigit.o deleted file mode 100644 index befcb643234ae156e48354d1a78b234a8da03d3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmbtS&r1S96n?9g{ZcGC6n5B7738E+P#t2!%!ud^2^|VsbOu20iIh6Y>kT}c+;Ss{%cZNNB;L3XeG z)^2w1o86V$5bhhTV27mdLmg6`y+S6H+SC_!th{Yj^+b{-Sv;0lT@tX@3b$ziw3{Q) z8WAlz5gd8KMsvv1qL`;`I~;lNr9#7}D4_b6pl1lc$LFA9|A03Pqi{;$d$Y(~;yK$X z+7~uw1*MREbpd>sX}Q6i>k2pXz#Lxh=dwiHYH(mhlbgWujsvVvt5mEia@88QSmrPr zbGTW!1Xj1MOlFmHrMg+M+}8gAQ8d%H8TK?WMD4z}s7b2^ofGF*NyMh7mZjIffCqGM zfAue;mwLu=sUhdj>fG@C3hv|*h0c7RdL^o_lK$qSjAbTNO{W%@wSE<1_Hdv|nrB811T IvJbreF9IYhz_w~W<+#|gbszRwxX14xO1>TC4$IXe@aJ> zL4Ql9PThriPiMAiu}eLedEfiy``+8#*>>h&*QaS9LxU~&t|SZatdK^ZHedqAA-C6g z>oj}!&E7&QjC-pc>XP(*q)V!^SIDN*oBHyORj8P@o=mY6OT?3FD+2ag;Wi_Hc6$U` zBdWzFL!(dFXdZc56pOTNN1_kDbU1j50;+!rdWHaed=5MI4|&4~3a1smKa0#Ip07C9 z^@`0|Q7L3!T>u|uT5d4srpnC%Fo)L%xhxU48XVY#$xUDd#{pKXRjZbboL%D<%O2+9 z4mXRJ!0OhO$*gj|R5z=Z+xkBshGzOUK~EDy)b4wWnzU-rIdOiKL~MF$S$h3TctH2| zSN|${sb>P08gjm_l8EJenb#FgmENg^f~8MV`v{2pao1Qs3c-fRGI{^e3?2k<8B!p! zAqLHgntXIe(l7a8v&r&88^(Em2N=Ul-`MMyypXv`7xU*_W&i~3vQvn>cSnaOLU`;d I2f*w90+RnqC;$Ke diff --git a/lib/libft/_obj/ft_isspace.o b/lib/libft/_obj/ft_isspace.o deleted file mode 100644 index 6325fbb39acddcf3c26bccec42cbb9e614e4278b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 zcmbtS&r1S96n?9w*)J?Q6n5C?P(cnV1<@fk%#4T*kcu z?br54E8D%h>FPX;d-O8WA@SQlhjd3TkjrG&^o32kSTSpQD$UX?nMf@!iqdTclf4Am z^*(6Lm=+(23_fC;8RThE%+aH-Qx$2bfi_R_z*cwK}(1 zZZDs3xM`gMYuM)|v&)52!>rm~>;DvSG}E^U`R&=H^-SVYL(bP#5^FhM<`sogrS~dOYUz{I4i?1yxNF2MAy^ezCjUR0#e)zo zLkdJT#GomG$wzl2{gUrDn=H??VVt--Kom25W4~YWLgpo1%%Ap{ULk0Y9mk6L`r}Xt J4}1rH{};1_N~r(< diff --git a/lib/libft/_obj/ft_itoa.o b/lib/libft/_obj/ft_itoa.o deleted file mode 100644 index a861d2b4e4f588856116cc15d31a70d47cb8538d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmbtU&ubG=5T4!ER&A9i9*PxQdXPrUk`_TIA}e*81_l2Q;g+O7O5y zd<4ORp#B5Wix*GgDQTgNo}wp@UW8(Ds3#Q`Psi)5 zQU9VU4W$;}U@70L_^{gZW7e;l{_G~N-!^@^)T^}NUjJJfpml+q)ltv%mDUKIRTFzO zt=y-u$2X0A#2znMBi>|YJ1G6UccSi%>*YYa6 z)RO$xeaxU1RpgcCmY9e9El39QTn(K>%LuRbe|I`htfW_<`J`g@;c@IQ27X7^z2AiC z$;kV(0~Z#!A($BV#@Gf|G}rYr&Gw05DYplAC0Z4 zlSld9@-; zxHCmT2@w~DF-E&Hq@2Ly{})4?KZKfU=}i&@e+F&hrN0*n!&CS(x zAH!N|l|+#t`fDvM zY5)BwqF(Hu+C+O(iN?uwauA164xmKq>E7t>k%9)Vr~S%^uH_g8yVcKe^0r)zcC`Kv DAgurJ diff --git a/lib/libft/_obj/ft_lstadd_back_bonus.o b/lib/libft/_obj/ft_lstadd_back_bonus.o deleted file mode 100644 index b5794314bcab3440880bb77b30ffb1277f353a3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1200 zcmbtS&r1S982whGtSl@#1a`1f1vR7;M2FZgbBKrtg*t@o>Wbkna96M(>QbYcmI7v4_2^EU9?PIIEqvoG9@d?e(Co9cdqQFM7*4{=l;$H-e>P~tCTA? zjH=}w{T~v=Fnyz8-yyot-unwpwJPROkQY=<<6~gwcDP;b;qs<3VnDHw6#Gn5GQxR?# diff --git a/lib/libft/_obj/ft_lstadd_front_bonus.o b/lib/libft/_obj/ft_lstadd_front_bonus.o deleted file mode 100644 index e72302fdf8b59b8e6706f38857bf55c779982bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1160 zcmbtS&r1S96n?8w_7jT^g&pjaLJk!L(IE^omxzc+=n}T-hEcnQJAwt#Em*wxKXvgR z>25b~^`6e#ro}GxVCMVYH}9J_JF_qOlcR`X0EYql@SU*=(AC83K+eK6OhM7~-%bCy zZ~D!i+0OUPb{wH+`e(6WT0|c2T)jadm)lFG4(;--4{2M=RQeAB8W7C5Z(Pxq(9u?w`~}RT`V>q&0pzu;PT2eXr=#ALV`l#My>C%L8J(vL|5$TS@e%4i404dc!9VkPhr%SC0Sy diff --git a/lib/libft/_obj/ft_lstclear_bonus.o b/lib/libft/_obj/ft_lstclear_bonus.o deleted file mode 100644 index 5bad20bc3635ff1e5d57cc3ec3ef937c1585960d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmb_c&ubG=5S~p+8?}~HDirErz4!y#M^ikM9%LnreTXQCId}@2^p%uuHjsURv`{@r zge8~$MH28(1kWC&7a^dBc*{YkGrMonb=h7@2WID+Z@!uLGP~qM<>m97WdWN7PvIhC z7ND8Cz)l1mn1@?XmElkM@wY9* zEk#lQ>*x(wy`r@;KUX-xA9xRWa!Mn<9`wIKF&5Rk0BbSyCCX80HV=uwUm#X-_}a(ysEAR+HD+wh~%nS z+v~V3y5hB%jZsd;S!dJiWz*lI1nnj|?Ks^}bJM#=3h2LpOvGXOH1srI RM3mKEFbjD%RmLFQ{|})hl+FME diff --git a/lib/libft/_obj/ft_lstdelone_bonus.o b/lib/libft/_obj/ft_lstdelone_bonus.o deleted file mode 100644 index 3bc32199123b71903122dda89010efb8ffd4d8f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbtSK}#D^5T1>qwN*(=DS{pr1c{(eBRxnCWlO3qr6>qFcnX{NLeyjzvM&$|Vxb@` zIW$NAPY>2>|3kq;5B8QrA&te=vVhHk4{)C`3(z-6 zC#D^khF4H>qd)HVzgagr>$_3=*6nWf-7dJ@(ybd^4SvUYbag|L-t|w|DHaQM?vtz> zdA^CueXu%NYkqq2MGt2$AWu%VM#sn5>_w(HGjWUsls{th z*yHeTkaj(m@}}>w@QuO8vyfXv&!#o0sd6J!hq4j)vRn!Lb||V~l2B_&2|2ADM|_r}-8?-Nt=c+wu6IJ-aUx^PZYQ;0A>bf^$@wdIPd%Ti&!d)luA`gA^KFyFnCCMV49+b5VJ1e*I;Qq8Anw6GgLzLE zY-(iS{c-*ogS7pB(}Q@=wEszT)-#_rn|lAE1FbUzc!@|mPU@*|a`z;0^!ywphG}}l Syv8U^f2j)(MwP=LslNmAlVY5QgUx@mq;vAt)Ft6?D;{AcArdql<`$7%bx@oQUIt!{SGoIAe{05OCwGaHqrQGBzWWm^#@*{P zY(%3=;mI{Sd2Hpva}gF{vomw^Q&Iv9$)gz;yI`D!jFH}s&O1EgC~|VLeHvE#LpOnF zUwdE|GYGUc`n)#yuD4nZwzv`MKdA9WFDgC~iHswTgss3Rd zqE`LYyr3~X^+69bt?CroL_v(+Ten9UEb0)o{}+uRYeP5Dbvu=fh9#srdLvb@c&px2 uQl$aypfLh;;Y@ezuUA~AdDD*UKjx99kl3RGsQhn7i?=dy&&zBIfBg?}k8NiF diff --git a/lib/libft/_obj/ft_lstlast_bonus.o b/lib/libft/_obj/ft_lstlast_bonus.o deleted file mode 100644 index b968ed35873abe1170d8de921dc998eae6a14b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmbtSOG`pQ6h2qQ?1?=Vfkn2eAP1F#Xc0HeyhKDqEyJ#M#mGl^N3cLzM1iyg%^q#SFbu(w z)q1sB&8~IR>_UC=iI(1Ht#-O=wat*#qAcp$PW_F*@iSynsrBgMmXkZPE73%fC0RU{ zSXmM!?J-3G&A2)MqY*YDBLks(Ji`of|?Hp!a>*u1ZxYOXkPHk=j z%egMFe6?J5D#%r;++mr$qnOL>{5i0iQ?i*;%ob{P+3~jiPZ2>eeVd@Ri7BvmZ-J>- zwRr@@`Bf6@x`rjx^$WN_@Ag;yGHPkhIJ#%BWdPw%bT zqX26viM9TZrjZMvo9L?Ti$T+ZBptnx)JvY)^w}hNp@4SMivWX|=^N{M$%{5G#l`$N YkLefs{l}5k-;O$qqVcdV^P;Z*0{m51*Z=?k diff --git a/lib/libft/_obj/ft_lstmap_bonus.o b/lib/libft/_obj/ft_lstmap_bonus.o deleted file mode 100644 index aa0df25a4fe73803dfe6f6bd3b8e03df60bce170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmbtT&ubG=5S~qI6KgH;$3cj~o~(*}G}VLjAggihLqtJX&{Nn=wp7e+H2Z>8C>|=s zB?$d9ihqCz9zC?)iU-L*AVlgR-UZ1$CX_jb-OK$!v8 zVO%K`pfEActt7Qz29ANl<8OT9hsERdE|1%LJa%^Z#(EdTEQUQ0c?`SIp8i0h@0`QBqUG|P)@kuA)ZuU?cXT@m2)Fo5y$0T^pV zqcoE*Y~g~=B2G^Bksdc@i<`O1@u}Q7&s5T-IxKFEIGi*n!Hb!I?`p;!nYxr(U=5D=S_1xMMd51?bPGThgJs8?+ z4L_pc?=*Z$!%d0jFp`gqMK1#3dcY#l8pc(Xwfu(5guf<$)m`BN^P&h?tr-MvNUP^tRszX};2jOGAZvX%Q diff --git a/lib/libft/_obj/ft_lstnew_bonus.o b/lib/libft/_obj/ft_lstnew_bonus.o deleted file mode 100644 index 1e5a07e13c2451995bfbcb927f6df653dc0e6e70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmbtSK}#D^5S~pWNo^`??4ghr_E4mS`Y_@_Jd~A~x)iY>1nenn(iO$*2C`3#LTEuM z1TQ`M2Lz8Ed+VWx(tpuQA)uGuauCv)&71hT-IETy{bs)T=1um?eyps&Nf`!k81Ncy zD`o-A)NO7@sSSB}2vw)|+d00roL;y8&BR8Znoh4WaE`kJ*w22Y`l{%hB6C{pJ3TW> zf7rQ5i1g3zuvRWFTQ63<`mP&Tr3JAd=I2U_FI7sy$MnE3jyA#Qm_{+5&3(Zi`V=`j z6cu``OqnOC@}o@3Mg7KPll8RX;!^ivMEfXBD4TI)=}j#4x`9753@QyUv$zmhPO#qX+M|bP{vk&$z5{ zy7XKxw4CRddWQ*d|9mr8Uns$nLI(Da>$jLB`G2MsvCrgx77x!epR}9q{zVUr&In)< lkvxvi)4g%;X=F?7e@=xKiXJo5m?h0$D&hOFa+Jj9{{oIxXk`EZ diff --git a/lib/libft/_obj/ft_lstsize_bonus.o b/lib/libft/_obj/ft_lstsize_bonus.o deleted file mode 100644 index f3ac188979de7ec38e52bc6462417d5dab3db804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1168 zcmbu7&r1S96vyAHl>Nk_Ltv1dN~ocvAUec`Z7vZVqK=`fZ78LJJAz3PAqC>4f1z7{ zLdT#(*Zzbc0>M-Fpx#?&wqfy958j*a`^`rbCaj-MfwOm4&$ zw(V@eD#cb3EWwtSR#xLex}z{m38B>wK&wTx=;&bh4rk0DCnwu-!+7L2kQ^Jh!~&Q0 z5A^dw@cG?uH`wO}X#S+a-C5Lp%G2i#cM5eooh_HD4$CPBAVxK40pV^!fjJjNZe?-h zmEM|{irX~~?8M?0u&m<%%aw~oyM(M%<~B?1A1yiD%AEnL*yk3r^Xb!yRkXdM|0AN< zOm{QjJ46?`_rFC>wW`fwLM*64)YraTrvCnU+@N>+YyTql(wWQXs>%5=6{42&<+`RY zwe((16fOHC+C@Q(-dnW?k*uo_wf`G6kcH57bk#Cq(6oTmM{gwiCGR(zTHYw2W!wlb mge%>#zh81u<}JFIKkJd65ZI#=sQhn7n>A5*=vDTFzyAkFE?n0D diff --git a/lib/libft/_obj/ft_memchr.o b/lib/libft/_obj/ft_memchr.o deleted file mode 100644 index 70158a2049f1ad3e9bf68e5aa8f4a510362fc3cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcmbu7O-sW-5QZnU_+70cDAYqdsh~?+6huKPH8zNdiaCm=HKn4dkVa5J6a=C4qCdrp zc=zDZ9{U3-6ujuIH=Rj$;}Uw(f!%%Q*?D)8Y_7G9wUDBK2nCkmHxm?~Cc%`4Q_u&! zVCdy{y?oUupVjrUQPW?wChdMq>J_7*SG1I^XAud0jOe#oQ}Ifcw3_qw zOuoGr$fVPY>eQ;0Ju-`GBFU00KAV`E=8}piMp_Ffmph=GN0nHASNA6>&04oUIce_x(ctsE1W5bKa3>W4rs(x875H|VYqU`of*d=hv=`$ z5Vhzp)_IA^rH^tVY2g!S9R)GEZ#lfb9KnJNQ3rob4OtjR3Wpp8-e`Y5QgVY@%tM=L5o#wVvoMMzW7dLswM`6d{} zE@PmrvFQeX^B{6sWNF$KJG!pTRC|NDjU5DP8$E74e0|rd*421J?bz6(@NgE1v;L0f zdKvG8WqxCT1l7!EL|u7%N%>2n?sg6_FcBJ zVUHJlCvyla?;bhK-QUUP9nX!A{!cJ~VtOYH+964i$ImNr>Q!wB6Jm8L#Q0XrWvc6k zu|U`LSN#}j>C6dSs>%5Y6=E#sOFyG9we>+wlvwH{TE&2vDS_}W!p~}4|1>SE*W*fR zeMK>-UvSdV9Z9|9wPuGBq2CP?fM)dcj&;4{qAhm2Lf;pYC=fWN-5BY2M@9ONl5IsU H-gW&CJu_+9 diff --git a/lib/libft/_obj/ft_memcpy.o b/lib/libft/_obj/ft_memcpy.o deleted file mode 100644 index 62d92ff0944cdfac21ffa4965536e2f26c5a28bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmbtTJxc>Y5S@$S_eT^#L5qlmADATu1+kE5JY7UZ#FV0!^Fl-~N^*fHh=nMI5b$UC z3#7`JAwNdd&nPb?zIb_AbL%DSEpx=1 z)!xVcyCAl_@$z=fUF_y5|4N>{XIP8J7eW&&R`STmgl3{F$|B*J*+~ImKzyopu>)Em zs10|uw%y}5kDyM2B2Cj$Pw+Mn?`{d0*g-<$pyM{fcdb#islg3(V`IOfyL*v2`!zDDa+_~)-Nz6{Rp3@RJR>1*wXgCJ2WG)BHJhg2rgIea)vDn&H zBAjy!^B7pxIx(1)-cMx>+wzwF4;V%>-ARjYk(l7#c?G9lHAaz;)})GvAADR=zkeJH z^jv@SPotOCjNnj1?jKS`#BzU`=M+tCeNl;mrB6!h2uP#%Rzv#dRS_|rRSg|UGme-l zA})xHhJ;Q&dL!wVdZWEvi|`+~1fU%=-Lc; JCvW!qe*m-*Z)5-f diff --git a/lib/libft/_obj/ft_memmove.o b/lib/libft/_obj/ft_memmove.o deleted file mode 100644 index c49861ba76f5b9a5109075150219ddbfd55f9b8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256 zcmbtS&r2IY6n?u(w5>l&4=w3oJyk&m6$@z#B_-WDNG&4fD7r~UEbS(c-4rWG52ADl zg&qsNB7hxeMZ+p}C;*8mhp@;fl_I>Yr-#5d~o3HlUH>P2L3Ikq3 zyHYH`xY@?p7R@9U8uGt0gWXw z8UW^faeb$N*{@vXO@(~1`-wq_kbKvaV~q{szaePh5|t3$b;J~RaM2y>e#Mg}89$}}QIbR~>1%crkv=i3I=v diff --git a/lib/libft/_obj/ft_memset.o b/lib/libft/_obj/ft_memset.o deleted file mode 100644 index f3d6f95ee280bf57a7665b1b7050b5ce87352abd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmbu7Jxc>Y5QgWH;I|S*QP3h*D(Ir3APN$RXATh&@k-H4+z`==kXykBY9WXrjlV$r zDT0NqWm-WYU}cw1XD++va>PalcK4lU=iSNP=E~eyix>u|Fkl&eGDQI%HJJ2q5;~y+ zY^(fkl`m@L(>JSZSFLBWPP-oiR>iJa6|-&`FBSXkHf~*;b;AcsX0`Z=sUwYJ^iZy7;OgJPMcm7e%bB-Pzg z!UD>F3A#oMKEIl6N1NQd8w>k1?)M^dPVBkd^|)Z!9}SS8J&cGPenJ!TO0IA+xQb$9 z%_}ANnE-a+2nSfk^MGYfT$dM+6;1?a=}mje6HfLBSdkw)jOX`qMaSjA(f<*{Xr^z{ z5;`O)^WeTRr&>KmF(DS!A?nLeuF|l73^(Y#{_3AZFP%A!Ll4zIp+nTFzgp)trkCF9 ziKdlLp>-6*=)LuLkja7$QHTGVCbAfgBn~~cWTPPo$wzOb{E9d0O_nN682kPV(2gs8 jfI7C1Q7^SIN_^JN_L=vUdAt5; zY}m^5_qG!afcbR#X8iI!t57zp@nlL*>4~}IwJSWNZfEF)rmZc2)`)4d;p3AXoclat z^pJg^*PWBGSAle7BJd6wquMRP(F}Tt`io(ikg-Nr5`tfYamC=6jmD4|knrIwTpWbq zh5Xg(0%oL9?IHp**hlCML0EF~D|Wf+n5B}f7vV6@+g1@)?XqKmOcAm*9)!@-6n$DG z+78EQVN?_N7mlm^ILC=kk1&G=0vB_GUVmP3%mRAH9{FVv+13+NcdUj3ddYN5&h zVnTOi$RNfYeo2huC(x4?zmh{c%l#$vgiC)1!%9j$i1StWD&o}hU-e1UQcroOn1VQ8 z?W>-DgXF+z~zO=&-}sn>D}i{tc@95iJy#;X1g D6RX^^ diff --git a/lib/libft/_obj/ft_printf.o b/lib/libft/_obj/ft_printf.o deleted file mode 100644 index a2584eff7954dfe4cd56acf442de5568c4e91a2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3024 zcmb_d&1)M+6rYv9l+^C3Ay7jK6{QXq#9KQlC2dVn<7_+_JETcOQ)sbeSw^Oo>`1${ zQYzvgZ^*JN_);kCrT;)7J*0#{96=z8>BXl|3V|FNkWnZu_@IMY^}X2{X}pf16g}8^ zZ+`D{=Dm@w>yzgKib4b_gW}!Y^lGHwUSwpFgcj5*NTN2 zxz=;H0aQH&W>xK8H-w^Y7e?HZ+OzI9d+wq|wTn45>j^#GX}ol1zv7vV7$BSK`-!}(G7Jkn4h$vZihhCEcmamLRiy0-_Eer z6^NN<1z#~Qs~fT1ebK4Z#>do|syT<;tI)Eknmr=7ahYM%z6x!$pYXD)uS5I+v-iOO zlwaxl8-{Mr7~OcW0}5*2?}vG$_MIz?eLKULn*ugzTg!~Od0=ZLBdkXBRW&lTu0~=% zs*x{ltC3_$jik5Ki1|#76n4tiBv|65m90UL@a>hY6Ce#^E?0-iwT59!UF!le+d2(w z`v=fE%-6Ok;*Nz?!HXIlFg03aJEeuH8(R}ReZ>*C~%wpR^qjiYFz?<&usJIV8&crj1V$DHugby@N9B+A)X13 zoYYQg!$TwQMz{#4BS&!oQog=Olzd1z*4q}ULpK9secdx)09(|J zA`Y~Ui_ixgW`O$75eFI%z#{Y=X98$|`fpGPGy(ZqdR_4{Fx9>VO*_e7teJjg$4h=` z`@kq5;p{Bjv4gN*xIJO|xxKJsX9Mglj^E+d>`WjJ!589~%uXGEM-RX!55PY=08avb z1kP2*y9Hu*h{C)vy_{Xh81q_!Fkw28if6f)GlY~_%6vsuvI|DC=@Fls%QiQe*_Ld| zn^ZF2G@2*mP0R_@311I8(2;y8E0{y0B3;)f)> zAmN84{HcV$BH@2_zy`>lH_T9+9q;2?67}I?PG)?#n3Gi>F8W2Z+_kh3p9OAYJ)RO$ zHn|wrjAY&*+Faa-6Kyt^BU*OJ+a#9K>0}0UnI$8sjh~MV<&1dZOE5sUWNLao8&BhS zw1vVD1zUjs_cBHK<{Vy}M7&*1 z^yL+}KmQ3(V9fvPKLWlOlaCKb9*O)o^D_DKzYj{p@Q+3&m)9SbL6C*N;AbREHvQ>8 zp8r$s@2~$h_y0}~3bMF=0bc|GO``(f{4qcH4Bun_&{z12{^2?NxzUAo;Y!G9eo%aq m7}D>LZ`uYvF~|3RK8E(|&M`~M3YH_4m; diff --git a/lib/libft/_obj/ft_printhex.o b/lib/libft/_obj/ft_printhex.o deleted file mode 100644 index 3fec031928d3c3ae4ec2ad16c5f3883db4f1898b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1552 zcmbtT&1(};5T8v$Yc+PGR8Zm}dJq-6B*lXi(MVjo6hDd(&{NsOEeSQLB#TXjps*-; zhCt|F;n9m8dZ^VxLoa^(2e}BV$w6;I1L@4}d&#=&NeAAW-~8rtXLp~gw{L|c34};+ z4Mvt=0it6goN{0aB5(vU8vCwUy*R7&*e{J`I(6078fvEjFSq6T21Yj2p4E}9Ka*=y z9BwD->V9|Hwb&>5y=qHeE&B|zR;?#LJtc3cb|cec-#-2bYmH2Y?XoZS#$YfIm8;ja zrnPoG>oxdi>soQFwO2}Jx zY^|B;<8AEo$eHBU{9S^<32-kO&c$5TP!oT9Ui3t>X^f3G$1Ubh7-lU9y zArJ4&f*j2j4JdLJx#Jiw;+)wiZrNOVQZAItyirwhAmCEj$iZ5e>441Y~IC}Dp3 z^lnh%M52WFaSXgt90*?Y2c@!JH1#ZMv+U};KxN~xu9!yE1m%%#>Y!vR6;N`k#iCI{ zuC!_z%KY8TOvTi5E1)>xMt*6ztQQT@_kVR93(z|m_Z3QU`=^hmSg*v;pdF>WB;q_R z0_CKuU=lUu;-}+?;Lo8&yytgy{1^R=9M+BH&{3E0rkeknpTt~hHT+HxlZgIt#~NK? zETQMnCGaQ;U?GSMh`q--zOG@3MV|j)$hbi4PtXepg7*J{7ZlG$`=7ug^2PqCjlVZi s@P_wqk%4j;5B2fqQ(gb=k%B9{s6vKE{A)RezM%ZKJpZ95m!LoY0RHvNbpQYW diff --git a/lib/libft/_obj/ft_printnbr.o b/lib/libft/_obj/ft_printnbr.o deleted file mode 100644 index 173d69e925e03822f02621708c313e6801138be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2312 zcmcIlO-vI}5PsVth!&|v6Ac>n;t$4dC^m@3pDM0h6E%i}c+o&xx6)_}wu@3?1yeC> zYLgzlc=Y5!j|304B@rZ;G#n}Bz1H}N{TBnaeg#R%t0l>w zm4cZ&fj~gY7I-z6{b^AbvTN-fIW?bMv2b}V(~(sd)qEn;IW4Xy;-%)thm#`k@>1}# z&RgYyrEze3N&TQM7oJus6;^EQoRkvRXYtq&e2=<-M^wdfB3>pj8z#;ZU{s2GbW-X% zhlXk|Hl&MO`s19Tk9o0->?iROtdpZ{v)e&SDQy5X`xiZMToP;7E7wVY1N^vEl2ZL; z>`48h&KH(`RVqobJe7$x&1eU*f>%?%c8o8fHjGhSocXl0v?R5@$G}YatJAfk%jr7d>N(!+>LCt7JiWcA_#+o(U(g%oon1ng(CKix zI;aVQ0NJf8!j1P4Zp_ZL*_yVd;l}p^jz5$IT+Z*XKeP0gMx?Ib!`MK+SLy|=b>6gANVFJmtrtqR62nVKG3*)h zJy-}NqpgG-1#PFcQFVf|3-Z~%+AILW*&yCz(X+K4(F`a9BavWO3Hu^~pD=SEB2#A+ z0-E#Ykdez1heOE$WP@@5KBmBzv5`Yvbj^#1N@HL8?^KGvu#Ium3J2AWa?`2t>RgnU?)$#lsFbBD@o$xT$l-I2^#} zIIF2`VByT&RYW&N5CloB1fEiO?n-4^TjK^|sP`)|+Ed|(n$MV_yncoLS zz58RIoI#q1_lI1@XZMHaG1o?lL@(qkIw1I8iqDvt-wc@f?f@b@eSR*ZV-R!yJ0Vt& OKS)2BUIQ0RGygYAb*y{< diff --git a/lib/libft/_obj/ft_putchar_fd.o b/lib/libft/_obj/ft_putchar_fd.o deleted file mode 100644 index a3b55db73fa8e0e4ea72de36fc7016c47fc28cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1272 zcmbtT&r2Io5T1>}SWQb54}}OWLZyNFFu_CdP`0EoLHYvHq zE~SuT|CU~RP%r)$f`?vu+e0AEY~HNTWqWA{=6y5Y`(|c$l0B`w-b)z_I?lNWp z0*$mn+JY=BLA~Z**FOKw`GG$SzE&o+?{6mGD#1^Z*ZeF0{D#Ei%U@6}mv_ylubgJj z9+<_FD2eT@;!Z(@VM{z#RbYI255_2Ge$IC~#FRAjw`8EnD|BKOc zq~Xsr>3S~VO_x!)qVeG@xZ4gb*1JOF__niT9gCpsP>f8F3C+*e& zh*0iy8y(l~htCqt_>aKETH5V=tcRs?-Wy+&R<}GRv@y@&(*X6E;Pzj+_?*jM%Y%LUH^HV*rGdE4A99e|5<;H-gZw%&U1dH(R+m<3duLrvc4-u?pT+*_)m^eqskJ zUP6pMvU@b#Ia7X9sFfxQ%g7)g-)J)v@M}MBwwQYp07W=ZPYa(Jc~B00l465PoSq={oYUQn!qOozUXjjXHnow z4yQVj?>n6M;t2q#_<7F;P4qTO{W?dH=?2Q0Eeon0*Z@>BjzLBJG->sFJrm+w*tbTl zJY1WNZP0px1d^HcMkfk-c(VUvK9->#)0w1IUBZ3hIpRv2#)R&qDnX1tIpSl7>4;?poSFCL+$Re;wzj=D+GIsHK{RdWSi$pT)E5-*Wmn^wPFn;!6-?*0aAW zFiCwc6A`nHp+^`HmfhzEM_6E@^L+mduVRqbKi?JPK2iTj%X-H1)~4FKG@!jp9h^o_ k>tyvO5zF?DB=pZByOFx_m_0xJSMu}=ZvVkpnFd+?9~eB2p#T5? diff --git a/lib/libft/_obj/ft_putnbr_fd.o b/lib/libft/_obj/ft_putnbr_fd.o deleted file mode 100644 index 7f2b2c32763aa7a9299391a0a5033715e423843d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1760 zcmbVML1+_E5S`uB+G<;(cu-n&4=M)C($rw9h(v4b9;}B#X)h8t>Ba_4BAX4iLadS^ zenO!a@1DeC&pkCQSnENe2fca`qUPesAb~iu`M+Jid+I>;&%AkW=I>0BrTDFzs-l1} z1+KzgBv61?fjvLwx-sa7KA1MxH>2FpSgFB^^~z+!NL7u@#=UepZB*+T+pPXk*}H1< zRA`gcs$W&5rfh_&>^-ZMH-=xt+vQTD_sN+`9CbA#^Qoizp`psvRN{5^mVK$eY`5FS z%48ekb-JFxKCtaN-D7oUi{By0N-b7wJ}b2lep(!?#GC7fiM!HI#68K+NEtbcLqu?k z$%Nl`T9xT$CEjA6vC9eUy|Wb_i9|=EV;3$)#~=(aF+P4-J9ooMX3U%x8PP}d;cz4x z;x523YKf*io&seds0{WU>{-QTLx|CbY?&U{27=Gk@&0ag2^pQ-6~fUhdhF)!x_N^9 zjNYRQezpB_0iTTqk*Iob_byxzq@2LlI4<+IB|eVUwU7Li`5MQmK7EA6 zxFhgokkPBr(dkD!)ndUuK;i2ef0g6I^zfWaA!Cs-+z|tXT3$y7xNeJ6gqzU>)`_x??w9~t zA?#)GFvi=*-#ulXs$>UbKGcbgDfkIy$Eer*YzR7J8lPr4#*Tt$Tb3^Oees z{d(4`FS~8KSW+c5Stw4uVH)=ac*baLe+6qZZ;g)(KJ4O)y+EA~S&1GWp5%Y!Dvt+z zOd$Ubqi^bmi>s_~U&a^bF>y4d$FoqIz(X<9UZIesLsQp&tm{w*wdRs)+;Yjmz^d1V zjbK@O)N_m*_aoBzdzIMRl>Q*4+pN>?N&O-K6>j<3tt09n!IrSVTXmK8HZ`avSG%C< zVF;?R=KEe7wf36!)cohgLa5!w3aB{UYt@>8>&NfNBmWC*tfqf5V00<7FZ-6Tc_+s) zK>I060wdiKvdIMC5h6))H=eWplJ!3J1p*-kn)BaboO<53zKFHdQ{EG4Y%6Jpl?17GKI82|tP diff --git a/lib/libft/_obj/ft_split.o b/lib/libft/_obj/ft_split.o deleted file mode 100644 index c0742f5f0da83cd153b868250a4cae95da56ce87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmbVNPly{;7=JI>cH0`a+ft#}1#?iT#g4mGp=?D{*0GObwbTwMx@@xP)Gpm5vYEju zE-g%z4r5>s9(weyXX#1T7G2uYLYK1il*0-s$sxVXAsT<*oA)NekbwBXd*And-~aE; zORk&mzn9^hY2xf{HaKaNv5$8TrPIIC(Rvquhvg^t08m8JhR6=GvvZETRe7g?*?XX{+^8Qb*7PHn{sTyU|R%C z_-41g3oc!9=?=1xc+%W*c4FAwcZbS(@-sG_8c9PQn4u_dlAYk2QH1Bx7(%%Z0eb6P z+!p>ui$WoJOL(g-=8ntI?Tf1O_KPxF<2)C>)eWp(<1F{j^+frB2&|Ui50K?n292FE z!*900qx{fp{)w=%HLEN9NrD?@;+q0&Em1Fgs|fk^6&Cq-=`D6c-J1I|_dT;f0@7R)+>w97AK`+jaMJ z`-M?jH7ckZ=lj0Zfi+d$)CER^d(AUDxQEUud??>9_51yy;WntgsK8)8jOK!|CW9 zh{E+*_5$n})+AP%W&j*SoO$&lBYOiji#5#t9cAxkAb@0_BwThD>R&7`IYya%ZaWKK z)>bYplxuF)k;kfi%~^12SM4gRl$Muk<=CEGUa@UD5syMpxTmy%#;|r__3$kc{h;bh z<5Q|0!p9T#Z;rr!8i79?f#(sEh}6nNo(pmx;6-)TT-)pU-b~r+IWnXERmCYSf;%e_ zzoMlTd%0vdm>@GQm7EeY7VC9plxvlWjqw`QnqwPhKCq70ol^NKGo-nF1p_Tr;_Fdq z|2NCSlSZHT+mW#fa%b#uawx#mH7PA)^j*^36k;S2_R!^m)*{CCf|D4KCpZTq3}PmP%s zl>d*(ppfHZHuGt56!^?wq3Mnc;EUnQTgPfbAwl?ug!MB?aDS`XqLi`}d%iY7vK1Qo=CA_ME!!S;wM|ZbR2}{|cQ5X;y6?dksJXzWs#7Y<4D^&li`R@j$xX7Vx6K?Q(x(b-n23{l=WYiUn(+<`;<`){@olWuW!(QB8}wXH^^c*K&YZwyhMu1?NyK`-&eH~GN*~O^ zz}ly&&j^Tn^wwDaQG!n@>lFWM3Tz~BWwb!$A8OFBs>w%hr2U%jG@C4G<^N6vMlUY9 jS6a#@i2MHo89RV= diff --git a/lib/libft/_obj/ft_strchr.o b/lib/libft/_obj/ft_strchr.o deleted file mode 100644 index 632528a1ac7d756daee111fe5903513ffd7de983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1200 zcmbu7J4*vW5Xa}@`EqAo^)+4OMk_-5TrQ_ zpU7H459S_axS7O}JKtkkDsC4zuw9dzz>=;D%*tglb{1JS$8ENLez49InF9fZGBb?MN6MVt0;)keXCIx#heOJdw)$GSuKgwXK>cLJN9`AgG{&ibC*EQsUM{#DnNjbhEBRbfaWPh=TOcQV3rB z8UBLaDxw8F<_{Ed5d=@(1Nz?X%w`;N(g!o|d*A!Mo!vM4!&?5HU<_0+_zJB`v6vGr zoDX3hKEX#=w`=!y?exK}9W`#PCUqWDKdmM^vzoSBx6iBxo7K~Q;MbKHF}O@v-=U^q zvpdw}uEjq?1L@1UDNA2ojbGR58#l06D9mTa7QEuFQ_fD$@EJZeIXycrA-&81Z5Zri z6<9UH2D>}E&hZ0>kfTL$O53;I%o5}T{uwUcDv&g(7 zHUm*{{X_1yFhG`i7&LBeI$z~Ejnk$7^+LnSr>G?a#J##}tQ)u}a#4zR^VhVn zlfspc6%n9+oZ?HA!Wq#WDZk>|ogMn5e@ps5V5S+He#J{!oT}3QIc6dt>6q<9WZoS$ NFQjlSRz|?|zW@a1cm)6e diff --git a/lib/libft/_obj/ft_strcpy.o b/lib/libft/_obj/ft_strcpy.o deleted file mode 100644 index 5e4d60f33dfdf77b2ee15496af441396f4dc14fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 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 X9U-t!$4~|Djy4ZO;l5wl5kdbCH*!)w diff --git a/lib/libft/_obj/ft_strmapi.o b/lib/libft/_obj/ft_strmapi.o deleted file mode 100644 index 309084c5b6663316f7801285ade34ae5b8aaf8ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1456 zcmbtUL2DCH5S~qH6ScNcJSgoUphy+_Xo?5vK_YSOB34Dop$93ObW4lbM3N0up?HXh z%OdpV*?-_kJV`__c#9XwF&+fLy?FB=#F^chcDrsbI`H_u`QFSo%jA(K`pxSpO#=xH zuE1U4?4WRO9Ntr~93*=5|FgTzzPC zwujKpyrq&KD_+^ho}r=jKLYf0KTuVu4p5zX15@w%-f~#=Vn#zt!&~mVU)+~!lPXj=; z9@&mrL3ElSZU}2yHB&j(mIG?dbWBi{Rtr?MVcS+6wR*#`)Y7f;T+1=54?qRw*2e03 z)3hxf_ur652l`FMV@^fRW#4j5wb7WygmzSnipaCPgn8BvBT}!tk5jClV?E8ez*iwL zjL)avgFOGWzkt2uDc^}S2$`SfTtMavF5-o7sUeK~g+%4QYHw35o_%iy^DLVdkw-)J zC)y1pN&COdhO%ece+G~Ai=H%_ybYeeLkY$aJhbC@Kl#RYj}i>H{{khEV0l+Ljx4GF O4uAj3Ze>W~{eJ*n9HQO; diff --git a/lib/libft/_obj/ft_strncmp.o b/lib/libft/_obj/ft_strncmp.o deleted file mode 100644 index a6cfedfaff261511e0525c2b7cd33dd1fce3b7dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1224 zcmbtSJxC)_5S|x3|L#sb5mEFYR;QqkC?|+Th{V-J3wwCEkBLuFp58TZp@2$@z)!o4CeDlqGZ+7Qx+1OeSF$T&QMByz{EI?oA z4aZtA1|MMn5~lZJdZmWxW%larO{u{t<>7K(rF2^Fz}h|Wg4>4w)oovK|O zHaCckBO2eDMdGyBb44zba(?oZmZ)>X642VU)dO(%mm{nsMv-gBLxqH05Wo*CVF6FN zF7Q;=aqJ9onXIt+#*f6jE3DKp@SJ^OarD0{dGH^b zMxMAXSy$m!fj|uEzhRxO?O*kCsHHO_=(?%-VVy**=Bv1*aeC{so@iL<6t#(fxOaDr zc^#c>xgGpx@E0|((v2STJKEqv4jPv{>FAD>Uh$n~lVn`#_bEZ^N2eVJ^@^t+-3n4a Zp_7Ou?XzDH1@DfE*RpZP?`(sh{x1}Kcmn_c diff --git a/lib/libft/_obj/ft_strncpy.o b/lib/libft/_obj/ft_strncpy.o deleted file mode 100644 index 978f1ef15e659d958d8babb22196f626056a161d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 zcmb<-^>JfjWMqH=Mg}_u1P><4!0-Y|&;cy$z`)JG#SrSz`P8Gc_Jv1h>4VPDJI7uB z{0D;9^4+d~Jd!VXbh|$AV7$;B3gn#f=nj41!FY;)8$$JGCMxN`bO1 z2TBhDHNJ>F%;4_qY^9*#lA4s6n5ST9q-UgOplfKN31xzuAp&*_0|R4K5Cda{0HZVy zJI4f|TV;UaAPfSrAi|MPppD6ymyIa`r~)K_9e}*a!tn7wHd$sYA;Sk$D1;;qwhN>= ztt7sDP0a&}<>i;8>bd)c>K2zICTBC~6{Y4R>ZNAHrxhjUroxS;gdq*o3wuMg}nZ6_5pi zY?%Ep+7w9)S?OM64iX!t4<_UVWPrp_;u^?50K_0*0ioa|dJ=U7%CG>j16&1!Q316` z0xAyD2Z|$@ewa8myFprhfCwN+0Fw+1oIn~B#_0NC;!tI9DgtW1BwPf-fC|G!1%WK| SxC2Ro@+t^~Kqxqgt{(t~Xm5D{ diff --git a/lib/libft/_obj/ft_strnstr.o b/lib/libft/_obj/ft_strnstr.o deleted file mode 100644 index 5a06fae4d1751fcca3f1b5e6abb001846bd07d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmbtS&ubGw6n>Nb(rVLGv?%qkp8SCw+M*B?N=jTihQ2W=sQ zLjQzb?H^D)N=A;j1-+SNtzW10n``&$cKf@SkW3UKm zrcr>MOd1#BumERZ97>}3Q#9X2qS^$ zq{S?S;x5WIx06D2{3&5}h?qhnKv9xTjR`~|6m_xp$qgLZ#i5uXJDfIZ@!ZMHXT4r8zSr}wuv{$OajxC- z%dfn;GrzzW_}uLLt?MeJTb!p48hiT$*hY@coEe{(BQ59_XD&q8N|Ej-7Qz%^7dMP1B4u?WdHyG diff --git a/lib/libft/_obj/ft_strrchr.o b/lib/libft/_obj/ft_strrchr.o deleted file mode 100644 index 0c99b6664018c4b989927068a4be30a8da0b02b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1224 zcmbtSJxc>Y5S@#n@%sY{MT=Oepo@w^u#iYxJwzcu0iE%7&&`=i2j=F@n|V8Tvvg;(Z~-@e8U8E zKs%(&;;UIadn@KE<`b_{<%!oQyib;R&9uvAiNBdfx#tc_sY<+@@2jKDBClTXno&n$ z@8v`Op~Nc~e)r>v)$K=EO(qv&7PkdR&hZNLv;oNj_q=rx8r zTcg+bfg{M1lbzCIsk`?olI&`U&C`@jsKoS;(f8>3D>nV zF0-{nog0&Y)~>A{fO#ibVWlw&*N+*6gi{c}_AFrmOM4zL`#76*a>(V5g~L`iQd6F= z>_cF#b7V0mv$OA7Sx1fhR~$w)?WQGkNCyVnwZR?z8# Gu>K1(Zg^k- diff --git a/lib/libft/_obj/ft_strtrim.o b/lib/libft/_obj/ft_strtrim.o deleted file mode 100644 index d7332af3d387104a495c5f9225121c0f6e29aab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmbtU&1(};5TBRyBWi7{C=^;S2N8?y(iRVG5lN}fK8jTl0(y|LiCY@XCXn4g6^lqz zx`aZHy?X0kAU#Q-V6mqnD7~n?2!VK5Zypxn%*%Ur-R7hNZ)fH=zxmjC%Rc9~ZpIh` zEex*1k*86B&G?a>l4c5e;1r~V_ucy?yt2Q>gT{cUa=-5_O!A=Iy-jr*=S7A4OyMtU zpvC-l9miE4UZc%Qx9`bM+ad{rxdYf*RWRLJ8& zl?P%|tlw=)oFSRlsft~vwskSZeP@U)9PF=psaCyDl68gql^Sc6Ljx;fN9us(4n<}4 z5Zndol%+`z1>1iQu*(BtG%h0K;{;52X}_8d*5{eGfYd#l9jSZRcr7M5Q@rkcqymjj zxrYxsFgH6poxFU*%H+&Ka(u#=Fvdp5uMR7d>XV#nDPT|U0bA*3gFW4e4P5XL;&e!+ z=rPmV|2j5%y30iZx)i%cI7)&pM91TC)?&!eu?JB*;Ait#0D*X$FQgaoSO}N1AVzba zMO^!G2E;Dl>Bke5VFcRYu;eZ}Zpkg>Y$FRfXE9d@LCVZq1+dM0zL<)9Tx-PzK%O}X@~kqopHTtZEF=(iywFQSbUKMIc^PBs5Ee;jkErk)c`DY}1B`C94z zT2Es@+nPiAO*^m+_m0BC-xB3-sr>uoghcO8L-S~~+kZkWM86m9zZ;Lv*ZZe7(cTFC p0k@<}TKv>X=kV6iIIZO=8H2kp zjuZtr(8k(KqzOg12$l%Hi_T9|gnK7pyC*`cDr86gd*O* z#e3nQSm#~8IEq3}g^MmHLS*$24+Q&^ z3}?q8dW4AUmY2$RZc0h5 z;cD^=z+OKEwp(Iz#lrMHE@&P(9kP$~bMI2=tyYqG@!!)bzRHyW)v%*mdU=;@rE4Xv8u=Tcmk zoSsMOi2xY>D>txf=mT%)ca-v+hHV7SZUDw}JFvm1`92u+mg_oAWX)FK7#okRB|ot1 zFTqICot>?1&vqR-?!TRm9q7N9%5*YitoE#~DK~AjC)$shhNw$&3Coh7M^CltNnDqF zLGlS1D|f0y#%Jf>#(V1duk~fDrJm|LQ6{G5>oQhO%~yU6FO*g}0UBE*-&el`k?CudkEbA93 XNSVYVGK(s&zA8WJ*(h@;vh}|K>Hw<1 diff --git a/lib/libft/_obj/ft_tolower.o b/lib/libft/_obj/ft_tolower.o deleted file mode 100644 index 17dbc32f94f2cc6641197b6126152fd53f2eb6cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmbtS&r1SP5S~>j`y~|}3_EP63i6>+ARS`E%!r7HycD6Utr+)6cveVbKpQXxlaSr- zz4u!EZmVzHhcKSCgOBNc_f`M!W4?HUOe(ddukKofE3>A@6D+}E(fG!ifUqD|Xm=-| zHD|TR^myrz$C@!myBSIp;%y+%;z3R=HUKX7h%V%Mx*`$$?#(+yqvzZD7TEwQALntJS&1GDq2{ z&CTL9u!dDJnN`k}8fMjUkNyvcpqReRnCB2f)VhbKS=E-YAkMFni1VIWmR|h|Ht62| zs$WMfof$({EiVdPB@xU0GH)uJI@(bS1xuZz4iFIcr`z00~3_EP63i6RsARWRmGa@1)PZ7G>ic$W+eSrz4AOzB-KchdP zdw)w1bm}hDjQigDTI^B-GxN+JpRk5M!$ocuWs^@A`)q^TjJjcu+82n%9`);a~P z8PXy%6M-k(wS+u5nNDFh7<%xeX8q?lK=m(1kLiQYuW@bfm^TaJ;Jm`?Qdr_SUc0T= z%?2yNsE}*0{+s$JwaG zjp8-1hIwN!vz#k6jEdyV_Vbr(;wsx4zdoL40g=Uufd-TD=5(7pXt zzm8fua|2zqyeM>)L@f8qyrppJXjd&1EOnAPL_pk+yT-bUPL{Bf6W#x48aqDpq%&cI zgjf_7Jn86;q+aslc9Z0V0$P3;0VXliH+JhKFUFh{7W)?+#s-3R*f~V*yQAib7(8<( IZQ#~_1GoH5>i_@% diff --git a/lib/libft/_obj/get_next_line.o b/lib/libft/_obj/get_next_line.o deleted file mode 100644 index 23c2b36e758531ccd38a7c3f3c48361b7039e079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2448 zcmbVN-)kII6h5;_Q*F04)>y?<7$_DK%&;jc(gsTrT$=zWC;(?ue?sv|2 ze%(8>x9qpyOc@3#G3Zq~*eR4~bL2qJ#%h+*bewV`cp!pGD=6Qu+Z`C%Ghyz2Xm^Z; zC^ST9w}jC+xkWR_$|F@q+fxJ0pKkk4z^shbXkz2Lwz0{9KD-?#sqSWi%B~2?O%ddF zg1J_hYjOBy@S6zgEx+6C26lvWan`1&rBiI)5g~=SNCbD`h5AI8+Yv#E*`Xa7jcPPm zehzU&b$g;$=jp!4;Qa9oKU9C?TvP2`Bgl2wPj%VkE`KIs(?vV_fPQa)a z9aSq4t)K1{TszV;_om!F1=~iN*|Nv>+3(@dJ`>J$L@l?+7EyZ%5Ia1>6?5-f&o3_(U8~T)&o8^h1md{`nlCR}87lc+-dR}4^KQ}gsIcrhp4xb>vp|cU z>-MvW@Pa}x$)o)1@b>_64YJKhU@+}HT;<7-;j8Uu^|or^AP-R zEsmZyjQ}jkIAan|)_+dJk26p8n>{3siQp_SOP6?`jh_d&x>wf|xH@05O6x1WGtaB< z_0}6o^W0^}^7+ikT5x=atoc%jtitNbid$r?xazysrFU{uCEqFBBrA4zZ{!y}XGNuz zS^xiHG8H4%{;uL++4xCxMQ@%lc^uM8G|n1ko!v)z$}a#}Oi94mLB$<`Jl$L99IwD} z7j*d|kyqK0`CniIVkY@tOTK!q72i~fT&HRw?}a*2vg7vM?h1(pQ^W9QA^7ea63QKR&}7PG=reMq%N}Nj)l+I%Rs*+Bln2-T^_B|xWozLD z%1R@6lXJe(h~C22Fxgan4ON@?O0N?or6C3PamMy3!}ndU4q&?-72ihy8nUcKQ z@k6lkveJC^UA!8`wQn0RIX*s?yf9&=b4DRKGAfVC!$TvN23ZKuOSeRmp56m#sYmMX z?(AB{AMy+`T4Yz~as61&tHk)xj>jm#l=cFSehAmz{zA0>kT}{udhq(h-%voTh0!*z(tw#))#EYq;{w42SEHXzfDxjCNZ4a-_Yv2B{X-5VCr-=z&#b2qdP z0`Cy`y1+XHKEwWmbdJcAOrJnci(85Xob!3j#yFoB$i*jl$4H}h?9eap$TlrQc5o&j z&l!#Za=KUqIkTA0n+0TrMaPsU?`T6s$H+VaIgpzRde%1bdvjoI5A2dyNh6?HiI!r? zJev>Si>1(y8#KEV7cf6fKMLAx@B}!7o@(j8Kz2HGa2`EzCTA4jeY_FdiQ|jN>CA)H zk6$I%o9t>*uc4Mb%^ znm>Ktyq?dW+QfTPNs7TWO3)7Dq9fz=bZ&h1i1y&kAc-FFv7CsckqDy(JM_Um8qJ^M E{|Y@K$N&HU diff --git a/lib/libft/libft.a b/lib/libft/libft.a deleted file mode 100644 index fe3527dab2c418c8a2d2e2e0534d255a33a9933d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81400 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/02 13:49:31 by dkaiser #+# #+# */ -/* Updated: 2025/01/22 16:08:25 by chuhlig ### ########.fr */ +/* Updated: 2025/01/23 18:22:04 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ static int set_heredoc_data(t_token *cur, t_redirection *result, t_env *env); t_redirection *collect_redirs(t_token **tokens, t_env *env, - t_list **create_files) + t_list **create_files)// tokes is possition after pipe or first token { t_redirection *result; t_token *cur; @@ -31,14 +31,15 @@ t_redirection *collect_redirs(t_token **tokens, t_env *env, result = malloc(sizeof(t_redirection) * 2); if (result == NULL) return (free_tokens(*tokens), NULL); - free(set_redir(&result[0], 0, NULL, env)); - free(set_redir(&result[1], 0, NULL, env)); + free(set_redir(&result[0], 0, NULL, env));// no token use + free(set_redir(&result[1], 0, NULL, env));// no token use data.create_files = create_files; data.env = env; while (cur != NULL) { - if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN) - collect_and_check_redir(result, &cur, &data, tokens); + if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN)//could this be a problem with recursion? + collect_and_check_redir(result, &cur, &data, tokens);// cur=token is just in there to free and connect dont know if its ok + //return or better said does else if (cur->type == REDIR_TOKEN) return (free(result), NULL); else @@ -56,20 +57,21 @@ static void collect_and_check_redir(t_redirection *result, t_token **cur, str = ft_strdup((*cur)->next->content.string); if ((*cur)->content.redir_type == INPUT_LIMITER) { - if (!set_heredoc_data(*cur, result, data->env)) + if (!set_heredoc_data(*cur, result, data->env))// set here doc data with token head or first token after pipe return ; } else if ((*cur)->content.redir_type == INPUT_FILE) q4fc(data->create_files, set_redir(&result[0], INPUT_FILE, - format_string(str, data->env, 0), data->env)); + format_string(str, data->env, 0), data->env));//here toke list should be not messed up else if ((*cur)->content.redir_type == OUTPUT_OVERRIDE) q4fc(data->create_files, set_redir(&result[1], OUTPUT_OVERRIDE, format_string(str, data->env, 0), data->env)); else if ((*cur)->content.redir_type == OUTPUT_APPEND) q4fc(data->create_files, set_redir(&result[1], OUTPUT_APPEND, format_string(str, data->env, 0), data->env)); - i_love_the_norme(cur, tokens); -} + i_love_the_norme(cur, tokens);// takes adress of token head or pos after pipe and the token specifer +}// i love the norm simple does free token and connect +//later more detailes static t_redirection *set_redir(t_redirection *redir, int type, char *spec, t_env *env) diff --git a/src/debug_tools.c b/src/debug_tools.c index 6bee1b0..2c8ee7e 100644 --- a/src/debug_tools.c +++ b/src/debug_tools.c @@ -6,13 +6,15 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 15:34:14 by dkaiser #+# #+# */ -/* Updated: 2025/01/20 12:50:36 by chuhlig ### ########.fr */ +/* Updated: 2025/01/23 15:21:11 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ #include "debug_tools.h" #include #include +#include "token.h" +#include void dbg(char *msg) { @@ -33,3 +35,21 @@ void panic(char *msg) ft_putendl_fd("\e[0m", 1); } } + + + +void print_token_list(t_token *token_list) { + t_token *current = token_list; + while (current != NULL) { + if (current->type == STRING_TOKEN) { + printf("STRING_TOKEN: %s\n", current->content.string); + } else if (current->type == REDIR_TOKEN) { + printf("REDIR_TOKEN: %d\n", current->content.redir_type); + } else if (current->type == PIPE_TOKEN) { + printf("PIPE_TOKEN\n"); + } else if (current->type == NEWLINE_TOKEN) { + printf("NEWLINE_TOKEN\n"); + } + current = current->next; + } +} diff --git a/src/format_string.c b/src/format_string.c index ccc7084..06e5210 100644 --- a/src/format_string.c +++ b/src/format_string.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/17 19:30:11 by chuhlig #+# #+# */ -/* Updated: 2025/01/22 14:31:29 by chuhlig ### ########.fr */ +/* Updated: 2025/01/23 14:34:35 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,8 +49,8 @@ static void append_slice(char **dst, char *src, int start, int end) i++; } result[len + i] = '\0'; - if (*dst != NULL) - free(*dst); + // if (*dst != NULL) + // free(*dst); *dst = result; // free(src); // src = *dst; diff --git a/src/parse_cmd.c b/src/parse_cmd.c index 02c4bda..a978c99 100644 --- a/src/parse_cmd.c +++ b/src/parse_cmd.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/07/08 15:06:25 by dkaiser #+# #+# */ -/* Updated: 2025/01/22 17:26:14 by dkaiser ### ########.fr */ +/* Updated: 2025/01/23 18:04:50 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,10 +21,16 @@ t_node *parse_cmd(t_token *tokens, t_env **env) t_list *create_files; create_files = NULL; - redirs = collect_redirs(&tokens, *env, &create_files); + printf("parse_cmd\n"); + print_token_list(tokens); + redirs = collect_redirs(&tokens, *env, &create_files);// takes pos next to pipe or first token + printf("parse_cmdafter collect redir\n"); + print_token_list(tokens);// still existing tokenlist if (redirs == NULL) return (NULL); args = collect_args(&tokens, env); + printf("parse_cmdafter collect args\n"); + // print_token_list(tokens);//here it gone if (args == NULL) { free(redirs); @@ -33,33 +39,64 @@ t_node *parse_cmd(t_token *tokens, t_env **env) return (new_cmd_node(args, redirs, create_files)); } -static char **collect_args(t_token **tokens, t_env **env) -{ - t_token *cur; - char **result; - int i; - t_token *next; +// static char **collect_args(t_token **tokens, t_env **env) +// { +// t_token *cur; +// char **result; +// int i; +// t_token *next; - cur = *tokens; - i = 0; - while (cur != NULL && ++i) - cur = cur->next; - result = malloc(sizeof(char *) * (i + 1)); - if (result == NULL) - return (free_tokens(*tokens), NULL); - cur = *tokens; - i = 0; - while (cur != NULL && cur->type == STRING_TOKEN) - { - next = cur->next; - if (cur->previous) - free_token(cur->previous); - result[i] = format_string(cur->content.string, *env, ft_atoi("0")); - i++; - if (cur->next == NULL) - free_token(cur); - cur = next; - } - result[i] = NULL; - return (result); -} +// cur = *tokens; +// i = 0; +// while (cur != NULL && ++i) +// cur = cur->next; +// result = malloc(sizeof(char *) * (i + 1)); +// if (result == NULL) +// return (free_tokens(*tokens), NULL); +// cur = *tokens; +// i = 0; +// while (cur != NULL && cur->type == STRING_TOKEN) +// { +// next = cur->next; +// if (cur->previous) +// free_token(cur->previous); +// result[i] = format_string(cur->content.string, *env, ft_atoi("0")); +// i++; +// if (cur->next == NULL) +// free_token(cur); +// cur = next; +// } +// result[i] = NULL; +// return (result); +// } + +static char **collect_args(t_token **tokens, t_env **env) { + t_token *cur; + char **result; + int i; + t_token *next; + + cur = *tokens; + i = 0; + while (cur != NULL && ++i) + cur = cur->next; + result = malloc(sizeof(char *) * (i + 1)); + if (result == NULL) + return (free_tokens(*tokens), NULL); + cur = *tokens; + i = 0; + while (cur != NULL && cur->type == STRING_TOKEN) { + next = cur->next; + result[i] = format_string(cur->content.string, *env, ft_atoi("0")); + i++; + if (cur->previous) + cur->previous->next = cur->next; + if (cur->next) + cur->next->previous = cur->previous; + free_token(cur); + cur = next; + } + result[i] = NULL; + *tokens = cur; // Update the head of the token list + return (result); +}// need to later the rest of the tokenlist diff --git a/src/parser.c b/src/parser.c index 2d748c9..68ab372 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/29 15:53:29 by dkaiser #+# #+# */ -/* Updated: 2025/01/22 17:13:50 by dkaiser ### ########.fr */ +/* Updated: 2025/01/23 18:00:18 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ static t_node *parse_statement(t_token *tokens, t_env **env); t_node *parse(t_token *tokens, t_env **env) { - t_node *result; + t_node *result;// if ((*tokens).type == PIPE_TOKEN) result = NULL; @@ -29,15 +29,20 @@ t_node *parse(t_token *tokens, t_env **env) result = parse_statement(tokens, env); if (result == NULL) printf("Parsing error.\n"); + // if (tokens != NULL) + // print_token_list(tokens); return (result); } static t_node *parse_statement(t_token *tokens, t_env **env) { t_token *left_side_tokens; - - left_side_tokens = split_at_first(&tokens, PIPE_TOKEN); - if (left_side_tokens == NULL) + + print_token_list(tokens);//until her is fine + left_side_tokens = split_at_first(&tokens, PIPE_TOKEN);//by pipe usage parse cmd gets reacls so also check there the token list changes + //leftside toke has the pos of pipe -> next + //or if we have pipe we return token head and also change the *tokens to after pipe + if (left_side_tokens == NULL)// we never return NULL exept token is already null { free_tokens(tokens); tokens = NULL; @@ -46,12 +51,13 @@ static t_node *parse_statement(t_token *tokens, t_env **env) else if (tokens != NULL) { return (new_pipe_node(parse_cmd(left_side_tokens, env), - parse_statement(tokens, env))); + parse_statement(tokens, env)));//here new pipe node } else { - return (parse_cmd(left_side_tokens, env)); - } + print_token_list(left_side_tokens); + return (parse_cmd(left_side_tokens, env));//here return is cmd node + }// here he takt left side token so } t_token *split_at_first(t_token **tokens, int type) @@ -59,21 +65,24 @@ t_token *split_at_first(t_token **tokens, int type) t_token *split; t_token *result; - split = find_token_by_type(*tokens, type); + split = find_token_by_type(*tokens, type);//split has the pos of where pipe appears// if no pipe in tokenlist 1st if case if (split == NULL) { result = *tokens; - *tokens = NULL; + *tokens = NULL;//we are change to pointing token to NULL return (result); } result = *tokens; - *tokens = split->next; + *tokens = split->next;// is this part enought reconnetion if (result == split) result = NULL; - free_token2(split); + free_token2(split);//why free here? bv would free pipe node but what is with the connection of the tokenlist does this mess up the connection? split = NULL; - return (result); + return (result);// at this return return is at tokenlist pos of split next and result is the tokenlist before split } +//free token seems not right here even +// or at least no the right funtion here +// static t_token *find_token_by_type(t_token *tokens, int type) { diff --git a/src/praise_the_norme.c b/src/praise_the_norme.c index 6af28c3..5639b7d 100644 --- a/src/praise_the_norme.c +++ b/src/praise_the_norme.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* praise_the_norme.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: dkaiser +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/20 18:35:41 by dkaiser #+# #+# */ -/* Updated: 2025/01/22 17:30:02 by dkaiser ### ########.fr */ +/* Updated: 2025/01/23 18:31:49 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,15 +16,19 @@ void i_love_the_norme(t_token **cur, t_token **tokens) { t_token *next_token; - next_token = (*cur)->next; - free_token_and_connect2(*cur); - if (next_token) + next_token = (*cur)->next;//setting next token to the adress of the next token + free_token_and_connect(*cur);// do i neee a double call here + //but technically it would remove the redir token + if (next_token)// if after redir is stuff { - if (next_token->previous == NULL) - *tokens = next_token->next; + if (next_token->previous == NULL)// then if is the first token or token after pipe + *tokens = next_token->next;// how does here come no error + //anyways i twould the redir adress token to the next token *cur = next_token->next; - free_token_and_connect2(next_token); + free_token_and_connect(next_token); } - else + else // else makes sense *cur = NULL; } + +// takes adress of token head or pos after pipe and the token specifer \ No newline at end of file diff --git a/src/repl.c b/src/repl.c index 3afb2a3..3988a42 100644 --- a/src/repl.c +++ b/src/repl.c @@ -6,7 +6,7 @@ /* By: chuhlig +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/24 16:07:04 by dkaiser #+# #+# */ -/* Updated: 2025/01/23 12:42:57 by dkaiser ### ########.fr */ +/* Updated: 2025/01/23 17:42:33 by chuhlig ### ########.fr */ /* */ /* ************************************************************************** */ @@ -75,10 +75,12 @@ void repl(const char *prompt, t_env **env, int *promptflag) token_list = NULL; tokenizer(input, &token_list, '\0'); tokens_copy = shallow_copy_tokens(token_list); + free_tokens(tokens_copy); + // print_token_list(token_list); ast = parse(token_list, env); if (ast) set_return_code(eval(ast, env), env); free_repl(input, ast); - free_tokens(tokens_copy); + print_token_list(tokens_copy); } } diff --git a/x.c b/x.c new file mode 100644 index 0000000..4348da1 --- /dev/null +++ b/x.c @@ -0,0 +1,528 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* x.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: chuhlig +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/23 12:37:33 by chuhlig #+# #+# */ +/* Updated: 2025/01/23 17:37:13 by chuhlig ### ########.fr */ +/* */ +/* ************************************************************************** */ + +Code Review +init.c +This file initializes the terminal settings and signal handling. It looks correct, but consider checking if tcgetattr and tcsetattr return errors and handle them appropriately. + +C + +static void init_terminal(void) { + struct termios term; + + if (tcgetattr(0, &term) == -1) { + perror("tcgetattr failed"); + exit(EXIT_FAILURE); + } + term.c_lflag &= ~ECHOCTL; + if (tcsetattr(0, TCSANOW, &term) == -1) { + perror("tcsetattr failed"); + exit(EXIT_FAILURE); + } +} +env.c +In the getenvlst function, modifying the environment variable string directly can lead to undefined behavior. Instead, consider using strdup to make a copy of the string. + +C + +void getenvlst(t_env **env, char **en) { + char *tmp; + int i; + t_env *current; + + i = 0; + while (en[i] != NULL) { + tmp = ft_strchr(en[i], '='); + if (!tmp) continue; + *tmp = '\0'; + current = malloc(sizeof(t_env)); + if (!current) exit(EXIT_FAILURE); // Handle malloc failure + current->name = ft_strdup(en[i]); + current->value = ft_strdup(tmp + 1); + current->next = *env; + *env = current; + i++; + } +} +repl.c +The repl function looks good, but consider checking the readline return value for NULL and handling memory allocation errors. + +error.c +The command_not_found_error function should ensure correct file descriptors: + +C + +void command_not_found_error(char *cmd) { + ft_printf("%s:", cmd); + ft_putstr_fd(" command not found", 2); // file descriptor 2 for stderr + ft_printf("\n"); +} +new_node.c +The new_cmd_node function calls free(redirs) but then returns NULL without freeing the allocated node. + +C + +t_node *new_cmd_node(char **args, t_redirection redirs[2], t_list *create_files) { + t_node *node = new_node(CMD_NODE); + if (!node) return NULL; + node->content.cmd.args = args; + if (redirs) { + node->content.cmd.redirs[0] = redirs[0]; + node->content.cmd.redirs[1] = redirs[1]; + node->content.cmd.create_files = create_files; + free(redirs); + redirs = NULL; + return node; + } + free(node); // Free the allocated node + return NULL; +} +free_node.c +In free_cmd_node, ensure you free both redirections correctly. + +C + +static void free_cmd_node(t_node *node) { + int i = 0; + while (node->content.cmd.args && node->content.cmd.args[i]) { + free(node->content.cmd.args[i]); + i++; + } + free(node->content.cmd.args); + if (node->content.cmd.redirs[0].type && node->content.cmd.redirs[0].specifier) + free(node->content.cmd.redirs[0].specifier); + if (node->content.cmd.redirs[1].type && node->content.cmd.redirs[1].specifier) + free(node->content.cmd.redirs[1].specifier); +} +Summary +The provided code generally looks well-structured, but there are some areas where error checking and memory management could be improved. Implementing these suggestions will help make the code more robust and easier to maintain. If you have any specific concerns or files you would like to focus on, please let me know! + + +anything else? +The initial analysis covered some key areas and potential improvements in the provided Makefile and source files. Here are a few more specific suggestions for certain files to ensure robustness and maintainability: + +Additional Suggestions +env.c (Handling Environment Variables): +Error Handling: Add error handling for ft_strdup and malloc to ensure memory allocation was successful. +Environment String Handling: Avoid modifying the original environment strings directly. +C + +void getenvlst(t_env **env, char **en) { + char *tmp; + int i; + t_env *current; + + i = 0; + while (en[i] != NULL) { + tmp = ft_strchr(en[i], '='); + if (!tmp) continue; + *tmp = '\0'; + current = malloc(sizeof(t_env)); + if (!current || !(current->name = ft_strdup(en[i])) || !(current->value = ft_strdup(tmp + 1))) { + perror("malloc or strdup failed"); + exit(EXIT_FAILURE); + } + current->next = *env; + *env = current; + *tmp = '='; // Restore the original string + i++; + } +} +repl.c (Read-Evaluate-Print Loop): +Memory Management: Ensure all allocated memory is freed. +Error Handling: Handle potential errors from functions like readline. +C + +void repl(const char *prompt, t_env **env, int *promptflag) { + char *input; + t_token *token_list; + t_list *lines; + + (*promptflag)++; + while (1) { + input = readline(prompt); + if (input == NULL) { + if (*promptflag > 1) + (*promptflag)--; + printf("exit\n"); + break; + } + if (input[0] == '\0') { + free(input); + continue; + } + add_history(input); + token_list = NULL; + tokenizer(input, &token_list, '\0'); + lines = parse(token_list, env); + if (lines) + set_return_code(eval(lines->content, env), env); + free(input); + free_tokens(token_list); + ft_lstclear(&lines, (void (*)(void *))free_node); + } +} +1 vulnerability detected +get_cmd_path.c (Command Path Resolution): +Error Handling: Ensure errors are correctly handled and resources are freed. +C + +static char *get_absolute_cmd_path(char *cmd, t_env *env, int *return_code) { + char *cur_dir; + char *result; + + cur_dir = ft_strjoin(env_get(env, "PWD"), "/"); + if (!cur_dir) { + return error(ENOMEM, cmd, 127, return_code); + } + result = ft_strjoin(cur_dir, cmd); + free(cur_dir); + if (!result) { + return error(ENOENT, cmd, 127, return_code); + } + if (access(result, F_OK) == -1) { + free(result); + return error(ENOENT, cmd, 127, return_code); + } + if (access(result, X_OK) == -1) { + free(result); + return error(EACCES, cmd, 126, return_code); + } + if (is_directory(result)) { + free(result); + return error(EISDIR, cmd, 126, return_code); + } + return result; +} +General Best Practices: +Consistent Error Handling: Ensure all functions consistently handle errors and free resources appropriately. +Code Comments: Add comments to explain complex logic and improve code readability. +Memory Management: Regularly check for potential memory leaks and ensure all allocated memory is freed. +If you have any specific files or sections you want to dive deeper into, feel free to let me know! + + +ok ill look over it: now after your analyze it seem tokens are not freed properly what i mean with that we are missing it seems on more free but im not sure where to place it especial when the input is invalid and cant be used properly +It looks like you may need to ensure that tokens are properly freed, especially in cases where the input is invalid. Let's take a look at the relevant parts of the code that handle tokens and ensure that memory is managed correctly. + +Token Freeing Logic +To help ensure that tokens are freed properly, let's review the primary functions that deal with token management and identify where additional freeing might be needed. + +Tokenizer Function +The tokenizer function creates tokens. If the input is invalid, we should ensure we free any partially created tokens. + +C + +void tokenizer(char *s, t_token **token_list, char quote_check) { + int pos = 0; + int i = -1; + int f = 0; + while (s[++i]) { + if (!f && ft_strchr("|<>\n", s[i])) + handle_special_chars(s, &i, &pos, token_list); + else if (f && s[i] == quote_check) + f = 0; + else if (!f && ft_strchr("\'\"", s[i])) { + f = 1; + quote_check = s[i]; + } + if ((!f && (ft_isspace(s[i + 1]))) || i == ft_strlen(s) - 1) { + snap_string_token(s, pos, i, token_list); + pos = i + 1; + } + } + *token_list = reverse_token_list(*token_list); +} +Free Tokens Function +The free_tokens function should be used to free the entire token list: + +C + +void free_tokens(t_token *tokens) { + while (tokens != NULL) { + t_token *next = tokens->next; + if (tokens->type == STRING_TOKEN) + free(tokens->content.string); + free(tokens); + tokens = next; + } +} +Parsing Logic +In the parsing logic, ensure that tokens are freed if an error occurs: + +C + +t_list *parse(t_token *tokens, t_env **env) { + t_node *result; + + if (tokens->type == PIPE_TOKEN) { + free_tokens(tokens); // Free tokens if the first token is invalid + return NULL; + } else { + result = parse_statement(tokens, env); + } + if (result == NULL) { + printf("Parsing error.\n"); + free_tokens(tokens); // Free tokens if parsing fails + } + return ft_lstnew(result); +} +Example Fix +Here is a more comprehensive example of how you can ensure tokens are freed correctly in the parse function and the collect_redirs function: + +C + +t_list *parse(t_token *tokens, t_env **env) { + t_node *result; + + if (tokens == NULL || tokens->type == PIPE_TOKEN) { + if (tokens) free_tokens(tokens); // Free tokens if the first token is invalid or NULL + return NULL; + } + result = parse_statement(tokens, env); + if (result == NULL) { + printf("Parsing error.\n"); + free_tokens(tokens); // Free tokens if parsing fails + } + return ft_lstnew(result); +} + +t_redirection *collect_redirs(t_token **tokens, t_env *env, t_list **create_files) { + t_redirection *result; + t_token *cur; + t_minidata data; + + cur = *tokens; + result = malloc(sizeof(t_redirection) * 2); + if (result == NULL) + return free_tokens(*tokens), NULL; + set_redir(&result[0], 0, NULL, env); + set_redir(&result[1], 0, NULL, env); + data.create_files = create_files; + data.env = env; + while (cur != NULL) { + if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN) + collect_and_check_redir(result, &cur, &data, tokens); + else if (cur->type == REDIR_TOKEN) + return free(result), free_tokens(*tokens), NULL; + else + cur = cur->next; + } + if (cur && cur->type == REDIR_TOKEN) + return free(result), free_tokens(*tokens), NULL; + return result; +} +Summary +By ensuring that tokens are always freed when an error occurs or when they are no longer needed, you can avoid memory leaks and improve the robustness of your shell. If you have specific cases where you suspect tokens are not being freed correctly, please share those, and I can provide more targeted advice! + + +tokens are never NULL except when i press enter but this is handle in repl and to your free token the problem is with our aproach is that parts of the token will be updated while running like in parser.c +Thank you for the clarification. It seems like the tokens are being updated during parsing, which complicates the token freeing process. Let's ensure that we handle token freeing correctly in all cases, especially when errors occur during parsing. + +Reviewing the Token Management +Since tokens are updated during parsing, we need to be careful to free tokens correctly without disrupting the parsing logic. We'll focus on ensuring that tokens are freed appropriately in various scenarios, including error cases. + +Parsing Logic and Freeing Tokens +Parser Function: Ensure that tokens are freed if parsing fails. +Free Tokens Helper Function: Improve the free_tokens function to handle partial frees. +Example Fixes +Free Tokens Function +First, let's have a robust free_tokens function that can handle the complete or partial token lists:' + +C + +void free_tokens(t_token *tokens) { + t_token *next; + while (tokens != NULL) { + next = tokens->next; + if (tokens->type == STRING_TOKEN && tokens->content.string != NULL) { + free(tokens->content.string); + } + free(tokens); + tokens = next; + } +} +Parsing Functions +Next, ensure that the parsing logic properly frees tokens if an error occurs: + +parse Function: +C + +t_list *parse(t_token *tokens, t_env **env) { + t_node *result; + + if (tokens == NULL || tokens->type == PIPE_TOKEN) { + if (tokens) free_tokens(tokens); // Free tokens if the first token is invalid or NULL + return NULL; + } + result = parse_statement(tokens, env); + if (result == NULL) { + printf("Parsing error.\n"); + free_tokens(tokens); // Free tokens if parsing fails + } + return ft_lstnew(result); +} +parse_statement Function: +C + +static t_node *parse_statement(t_token *tokens, t_env **env) { + t_token *left_side_tokens; + + left_side_tokens = split_at_first(&tokens, PIPE_TOKEN); + if (left_side_tokens == NULL) { + free_tokens(tokens); // Free remaining tokens if split fails + return NULL; + } + if (tokens != NULL) { + t_node *left_node = parse_cmd(left_side_tokens, env); + t_node *right_node = parse_statement(tokens, env); + if (left_node == NULL || right_node == NULL) { + free_tokens(left_side_tokens); + free_tokens(tokens); + return NULL; + } + return new_pipe_node(left_node, right_node); + } + return parse_cmd(left_side_tokens, env); +} +Handling Token Updates +When tokens are updated, ensure that the old parts are freed correctly before being replaced. For example: + +C + +void update_token(t_token *token, int new_type, char *new_content) { + if (token->type == STRING_TOKEN && token->content.string != NULL) { + free(token->content.string); + } + token->type = new_type; + token->content.string = new_content; +} +Summary +By ensuring that tokens are properly freed in all scenarios, including when parsing errors occur and when tokens are updated, you can avoid memory leaks and ensure robust memory management. If you have any specific cases or additional concerns, please let me know! + + +i never update tokens static char **collect_args(t_token **tokens, t_env **env) { t_token *cur; char **result; int i; t_token *next; cur = *tokens; i = 0; while (cur != NULL && ++i) cur = cur->next; result = malloc(sizeof(char *) * (i + 1)); if (result == NULL) return (free_tokens(*tokens), NULL); cur = *tokens; i = 0; while (cur != NULL && cur->type == STRING_TOKEN) { next = cur->next; if (cur->previous) free_token(cur->previous); result[i] = format_string(cur->content.string, *env, ft_atoi("0")); i++; if (cur->next == NULL) free_token(cur); cur = next; } result[i] = NULL; return (result); } any suggestions for this? static char **collect_args(t_token **tokens, t_env **env) { t_token *cur; char **result; int i; t_token *next; cur = *tokens; i = 0; while (cur != NULL && ++i) cur = cur->next; result = malloc(sizeof(char *) * (i + 1)); if (result == NULL) return (free_tokens(*tokens), NULL); cur = *tokens; i = 0; while (cur != NULL && cur->type == STRING_TOKEN) { next = cur->next; if (cur->previous) free_token(cur->previous); result[i] = format_string(cur->content.string, *env, ft_atoi("0")); i++; if (cur->next == NULL) free_token(cur); cur = next; } result[i] = NULL; return (result); } just take as example input : a and check the hole code for yourself +Let's take a closer look at the collect_args function to ensure that tokens are freed properly and memory is managed correctly. The goal is to collect arguments from tokens, format them, and ensure that all tokens are freed without causing memory leaks or dangling pointers. + +Review of collect_args +The function collect_args traverses the token list, collects string tokens, and formats them into an array of arguments. It also attempts to free tokens as it processes them. + +Here’s the function with comments and suggestions for improvement:' + +C + +static char **collect_args(t_token **tokens, t_env **env) { + t_token *cur; + char **result; + int i; + t_token *next; + + // Count the number of tokens + cur = *tokens; + i = 0; + while (cur != NULL && ++i) + cur = cur->next; + + // Allocate memory for the result array + result = malloc(sizeof(char *) * (i + 1)); + if (result == NULL) { + free_tokens(*tokens); // Free tokens if memory allocation fails + return NULL; + } + + // Collect and format string tokens + cur = *tokens; + i = 0; + while (cur != NULL && cur->type == STRING_TOKEN) { + next = cur->next; + if (cur->previous) + free_token(cur->previous); // Free the previous token + + result[i] = format_string(cur->content.string, *env, 0); + if (result[i] == NULL) { // Check if format_string failed + free_tokens(next); // Free remaining tokens + while (i > 0) { + free(result[--i]); + } + free(result); + return NULL; + } + + i++; + if (cur->next == NULL) + free_token(cur); // Free the current token if it's the last one + cur = next; + } + result[i] = NULL; + return result; +} +Improvements and Error Handling +Error Handling: Improved error handling by checking if format_string failed and freeing the remaining tokens and allocated memory. +Memory Allocation Check: Ensured that memory allocation failures for result and format_string are handled. +Freeing Tokens: Ensured that tokens are properly freed, including the current token if it's the last one. +Example Input: "a" +For the input "a", the function should create a single argument "a" and ensure that all tokens are freed. + +Updated Function +Here’s the updated function with the improvements: + +C' + +static char **collect_args(t_token **tokens, t_env **env) { + t_token *cur; + char **result; + int i; + t_token *next; + + // Count the number of tokens + cur = *tokens; + i = 0; + while (cur != NULL && ++i) + cur = cur->next; + + // Allocate memory for the result array + result = malloc(sizeof(char *) * (i + 1)); + if (result == NULL) { + free_tokens(*tokens); // Free tokens if memory allocation fails + return NULL; + } + + // Collect and format string tokens + cur = *tokens; + i = 0; + while (cur != NULL && cur->type == STRING_TOKEN) { + next = cur->next; + if (cur->previous) + free_token(cur->previous); // Free the previous token + + result[i] = format_string(cur->content.string, *env, 0); + if (result[i] == NULL) { // Check if format_string failed + free_tokens(next); // Free remaining tokens + while (i > 0) { + free(result[--i]); + } + free(result); + return NULL; + } + + i++; + if (cur->next == NULL) + free_token(cur); // Free the current token if it's the last one + cur = next; + } + result[i] = NULL; + return result; +} + + +tendenziel sollte in collect arg free token until + +parse ist das erste was nach token passiert und da wird token zu node umgewandelt \ No newline at end of file -- 2.47.2