From df159253cd1c458db1eb01299c7de04ff8944fab Mon Sep 17 00:00:00 2001 From: auric Date: Thu, 22 Feb 2024 23:34:30 -0600 Subject: [PATCH] Development --- Makefile | 6 ++--- bin/fex | Bin 22576 -> 24680 bytes inc/config.h | 10 +++++++ inc/debug.h | 16 +++++++++++ inc/sanity.h | 15 +++++++++-- obj/fex.o | Bin 6232 -> 7808 bytes obj/sanity.o | Bin 3840 -> 6112 bytes src/fex.c | 74 ++++++++++++++++++++++++++++++++++++++++++--------- src/sanity.c | 57 ++++++++++++++++++++++++++------------- 9 files changed, 141 insertions(+), 37 deletions(-) create mode 100644 inc/config.h create mode 100644 inc/debug.h diff --git a/Makefile b/Makefile index 3800835..4eb9e68 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ OBJd := obj INCd := inc CC = gcc LDFLAGS = -CFLAGS = -Iinclude -Iinc -Wall -O2 -g +CFLAGS = -Iinc -Wall -O2 -g SRC = $(wildcard $(SRCd)/*.c) OBJ = $(SRC:$(SRCd)/%.c=$(OBJd)/%.o) @@ -13,7 +13,7 @@ TARGETS = $(SRC:$(SRCd)/%.c=$(BINd)/%) main: $(OBJ) $(OBJd)/nprint.o # The option of a single program instead of a suite. WARN: Requires modification of source to remove multiple main() $(CC) $(LDFLAGS) -o $(BINd)/fex $^ -multi: $(TARGETS) +multi: $(TARGETS) # Makes a single executable per object instead of congealing them into a single "fex" $(BINd)/%: $(OBJd)/%.o $(OBJd)/nprint.o $(CC) $(LDFLAGS) -o $@ $^ @@ -28,4 +28,4 @@ $(OBJd)/nprint.o: $(INCd)/nprint.c $(INCd)/nprint.h clean: rm -f $(OBJd)/*.o $(BINd)/* -.PHONY: all clean \ No newline at end of file +.PHONY: main clean \ No newline at end of file diff --git a/bin/fex b/bin/fex index 8f1149c35424ad848d31fd96dd09df4256226fc3..aebf62d607efee7c4945e9040c248e86743cd8e1 100755 GIT binary patch literal 24680 zcmeHPdw5(`wcq=kIg^=8CNt?IP12@xQqs}_nIvuKgSIk#q@9#NOPfL~;&eKhB-17{ zaUOl3UP4pQTB{Wit0HX$6;VI9%2h58O$7uLwTO>?-cPAsimgR2^16UZ?r-hKyxQXZ z?sxC~{3E;HIcu%oUTf{O*WUZ&>^Z0BhK{Zk2Iou{lf8?Pw7*IsK~-_`YQ=yA*?i{4 zc?O%#?2v5&ll4JKP%FzZqnJ7rZi13s9WiI24H9OW>IjLF-MPwvGFhW3^GccQEMk>h zN;^d*W18yvTzh^pM)8YtjxJLD)3nfza&xp<>K|QPO#7AHuPjW-Ye3j2q8blqHpg1#DYPUn#l~TXb*HnkQ?nI{Nf70F>W%r_TSW1_x_B7S) zT?ISJ%YV1%VP31+JJ&e0s&UX%rIob|#5d1vZyD%m9*8HhJDPXQpW8gQJ&;ZYW{VIg zu2vj0ZB|~no*BbzlrS~@u!gvhoxrFVO4j~KmtrKD?5WTYsBi==hfMXd-#0?=GQz0L zobu6zXJS7dl+u~!Re&a(3A2Ugz^9!9{~~Zdj?%Igz}fsC0q!qVhCBtw+4Ly~XTy&I z_v0un?EtD+Jqre9jh@FGBK6^n5)MaqM8duCL}Va-eT;>}L#cQo(;JTVZ)NFBBm)FP z9Sws|Wx|7zcmi-wGD{WPdJB|?vYBXqBn23%(XHel+#87xFfyl!F_*3E>Rh@kJUcLF zPL6HQadQgTK%So+xP*l}yRQiM#8R=ocsdhHbziY;Aeo4DM>Y>ozXc19D3uM?cw()b#Mw+4k-?mDF9(aR)Gb6#DN1n^`5uCEDH zakK!J>qMxtV+FWggH&_80C!1Man|#R*0Ww?vO+4+x~4g%iz6sG!VL|AdV^9RT>VKA zKwSZ@uMt$?FTiz<2p=!w85qyNcm~EZFrI<&42);s|0)Bakry4Iz1HI`jD>C*%@|`x zLnDtl9?dm3cF7M=H8%ZeoIO*6;7IPL`cucpP^N#6WV$svbyUa?l1#Tmr$&YR4U*|r z?$mukzK3MGg*$af$nS>SyC1SB>qC1^ASQ25Xs>PhOhBPM9dERa?prw)IuP1td)!0N z$nlp#vmP56$UzF0}7TN84D}zOL_kPdD^>rtTL0LeXE2Ji$Bn*nS!s zIpXMA@Kk0?XfGe0-<&<+`OX@?`=^=TcRs*b=Pum+!ttna+UuFR9DV(c7ZTM!u`l)Y z;PBh$Z?|`P?tCfrLTKM5rz)YlZ}D-Ew$YQb&{? zPd^Wka5=d-u2fv2)Ke?+u|lBhSCIrn{qUwCyQ0bpmQ* zHJ$)tujaLBJW%&OprL)%79tDY$V|a-{;3%}hO=tycyF=(qa`xz+l2ik7ZREEc4*H_ zp(B5~EOg`zGsM3idgkp+0~~%`IrNq|WTpOw7ylWmEIThWviJt#Xh1U+p}mX02kE36 z{WuvyU#|PU^&|jZYF{d!x)#d$F6>7huW(a;7jFh>8$I<^v{6`3^LgJTCq$nXUk#m; zJO4H|cGGA!`?~c4(BaGg>Zi;4g;c*$)_1&a%@FmAP#5;M zp*>wq^SkyeZwhvS3+*1w%=64z-n7OutE*{~XI6L9kZ0EIO~X+4%(|f-ssxr?g#%}n$m5fNJbda$z^{X8w>6EZD`N0zC#rlP<}Dl?QS{_@d;a# zmr!&B>0jRDe`0x)tyLl3lfU@O*w}YzTXphbaG|{j5DP^vaL-NOB)uCSI|_0w5;+VC z$2G5De}=ez0&*&bSs>OW@PCu|y@X#;fIlkn4-tMz0sd8qZzp_80UnZgl5nd4f4{`% z5&lQaSKV%%#A^xvIn84)^@ZjeO#ljdyo_gHJOkqy7|+0X2F5cmo`LZUjA!5M-wFPI*^z#mWhvx%*V zwM3H%))LzhV=dWCoK3#Aea;}xZ42kLD%z&#Y(;f_yOJ*vluod?c6wU=yUvg2*sqR_ zeE`S6EBT|LL@ul=SS0M=dX{4aa+4UJ~ zLOtmp`qS9hCep3+uBfbA<#BCy471B7Exd3}lW;@!_&I_dgI?kDA=+(GoG+oh8c-^J z978xBhVHANY)Pf}W@DM#Zai6zFqdHCBHFwa^cd{Kv%BS$UL##z>FA_d8Q1-w8_@5g zw9$i)5o1;5ac)-g@=EWLN(b$m#>;pH#xpRUf$c ze$S3>;i*I=VHJw%7XjT$4ysK=y^{6&e3O-|_a2j!tl#USJq#6H|JvJQNs(QzMBdiq^K-98@ii2k5jsN%VgkWZ?P;kl8Jb)K=U67mmJ{hLZw-Bqpp{}cWG zcxlUXX(NfULeZ-g?NxM}qEZX*JO?GWa@n#={WDj_5}9Pu-!>;OJJ1#$n%z3Py|t}v zPIIcwKh!pRma6b;oGpT}95I>q`zAj0~5-Yme6L9GQm5_9tCf^9;d30Qe};c zJbxaCgH8Aoh*@s`7ZB&o`s84~FM;Pii!@6U%x^!A@hE=|Rh3jv%ZIvBUW@i8Q(Xt7 z#W;8$PSs9QO5sQl^ecjVMbHG;RZl5`8VI_e2r>z3D}ugCz7`fiKv;E05k$+fdUX+W zn4pbC(1U<#Tqh9y$H09A2X91+6Gim&wE4?8tov|ksColh)@@*?l$X)y4uCyRC|b{h z?exsYx%#-8n3M!6TVUmiGrybKrM#1F&0myO7X&JL>>4DYMgbqV!Y}#OxEn(ji4#8?gFqIB}1iPoiK;7dF40{7-&d ztw)-$XLdgyV#E8PK!;c}I6xq7%=JFQ14?a`UPnF*4O6ye%GOL7f++(sW!t7~ zyF#{Y%C?OU!T1yP%iz|S4fd9LaaDX7>?b9AA=q1`LJhKi+a#gzZJ?i?EX)=HJy0Je z4_^U#Xp&&x0(Ha^2jVV?5f?A1*bW> z1eGY(5r{Pk^lR`bfD;us92APodIn&vMSXCZn-u7!oLN7rAT$E^WxaG7!ihOvAWZ@t zqRFk`#C4q4yGXrsn(^Dqf3H@|3aEY;hm9^8^ZigpvC&0Cht0~%d=e(z(^_}2UxGqc z_l8Zlpg>pnTw16%9F#^lPqE~pI0%O|Vo^K_lomzlA4|GYSo3h7XPY_sQq)g;&}5AA z?0h#)VkyxH(@QRr+ONZ)&SW14RK}r83@f9^iL;eG4~(wNjxzeYOPrUfbynxF-bF3- z)dc`sW0dk=)ROy>Wm&Wk>x&kmMa#&3p#E9%@GG=n|IB3KjsFyG#A2C5{NzcfJXY4` z7=!`;3{G>(o(9f%1Qm0gFN1aP$AHfhyqC{HZ1V+Q$2+03K=6LP7dn>;ekOk!_(H+A z@^A*s!(nAYv7Y{&ZwPQbONB9YxukuiY zALdJdZ*!G3z`Cjpuj-F?6nz9vblz*y{crUHXIW(>&T-b@RlXeC3 zx&X8jFoSC7zqHEg9}`CyGiZvRM>hi8VJ}@6{PyponW>pbA8PB#=S1?0!~YwcxZ^^? zR^qq}M@1D~E1U%F!a-M$ssv8ughbKUMjR7d@aU={sNCG;N4qEoC(K7xh5G<_^Am^u z$#)t`;>i>Mt{GaxR4(+R*6}7zUxU>>INZ&2`-gH0ZgElIZQ`QwA-@2DY%uS{l;j(o zxh5HFq`t+JA*a>Io2?AFeh#N2aQg@j$Il@A63nyI&K9LkiAEFD&Q(Sl>{<$&F%fu9 zNi%fKq0;&Qd8fcn!u|zvm{ATZaIvDmarv31ceJ&@SoH|Hw26k0a#DFej5amW@Kt_* z*m+_Qt9JwF76T6(q15dsr3!Yw?GB@yH64QTZ8%IeJ$Hw~+nHH;X(M0gTHxyR8MWVD zT8sJ6#9Xd-xy(xFb~2;xpXv~phq)RZojzP`icBzvIPdgvRFutNRPTT`b6SEgx0L%v zUx9xYJUB`ltqAcC@*8094l&78Ho`|sBlatvDn7l^=Q5{Gp1QuaihB{GSH+0hssO*N z9=&kMPAsaYU?voT7t~A8R}6Ogs`!MmVBPh?qT0ntB;y*%Vyd?zg!X!sm)a@3&9|06 zu+&A08(bS**SJW%P6P_3KEU#k`0;DNqyQ`m8<|YK+{NpuqYb3Js6J6iiDo>XbR*wg z>Z+OVD&uZSsOsr_v|vmW88&3!^U82((_>dWVwcq$7$Lilo0Tq?aMkD#!zYK#ksD~| zJUNDPU`Pf1*5g2(qTnj>!MWx5SL*rT5otk;-qN(o(I^==ohFQ(o(ihFjb*ZTqQAND zbXtmfDzc%{gHFmWm5HP^nhPl)a^kR9o1W}W9d5Y}*X2V>7vZ<03Yy7o9ZaR1%ehQ@ zWO{Vx8l4ETvEqXIPM_*tew{Q{<<{1OJW2}=E%=IORU^l=YP2Zb)hcg|)Mg_m*ZxMc zUCh>+Glya#b)HsWZGLRU^hCH7RgO_C!uIj^@sOyq`q`tavPM5=O06BU0WiU(4U z7&S5#*>UKJsn&~MWK4NbSYxiY>ud8XXqsO0=g-CU1~=9Dr9nO!!z=FvYlU{B7VhwA zYr#4HOQo9#K!yX%RFf{Z7vX5ZVeqMj$A&8>si&PT+RF%d+ezd{(`kTdqX`lCnO_0mExZH_Zww&<++S3ZL|p*DI6ccAspDR0msGZbA;WAlSx1R7!TuQ zvuZH{dPiZ_QQ%gsy~=W4ZaF9ij({~?=EAan3jN`K5B9c7jUH(ifXyu;1D5^M7PtE- zC+Q~z;3RYj7bhn?8MJX?Q*bh8 z&`I>X1)OazofhL{(00_a=ArxgP7IUIc=rU1=PN#+uiA2(^~Ma2IbcS)PXOl5I|P&>$St5l0!R|z6~LE#KC1@f=u2Df zZHOp-hgIX)P9irO9~3jO_v%=RrTdeq3|`nu$NLho9zXpI*}EbYrLRr+m$l6+{cYCY zJebKQVvGA?iC8Kgg&0Xi`xndaUih2){LQOpvz#~aC4}D2M4I*D^{{2hEWG!}28Pc3 zIzl|XZfAO3BoPyuS4Rf2F&M2M>SN+t3%%fY9d`r(Bz& z2kVD=SR~aKWoh9xp4rI~;v)?O7DBNro>nOk;yUykcH7W2zVI-#RmB_*#}mmged{3` z?-8_5d<`NMOUF{%VmZhITXIG<`?{6sANr4{Q}kCXOBqNtIMj zY#W^745vaT8QqG2@P&zFk1&ov9U5dLRK%AkL{kv)UfnwSHU(a-6BOZO2PjIk6-{KM z&nS6-M?{XAJ{7-;1}cb{0>+Da!bey%ElmfNDMbknu!V=ANKY$BvbPsX_{zo3bTl$B z5Khx55Yo9iygAz&jwOV0{wo@r`=ZH#BtDD*g>+1VO{efu5XCsLSYOsM$m|9qXAb ztVM9tDSVAX_B#Ry-HBio=y<7LfRI{zY(*q=6`F=}!*ES|V9o zPFj|A#gmCOspOVeG?Q*w5!=z+*-5G_p1_)lB(RVJ{c0(LAt&(!KD07007oP#9eB;A zQ>cp$WP4&Qo8y`EnMg}!=Mb(TMVgq-Ou*zllgdUh-_(N5BWN%K3Eo@eRfT#%?ct)( z(ie@k;BpwA+ul4BRi6by!dlwq=x~Z!L@Pb<utef+=k8hLEAC@0*Cwpe^mlGn*xKCyxX=? z7<7}ta~$$>(xCew-2gKCm(`;T8*4RM5896KV;odCvp&HSUhSclpWjoJ0{8XK!K+78<4>YOQdtIa>era@?O4B<}X zR$IeCThq#X1;g(Fxl)iO%ay&s;cs&IXSBfrw-`e=9JIM-6``|^@Jb9)TSH#)2>%H$ z()kJhb*U2j^I66pH#_WJO5nZxVU9bHhxuVc&Va+l5Akfp_CxciDS%wGHvIC2k$wO_ zH}ZA1LxwQG3^;5YHTgQaIU`j%mmbWvWj`-BZ}CfC2W|WL9gshmlkcD)*22?aqfqUz z@et%}PVFHf=iNMHJd66lT>Y~`&euO{oJRe1x%$&W&exwdM$B?Ema88zNzT`gn4g23 zZ~t@V4-4z%SQ<2gnthW*f+*sWowh(j;>GQGp9DbvgTRnB|`8n#C;kzm#cv zPi2+B>)EED5HY5*T&3_~h3{ARM&Mq2mu<~b1t{`frLUh-X?^-Jp5oNsnVhEddzGKk ze5Qa4eS}KoRY}-(fh(ba>{spTCtkW;JgX3Xatlh?d|u&t$Ee=`xr_WDZ>90jGh%;1 zdz$?LaNQS;5j_EXf`Nst;?LE|Tcv_~9eFPl)%QYC7GA#b$|YBHF2l_s_HN;hPCzraZ<)ltA;0(8oKCC8#J02WGl2P~kPE%@5}R4I zvkZsvMZR#ymCM8L^!>f!4-Mv=iliVJ8O8$XorAcg2F;`-?bjUksIk-#3nY@6SO7Pb zfuU4#D3-$RRzgdbb~e-YNYwR5()}#ZvoisIl42JkYOp6r<377c2%|0)8;FpB;)al? zfQTsoHqe)Zn2GJcSqxhsl@x;*i1lM5gME3pzXwjVBu%mBNJS7HS!fcOxVPmRlu=|c_9_i97!5GoJ zoQ%?DE9Wqkz)qgz|D7@!Zm@)NcYkD^5& z>-RS`-K5$sjbFj+dN35Sw%6~EYI;m5>h??fzgyWaReJh;R84mj*w=zDwf`6}$_d3M zivByIDA^PimEIh*2V9}OU)gE8DW@r!68G%Z68mALps9{myV0_ypD(f3x3QYuR}!#p zU;DeW#9rT5Y3kI9ik7%zUs3jY{Fq-UD*B=lH7T|KXH-!Bw7tGx)pWTwRJ7FoyCwFm zjZ#t53UXdhblx=d6c{|F6KjYt{eHIou5qcpmNor3Y&-?_`u*)=&EzdV-=vh6wf%2V zL32+n``mqe?mN{gemy_6ogT*nuq733ufOv;NU`(Vye zGTKhlS4!;lefG>&sjuVIZnT}2-vmRLjz1WbHS@K-o){8lenmB*`(27(scV>Nd%C_C z7Sg4nX&D&J%Nlu3D2JnkAox<IzBqxzv8zIqa7%mKNVCnee6dt>>_R zV~Mo?wN9)GpwxbmvM XmJ$(r#IxIPr42a>?ZXO7iOBv7%>&Ze delta 5735 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 G7X2T8Cop;d diff --git a/inc/config.h b/inc/config.h new file mode 100644 index 0000000..d010035 --- /dev/null +++ b/inc/config.h @@ -0,0 +1,10 @@ +// +// Created by auric on 2/22/24. +// + +#ifndef CONFIG_H +#define CONFIG_H + +#define debugEnabled + +#endif //CONFIG_H diff --git a/inc/debug.h b/inc/debug.h new file mode 100644 index 0000000..92c125c --- /dev/null +++ b/inc/debug.h @@ -0,0 +1,16 @@ +// +// Created by auric on 2/22/24. +// + +#ifndef DEBUG_H +#define DEBUG_H + +#include "nprint.h" + +#ifdef debugEnabled + #define DEBUG_PRINT(fmt, ...) nprint("D", fmt, ##__VA_ARGS__) +#else + #define DEBUG_PRINT(fmg, ...) void(0) +#endif + +#endif //DEBUG_H diff --git a/inc/sanity.h b/inc/sanity.h index c41bc2b..d2c92ef 100644 --- a/inc/sanity.h +++ b/inc/sanity.h @@ -5,8 +5,19 @@ #ifndef SANITY_H #define SANITY_H -# include +#include -int sanity_check(); +#define SANITY_SUCCESS 0 // 0000 - All checks passed +#define SANITY_CON_FAIL 1 // 0001 - /con check failed +#define SANITY_EXE_FAIL 2 // 0010 - /exe check failed +#define SANITY_UTI_FAIL 4 // 0100 - /uti check failed + +/*typedef struct { + bool conEx; + bool exeEx; + bool utiEx; +} SanityCheckResult;*/ + +const int isSysSane(); #endif //SANITY_H diff --git a/obj/fex.o b/obj/fex.o index b255e9a45121ffd2dc23b018997d49548667b32c..0f9225ccbb15825c1a591bfa0e2b37f726b00926 100644 GIT binary patch literal 7808 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 L(bSD{pj766_o8|u literal 6232 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 literal 3840 zcmbVO3s6*L6#nn-!mcjj@(@8Z7T-8{V;6kC0Fg&RzRf4F3oBs4;<6yfIDv>WB^5p+ zvqomj$}Dl3aZGGx$)q$jG;6TNEXS-#XB5Sn#zy+j-E)@ZXPs#}Gk4E9-#Ono|LgvD zUz(Shs*)r|BC*-5*CUj%ngP9bqGBepFgApx*WK0q4t~9>T-)vkmSl3J*L|Toqm-dq zHzC4>{K^BZU%Fhb^RBO?L*Y$H+hWzj8dI(D$)RTR@w%8W-C3zQ{F>2m)c8t${iOI~ zn(^A(wF3@k?3%1A&om~t3{5XJk7_8`I)6a(bG47+?&SxktFIUyr>q#&GIjUHKy7BB zUz3K#?9|PaMl-#Bwq6~`m@0v(1E)tzGxXD<{WC)5M5w|UQwK?70z>rbsK}@wDOhV5 z%9sWzI>!9MfTHINeMSgl{xX{rp#Xl<^y4BjLS{xVrj;cGl`N=|7`~YYbm?r1^b)6e z%{xxFYHOA2DEgjW6EN4yiEga~2MrGP^-@&fSRir=wrrWv{gj{5;N(@-XJHIwot?kvFotf6hwk z8lHS=bX$e`Tv+$Lj~*TT>~2eZfPLnJ;aby@m)|L^Nsnz<8GFW>dCRi{S_(bFFF*P!N;^Y~zCynFkN_tl1^fi-afnupP?uNyRN zbvYdgxhboQ7I)mZlX3rcarpMOU7OmL?lAw5R5omWcK!8^bJx0Ot+aIRxq8gCEoxHp zs@kzXtq;BM$DgL|OWF7D81(w@4&Cmmja(OzkjT>J&Yf-?pJpp@+U-VDylj?DIi=<} zb3&ZS6hF~nGM1XmF&Hos4nx%N$H*UeQ_`Ma##Bsl0Y)OBPxA`JfV7#PiAsYM8KBiQ z@*v>DF%}6rCD5=uke}G62-MTCt{z`uwPzLkM%BtF`(og!nYKTu-~*q62RsEI)DMRW z!CvE0=EgDpS~5ewY{s79Sdg-+?jWt(7zI~*7=*JjOG%NlO3p(gC$G?!_aZB>Im?Uk zSy9i3@B-m@>(8L4Eu^I@;(T#Xg*1?W!@@FnOI5BfqK z_vvTM`jOaK_>Bh+I}x?6g>!T;_DRbs<>} z+Xjp5v{gEpoNsYjm~1U8W3qzg+pOgUIYlMw>^!E}7OT}^tLPK9I4mUvw!V}NMf@T_ z3hzTEz&VPaXD=@1p8+P9*qt_+U+ELeoECngxc!2Xa=FxDFSR+GRoKf`n6u7dDW(PX zOzi&|MoxpZqjN)5649XhlW_44g*e<(iIjlah?htl`tUCX`q2Hx|2ZiF=L~S~vkHOL z@WTaS-Xi+3JP0*K{u(5S`Jz9W=P4Ks40*YzYf+OD(vg*DvtHrQWSPzhdq(9#JqVjG2X)_^gNNHiR^`ki)*l-v}=&7w`Q8F7avnMI7_h zzX|)(`wq20i0}3o%jbr#{x0m_iHWd&a90qY`osMWt>P%aZ4d*l`^RqA^Gj(sJXXUa zzW6TWS9q9iL*zFSU&xz`2XcylQ(w|=B40>j#o~d+1maOXd{1DhaJU4sQsmSAQGmuz zej7KSrpQ0|ANi*_*Vq0vVI$fn*uNnDP=CUG_2y};1N$3s!tgx@uE>Y)p0B044}; #include #include +#include +#include +#include + + -char* opt = NULL; void help() { nprint("E", "Usage: fex (OPT) (PACKAGES)"); } + int main(int argc, char** argv) { + int fIns = 0, fUpd = 0, fSrc = 0, fUin = 0, fLis = 0, fSer = 0, fVer = 0, fFrc = 0, fUpg = 0; + char* packages[argc - 1]; + int pkgCount = 0; if (argc < 2) { help(); return 1; } - if (argv[1][0] == '-' || argv[1][0] == '+' ) { - opt = argv[1]; - } else { - nprint("E", "First argument must be OPT"); - return 1; + const char* flagNames[] = {"Install", "Update", "Source", "Remove", "List", "Search","Verbose", "Force", "Upgrade"}; + int* flagValues[] = {&fIns, &fUpd, &fSrc, &fUin, &fLis, &fSer, &fVer, &fFrc, &fUpg}; + int flagCount = sizeof(flagNames) / sizeof(flagNames[0]); // This should match the number of flags + + for(int i = 1; i < argc; i++) { + if(argv[i][0] == '-') { + for(int j = 1; argv[i][j] != '\0'; j++) { + switch(argv[i][j]) { + case 'i': // install + fIns = 1; + break; + case 'u': // update + fUpd = 1; + break; + case 'S': // source + fSrc = 1; + break; + case 'r': // remove + fUin = 1; + break; + case 'l': // list + fLis = 1; + break; + case 's': // search + fSer = 1; + break; + case 'v': // verbose + fVer = 1; + break; + case 'f': // force + fFrc = 1; + break; + case 'c': // upgrade; don't ask why I'm using 'c' + fUpg = 1; + break; + default: + nprint("E", "Flag '%c' is unknown.", argv[i][j]); + return 1; + } + } + } else { + packages[pkgCount++] = argv[i]; + } } - if (opt[0] == '+' && opt[1] != '\0') { - nprint("D", "Placeholder"); - } + const int sysSanity = isSysSane(); - if (argc < 3) { - nprint("E", "No packages specified"); - return 1; - } + #ifdef debugEnabled + for(int i = 0; i < flagCount; i++) { + nprint("D", "Flag %s: %d", flagNames[i], *flagValues[i]); + } + for(int i = 0; i < pkgCount; i++) { + nprint("D", "Package %d: %s", i, packages[i]); + } + #endif return 0; } \ No newline at end of file diff --git a/src/sanity.c b/src/sanity.c index 5292b3c..26ce81a 100644 --- a/src/sanity.c +++ b/src/sanity.c @@ -1,28 +1,47 @@ -// -// Created by auric on 2/22/24. -// +#include +#include +#include +#include /* - * 0: Success - * 1: Failure - * 2: Root check failure - * 3: /con check failure - * 4: /exe check filuse - * 5: /con and /exe check failure + * 0: success + * 1: con failure + * 2: exe failure + * 3: con and exe failure + * 4: uti failure + * 5: uti and con failure + * 6: uti and exe failure + * 7: total failure */ -#include -#include +/*SanityCheckResult isSane() { + struct stat conStat, exeStat, utiStat; + SanityCheckResult result = {true, true, true}; // Default to true, assume checks will pass*/ +struct stat conStat; +struct stat exeStat; +struct stat utiStat; +int result; -bool isSane = true; -bool isRoot = false; - -int sanity_check() { - if (getuid() == 0) { - isRoot = true; +const int isSysSane() { + if (stat("/con", &conStat) != 0 || !(conStat.st_mode & S_IWUSR)) { + //result.conEx = false; + result |= SANITY_CON_FAIL; } + if (stat("/exe", &exeStat) != 0 || !(exeStat.st_mode & S_IWUSR)) { + //result.exeEx = false; + result |= SANITY_EXE_FAIL; + } + if (stat("/uti", &utiStat) != 0 || !(utiStat.st_mode & S_IWUSR)) { + //result.utiEx = false; + result |= SANITY_UTI_FAIL; + } + + /*nprint("D", "con: %d", result.conEx); + nprint("D", "exe: %d", result.exeEx); + nprint("D", "uti: %d", result.utiEx);*/ + //nprint("D", "Result: %d", sumResult); + return result; +} - return 0; -} \ No newline at end of file