From c0cf20b869b3bd5c9eb68aa3e53048dfa5410416 Mon Sep 17 00:00:00 2001 From: auric Date: Sun, 25 Feb 2024 23:20:18 -0600 Subject: [PATCH] Improvements and more sanity --- bin/fex | Bin 25392 -> 26992 bytes inc/fex.h | 20 ++++++++++++++++ inc/sanity.h | 14 +++++++----- obj/fex.o | Bin 11216 -> 11896 bytes obj/sanity.o | Bin 6016 -> 9016 bytes src/fex.c | 59 ++++++++++++++++++++++++----------------------- src/sanity.c | 63 +++++++++++++++++++++++++++++++++++---------------- 7 files changed, 101 insertions(+), 55 deletions(-) create mode 100644 inc/fex.h diff --git a/bin/fex b/bin/fex index 26bcefd9c7aa921bb32f88082dd84c35cc8d5813..c40c485d133add1f8c50e8524de4e03d43051790 100755 GIT binary patch literal 26992 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 delta 8502 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 GwEqR~pOiuX diff --git a/inc/fex.h b/inc/fex.h new file mode 100644 index 0000000..a54731b --- /dev/null +++ b/inc/fex.h @@ -0,0 +1,20 @@ +// +// Created by auric on 2/25/24. +// + +#ifndef FEX_H +#define FEX_H + +enum Flags { + FLAG_INSTALL = 1 << 0, + FLAG_SOURCE = 1 << 1, + FLAG_UNINSTALL = 1 << 2, + FLAG_LIST = 1 << 3, + FLAG_SEARCH = 1 << 4, + FLAG_FORCE = 1 << 5, + FLAG_UPGRADE = 1 << 6, +}; + +extern char* flagNames[]; + +#endif //FEX_H diff --git a/inc/sanity.h b/inc/sanity.h index 1858be7..2e01041 100644 --- a/inc/sanity.h +++ b/inc/sanity.h @@ -5,13 +5,15 @@ #ifndef SANITY_H #define SANITY_H -#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 -#define SANITY_LIB_FAIL 8 // 1000 - /uti/lib check failed -#define SANITY_HDR_FAIL 16 // 100000 - /uti/hdr check failed +#define SANITY_SUCCESS 0 // 0b00000 - All checks passed +#define SANITY_CON_FAIL 1 // 0b00001 - /con check failed +#define SANITY_EXE_FAIL 2 // 0b00010 - /exe check failed +#define SANITY_UTI_FAIL 4 // 0b00100 - /uti check failed +#define SANITY_LIB_FAIL 8 // 0b01000 - /uti/lib check failed +#define SANITY_HDR_FAIL 16 // 0b10000 - /uti/hdr check failed + int isSysSane(); +int isSyntaxSane(unsigned int flags, int pkgCount); #endif //SANITY_H diff --git a/obj/fex.o b/obj/fex.o index cf8ef0f25f3c7012acf8645d34e2c9f2183d26d3..010945917bce66dfe54615a99e71a46651ca8585 100644 GIT binary patch literal 11896 zcmds-d0dUz|G=MCA(aXdx>{70bSugd_f}UoDrvD(x4K%ixwljpLnW?UV(elv%veSk zYs`!xTe2l&X_#zT!j~C4Q@``M_k8p?^7_7Bzu$kq&+GL(=X~Dhvz+Ig^PK0oPkk#1 z9IC6M!=dPKgSjRRDaVyMG}T3#s))1WY&ogAFKAM=Hx$AnkD!Q9%Hre$1e4`i0;drn z;m!i55V7xYvA-nDnUioslVouMM~4_kL4s0{kuoJEH8aJ9Q)Vl}WGM;h*#iU)v78_0 zpcG67Lt>+pr@Qd=l+<)B8{ciBz(*mMO%bHY6iRtgYFt7L7b1(9Lei5cB$AQ~NS7;Q z=?N)ug4Ahpg@y!&g^L3Nxv&utp}rC>A~=A8z<{uDE=(d0^_6l%M`+qY{6ocl61XNR z5mMEC@o4cVafCQLOq%;d8Y?Z(cW@%DQkA4!ctq{rC|xC0>z^U=!6QO9)A zVlt{~|Aqk7y+HLSBZ;svP(9(KnMC-yzO$)~hzp3hD$YHn6QI(+9FSXP6x9EQY2IEE zBA`HbwpZ_rTGPWJI(b#;ccr;Ubm?H5+W3)>iW1T62HVUwBGdh^r7<1{q&f|ab?mG> zgx;T$6v50&3nb;S(w^E*o6cQ8Sb?NSs+M0HFPTmiW!bOLh!ZILdK76cVa)f)F<1(px}RL_0v^tWc5`@*IE3?f{+nl3!L($Lr_ zncFzaEhy$qpt?8ohs>6#O&-*^;RVJY{Z#J*RnJJDg+~I&oN3&G`Zr|U#emR4T?4iE zht@{@jaNWH1Q)1!O`T5|QRja%>K?_A#2QtT=>N$HR-7(5^vPjF4l{BH$N?Or2pWi> zo>jCwY+$gS(5y?%hco#zPq#2PniKM)ZJUsMUFS-P?uM5h8>ALJ?00wR8zQh*m<7*% z*q>`5y3?w*QS@8 zE9M!5*~t_CoLY7JZl37x;y(K2Q{o)=+C1Jh>-OfHiZ)Pt!!TciNnod}YtL&5!q()VQ`Vd*vdfN|6P_^y1*{6^6>f+aQrzCB;6VJP==K{1UX8YHDUQE=DCni*p$iv_vR_-3{--GO{J+urL+0nX zN?va7?P5P@OQEOF^f?PQwGCeK!t#&!p&wJ9*BOrJ*u6Z9$Qf77vc z>8)-e6CIP0OME{@ZK;nuT554Q*Yl3o@PmQY7B_m#OFq`_y5yxe^o5Sq%i`S51Fo%W z_vnu3sLrfDi6@qt6xkup-C*GVIeYe{4X_rg4lv#y-=Jkg+ZL*HJ$$7rpoUz@ZU6f7Cn!zSg z3svMlOO?|{g+xtaj;gT?cbz8cUqVh%fwF#}Yqz zZB!I@Ddb35;n}JSS@~_p9$)S7ZJPz0UO|Yy-oS-@TE%(GWE^+Z(4dnx0LIIK&6No1 zSw#_{Wd9T!ce(I<`}HGrty>1z+nU=uRr+-5R8`si<@IHPZuaB)Nj;1l43bN^4x9GPO;`O4))vfEtx9TJyVHDI;FxFncB=fJcbR8T>u_TH+oWmT<6Hf5 zQM{)hziRlJa{(RXVz*+eXJvP1+*@b3ze``yne1VATw2ATrk=yTDT8wo*Gxw64vPNd($%Are_=dr|^{1sT$cpCvm^=!|Qq~yBh2tpCbBqZPg>i z%)$PW1+BcpyDnLLFLrIRz_xDHrcBErX8t1sxBI0m-m(6i_~A#V{YxGW+N>J!*86Hj z+PA-qcG|eJ#x!f$VAJ0w<-B#sFWDP=`)OBEyEgCoH*oLrJ*s*0u!&Ac)4a$F#VNV2 zW|9X^hq;l0kvD?c&(~Gw73Wm;?sV|vnAzff;isQY30&Im@%g($+#AnzI8<8EvX8+q z!!2(;{ZuxiC8O%ZMu$3H_M5!bVC9nnqy8m|)$6P7JaKG!JRv~$&D_#o)d!}k4!n9j z{_4%Po4=oYdQnlpPx^fwdfe#TXJ?BCyBtj%gX@mQ^hpj8drBLU93BjQTsS3ujHge; zqm~KdFaA`LXnAv(xxDpe*U|Aae3A_Z|FU-V;V$Oyv!9!Iw@TP&Im6ET`sM0lHyYzy zmxNSKJGg3xz<=MzhJJmPpNI@7iBt4Af8b&JY>&(3{}H{Z?RqKZOs=fo;y+~DoxeSP zu(5rasrM4q6W;h_!J;M7G(J6DhE9zIpnW*xfP8DZ+>bQySbTsBFoSlB) z{C#}~2%P-oDe0-H0-?K$n~N|q&CS)#!&NAB@2wCD(u8i#v_XJe+b?)65s(93B>jUU z$UBVA5n$L~9jdn^48&4fa5~dNIh`ys9c$wjMuo%}-gi3Fwsy31BBd*>$HM(9HZjZB z^=)Gqv{-MEzS>}+VQvfEE3HTbacgS!MFIWL=Uy~^(LjLSr(S;Es;9Y{&lzZXoZ**H z!{LqXOVJ~nMsuR4x!NyV^tiTPLPGR79FfnP^~ko=oak{Ko5Lgy-4uDPEi`q_&j23f zIAh9jPOwqiLj$fW0$R4G_C5@^rrd+!0*&5=p&aL+A=>Qx#vU5Qfc)V7T>4NR{yFBf z`3$&k7(Rg7$1{8g7l$Js5nN(8mq1@vI0@n81}6_Vxx=X+ochAa6HZ=m5^AjbYpOynUY?Z3 zrKBkmQqs9(SwaezpbXP|ZjftgDe1B-^6f#+!3T$6S+ZQoMMf&q$#;avnD{A?lVu4> zWQ}PBZdaJykK~6e2wn+rxGRw3iibS|Rwwd#qz(f1usV@%1xN%qd^$kB3m_3T{sAr4 z{I251ccdE>vHFDE1ta<P_0zKxc^TybS|UG5b$f;EW^_%$LA7`j|t^TjJ-MKX$)^qc{;;8QJ%$cT+cHZ zomNDp?*iJ6{5PsQ zG5i?SaowW*Y09xb@VwH#8)+M04+H@YFPkEAfWRIO0^C?r)1F|j13?ZY2s{fwK!xiQa+90ew61hyd~ue86H46t{3c266Kp1dz_DL3>Q*;7sK)Sy`SMV zRL6CMd4Hw6jIm!y`*WG$PpJNZmSBcs3`n2)VSH-F*)SaUZ6U+^P#wn!<2;~&!f87c z`WT#)Q@-DIJh7F!Q&9;A_O6FjNwPM zm@DUTh~q%@DjtV8xNqb86^@S?wX5OTL!3$)zn|tNR z`8Czm21NT&)Xsw8!zj1nafpL!-GRrUKbNV!Gs7z=ccC0qShslJ4dHQkUUVi0NFc*8 z?-*Wu=#TdIBF820IP}Ms>d6ep>rqgS{lWWP&EwD?KXQPq;}0|J{~&7D1v)_l<7ZKh-_?=h^>?TC7$<_-OPDx^ zC=XybUVkVP=PbS6@n7LehTo?4c{~nPTn|eauDM8ZD&lb%=bkjqR)%{~ev09fD8Iww zQ1ze*p71!t$8l}}3K4JzlXy^wwB>QA;`f4~l*9PL{r)34K*D(Tbci)Pk>U8AVg`>x zUL2qK4A%r9r|&4oyxVBQ%CB(D1J^}OG#*2#AIq~DE};5WhU0kR?+lECyaNCt$Z>ze z-|xurc{ZA{$NTOI!}0lIM+cXU6UuPBPqP`0^S+43aZiGNZ(um=K_I{KIE<$NAQ3}t zp}9}74v7DrOkFjW0?oN;e5m^A`Ha^!hBm-&UJ&Fs4*d6I=nsyk2#kq++AHXlm!PB6P9aN)BOeI)Opy}zrD0M6`JhOh$hBY< zF!{Df^qAD-Wb&5@&V~FtliY>;jiI;ZlOxsRQZii96sc))MS3<(CXbJttRP<}=?whe z3ITD4Ip^PV5K#mtBDnu)wWj+Kb!$?Ac@`m{r4#+|iR(>3IOM^7z>3)c+y`=Lz~DDkPQWuKyvueph&@Cn6w+2|3Uo@1G5X zX;NSV(LqA!f*kT+^6w?K&G{G7k3(zzi~mmI-(3H#x?ZdAG-1u< z$Ln?{?R-IhWXDORx%{(jwH8upC?F*)Y4peZHwkMle>@%cVWgce=#T6gsWg|roaWD> zh5}NyBM16p{=W%pE`KS_znqRAG1Cb8qyCgsn#(V;(^@>Ih5}N;l0tvX-#{3oaK#2v z2MK|faw1*6k{>aA*J{o`4PJtXBx#FJXH0|s9nt@jg|_l1_4i~r`eA8H{TVaP0zcF+ z4d{p1jR08c?EYy*{aw+Jme_y9@Ld36vi?%)KL!oI;x8f2&CQ>yz19Kq3y2Eu*O(vY zuesddS&Y|DH|B1H!C%c;e^_SJgw&d(*i2iW--I+Z$j2ABrRzW!XnGSfQpc)Gb}o+qKLt`fiNtB1AzfSqoQCUBDfMU zq8K$UQH)CrhPWW2qG(WG7oxbJ#)P0ojax{Rw{FiZXbL>vIqzRzozqiwpZe9k)z#J2 z)eQ^1{m1BuL>x^bZWPyIQOa=_2ep(Hd{MzkISWpeI}9vU?nubwW%ZDSB!@?<-KA0L zG^x$Fpov4IHbF{HKjm2O;31qhHzqzjT54?>VJ(eKmZoUpGzoJwGA=niIXGMst4(*8 zT1IkSoR2118y+9eg(OCXYt>wELP}DEnhVjyBKMC?)^fq>@T7Yh^-Plc3eHpzw$|(nk`CgiD4#V+v7a|Em00IY}9!oEWTH^k^yJk*XX6 zOB+&9WqVi3%W}sysR~rN2B*Y;GVeZB4XMa%5{dJI^*Anf>^qj;w6^} zQ{}2_rYNT>rzxi^XG}YpS*0ho;KauyBoqmmvavp{si`TmO4`tnS=F)OVP=)2p)RvZ z)KHsQrD(XGQI*kfIkU>3;ex!(Ki2^QiA!#J%U|&^u_ON3e`c4<%XkzePA~+ODi^aZ zU`46Kno30CAxpwYNGgP?i&zEanig3i$Ot;2%5C;?H%c5&Z0`*55bumumE!nvRrZol z(ngibM<9xojN&9w1Q7+P+RRrGZxzJY*C6G`yXA!BWj>jwMf@rGWWMXD9j40B`OY~C z4t#S=pJvy13^FK5sd{gtlq&BfO$!_YBAVnk{dISY*dhbQ!zah2Hv5Ku_A4@U@-kKC zNsQ!nC*=XTn})rElW2X5@m;C!MQZpGc=`X6VD6FIfHNRRM{-EWAti@`92w+*dPsli z>vC$R73K#Y4b)RgHr+b9FiZc}Ag=`;CUUKpv7bemhor|#k?LZWkzEh5aYVFo;kdfs zf&z)fqHDf>esiLJj5xaUQoxf9za$)gtBHF3B!DX@GhZ3e^Xtx|O`g>BzGjjJ zb$dvck~Ne1HU49k?>)kHNz&GWV_8EVH;RYO7sq-!?wF-GzUy{p(ZZ>!&FzMp;`dSmUfZZsQQPr(wyOTaW95V}^Zm z*xd1v!@YxZU#8cUJkPfiU&>oy&25++FfIH0&qE6h8< zrFs9{-zQP>bZ*IwocQrkTa6S_C;b+W1r-7srzh$g`7rR8T_k73Wg zdGV}J)P2{S=<4$eqNCQ$N~<5+IW0PD`hf(lsq?Y*&Q3eM&KsBBpR%`j-Dlr*mr7h3 z6Q1m;-#E%a()EP*#GGYIXZa0Gb=>^h$WEdTxwpmciK|{pJKX&AazerIZ0FA%X8anH zJKR>5l`<`>Y{d5Dh+nF$|F+7G9c+KIxQFNq{pS}}PcBHF^uvTa-_kj&PtUF?-<4kL z>NqXV>SomJ2(vH5^;3fVQxs+LUAuqwu?!B`J0*7YrQG@3ih9PqT|eW^uI!@W2XiWY z|GgCb{NavoYJVU5ptSJ=w`u9yZyCRy^tTuNcm3+%MQ*%L;_l?R#5 zfBox6K0|tWd1Wao7MOIMboSoFMtyVJkTa={Ju4>E{xQAtl0P0ix0U_evo!V5gPLN` zg^PpNEq*a->oA`l-Jcw_{;hD{oin>lJvvP>D5|hp6f?d@@uKpqugvs^O`5vmYL2+V z*ep(Yvg4R#4XYeuVwB}a1}w6!GP~_^$?bN17xP|+KQGH^kLW zT_>yivUpVNT8pJQedcGJv_97DzJ0xkvoa<1pPNgqSBE@){pNV3{{g$Sk%3pAb$$J# zkJSeT+s5qOXB2o{QRhCe&*j2_7YmQs*#GrUaa2d`xTel|Bo z{xrzHKIVnh_iqR7$=~qz;vClxtqy7z?TNVcGX09#Z-+|Hy6%yVR=?Rbuqb%HSIXMF z;=Wer-ZX4YP53AEUD?kTA!%m$-@DgJ>z4#2EE;(%pl7tP!#=O22P?KNTUp__HYs{d z%eX7}QE#!+3J->dg@w)JL|u&{rROp_50}fs3^~g@5v)Wlx{uqmGmawd)OW+exc>x| zm9IR1`BYj#x5*XjE#u_NxV}{(r-%8QJaXzbeneakJALlebHhJ{{uZ`#{V&M$$D1A- z{WdVFyddxEtCNP#QVzB%wfL~FXHCc1gCE@}-sWJ|H`aoS`!3AkUZ*46rp=CFarbLK z{Ll982j4t#yR-h!e`}Ky@+FeIrAs6e&K0>;n_o`*a_21h%OR6P76fj)WU|&UtvuxZ zofoSOJPuWM+UI`3(QkF2$weEl?7>m@V#=mFW}V#B5FcLGwSWDEaaRgLv&Z`d^|alg zDzdiOcj~A-NN-*LRV8lwG`p;>JsJ``TIsaSb?#k{(tiW*TzR0HK0~GI=UVt>-HJ`) z)jxQBxO0PTX_4icg~_Lehkuo?{wsIC|Ld*$e;iro-XpL>QGwJ{m_7?N%xm;CEu8me&?tBF`V+2Z6COKdS&t9=sq5YeIn%qDhn>7# zdv?U{hq?tVo!LPtJ~i^elt7Q8G$^OoP&;ui!dOury%=uD>BlG8ZeigXG zyUY1rhux0e{Ppj>7a}%mu1hr6pPY|ZEGjzV*t2Q)_s#d^_BQL6I_Rcmu~YAN7T-8# zbQ`L1oi6c;@+eC@ta+zBG*mIbq2TXVTg#@_K6!V4j)%jO#JsmlAI7dXteddztmRqb z(Rl-WeY+n{sJJ!zNUqx$PC>r*4PLON0^=g!-SoVi~vSe@m@dV0D`ZN{oK+JpqD+(qUrlg~(W zc5)u-B$vB5B*~?Ta_1pfA*EcmZ;+C{!Jct!U2pSHA$J=_;H4xq447ZKf~Z>1pK(dkDM0{=Zm~j&P&~Rz_*w4&E$MLxlZWH z#i-*GIZa|xtVYYt4v*DvvB|;wrv^1QV+Q%e5D_;cA|`G|RCsJW=_D&T03*{>WytjaF5%4|&eq6xK1iVhbVJ)HljbR{3f(+Iu%KIRP@stX!|0K1aV1`Pf!i#)*r_O%8)2OpfmY*c_IG+ zxo%x=(U&5pYX|jn3^{$mP+pE4t|=tSPwUL)XE^2OkV`SA{AaWWGyF2z@a%^~_1APJ zXOB7MH_&!s_-(Z5bBF5hAs@l$AENyc!~Z~A!SKmA{$31!j<$;7uh6E?HQJvr^b^GB z-=RH`;d-bKWq365sSNLoJdEL8kw-FIgFJ@ey^!;ZE~%saH$$Gt=;{2_GJGKF(->}r z{4<6xLY~3!4CGl1cSgRH;Yr9lB8TULZttT5bVmjpc5PA}Zr*tTr}qw2!5RpOa>yaU z+64)0*z+pEAjwLX@tkS_IS4q!%|Kg$IcR|=VE@N5+#Y!#!|6N-VfbpaX+8D-2)S zKf>^8w96Sz&%cu4x#)+sqvLrBb#;v167_#G{3hB4SPz*2GRXQOr~c{vI9R}8ZqxOe z?l(XWoX%YbfgY|eO~VBo^xjxOuP61x|JjJt(d$P0L(j*D@k8fF0K+xte}aHRf9SeO z_a`)N5$frBN%;okYQ|3*+VsAm`U=!13-oZlhmq5E^t|Y}FJ|=gd_QOSOZ1Z?;Ba1F zp-pq@ANJ>vb}{;&beKCR;LuMo+9eF{f;RpB3;tpKq1XKaqqjx-62s}beNDi@Pk(Yi zx-a0+pPgv`#_&yOKf)X`n9nE40qL!P!yew8r)1rM2MbA14V=d9g`A$3BZx?{7I5g# zEA(r}aM}+ifq&>vKeYV>9O5n@2c!@I2mJ)J;{_b_c_1cfiGYJX6zwgTL;s;`i}o$dsh>4yKYR~=$MBtKi{T_mqSu99FLQ?LROGq{ zIE;fUUYDT^_eDNVz@bR@ZIcBY{LuH;jmYVJ^bH37R-nhO^ED?J4(~RQE(3Q8@ zI4>qYe;}uEzr~6t@8L8K9e?U)3>H{Ehv9?J-pp`UwCQt(`k}m$(R<=JOE9N;5e||a z!zW>Tx-L!M6>yjjG|~MVjT?p) z7MN3>fwmLF=|0Lsz=d)B1zZ?+AadwGthIJ%3-^1#X?t6&r}`kY>3pYrB62rI{|VZo z7#@bUC&S@;5u^ZJ#^1lf^HK}A@VunRK`YeLegYHfIazZ0Y;E{Vl53N6c?>NjspG?C zT6LP1lac=o3Fl-plao1FQUVwtm&?fKpk@&v;Yr$*L_|7SvpgbM3!jR3b)mYP*F>vZvm{M)TVZ^xMopcQp3)*<@-d3o z5ec(rlW*pnjQp#LT1LKrJMiDA(2mxm$P$wh64goCbnJjSW=2#}_-s1vIL!ZZCM7Ll zZVT@naHfDClIZ%Qvs&&eYQr}bxQ+@6Fqh!QS%o%yGl4kp?1I!=m+|j4z;XFQN}ij| zrPc+|3X?rCz~}$kUQXJAPiJxn6OF%L2uYd7r@1#WcKql%NuM{=4PBS0tssT=#xE4d zZ!_LJFn$n&9Y1)FhrXbUlys>A2V^+~n76v;2!rp^?ZtlsANxpBp&y73vDx@xghBl7 zah~@!^`$_B1}cXS8?zPfK= z?FEQ0vRYW@V5+n0&q{3X#5kb+rx?C7fKRr48MY6lLd@CrgGl4{u3yYRT>}~)t{*(B zXnQ(;+lvh?d*g;M4A(z+kAz#2Z4c9oefAK9S2TnWo!D)VLJJx@-|4 z651&18g`Si#q!0n5i4?ybt!WDT9@DX%$$>FPx<}v{k&fDob!2~&*yWl&w0-C%mUv) zKNAjzA;Mw4WIkzxGE7p>PkApx){C)YdN7iy{(2kG{q-Fok$e;GFHluTrbs6HitkRD zB>u}k?QtZRVdVbHP5U{4Vdf%-X$bi1dEgMJS2_d->gPEK12XSd`#4xxAqX)}VS{ji z@&xD?ur6@+aS#GHfl4a;GkqMq{Pl|*79uw&a)Y9BAXca!pwxnr2Z}&h2`0fUCT=E1 zlX@^I2SuPf2_a*_ZceyBZD^yw+0;Q`4>d3W%awKLGU}#(=F{<@PEmEi(=9~i}<;O4I% z4T-qi5Uvzv@X=L)y%$w(D1B5fu%|fodsMZm&3KQB2g%ebW{@ID!3>JmMj0-Hlu=>E zOr%`H_%eQKjZ7hoktPdOYOOF#A&iex$c0j+TBSg(`Boh-lu1=k6s3yON|j2XR3#V2 zt6DUzP#dWb#z|uoLTywG_<(?4OnjVH7#FLMMTI8|rCOmYi6~;#hi(M2gONe=%$TB|1=dl*>;r%V%0ZHH^*@e|oD|Zf`uv$=jV`Ch&%U_h zbV|VSA>Ph5fjWQrTiG1wI{ZE9(g17EM1=eRMpG0 zQ_pc*H|iStHkM6YdV6thTx!FI#v{WUe!aWNWN&#aXKLnI;k*5*Jpy+7>~iOi?03#4 zqIO@zY8RL2hab474o@pD?2z-MDXizyMf>Nz8PzV-A${HIa|wTs_^V^%$y=)Jm9KRp z-ql{XwJyYR|M4{?>vq=ebaIR9sMH@Dtb5o0xk=XViQ3{*hbF%mnO!LTxH-FU$MFF7 zw9MPlKRL(#bU`w;v*(kNyl9KSw?TjCEdrB=Y}!$7D;n+ScIUXShjVP%3){NkY3)yV zXyZ(pv%IzIc*Sl9OpD!JEnO!U>V|p#dD*_hEZcDVCnJ_EQ672KVd9Fh4!Yk@U6McA z*Rgix-c7nxO~U1}CDo&12CS;9o|kr;Bl?&Xnr35t-JyBa7lGMTA$jsFwQ{<{vZ*^8 z^i$6`dabUwb@k6LBdRX-*Ua^r(6hdJh$<;OcZmK`yPh@toR1}&zM5^f{b2QjysBTb zemF4ibjA!-v%q?4Xyy{Rs&S8{U;01M>HT?IMp@@tU7y}ma`mrFViOW3kC zbm0eCvaaF8f76x}-%Sij^B&~w@!Ouw`>MU)ZacpJ?KHk&osjji4`+y;lsjux-9!^f zhs8mO(`@&2aLs>QoF}(_ccjA3dI7h}Cnys&We=# z-BNE?edWGt!eonYzh*88i&6*V9cG$0=(*3Qya;|SH~HbIPfkF}mR-*r<`2tz_Ig{- zh6}^{d&lmb{w%xfp~r@a>OOW!?kk5^S$vb0k}+rf;pG*5R0BTV7(eGnGsahP<=p<9 zpa!1)pT5#N!wPuwf_4<=6o`B6(w)yfP?*^5=H-%u%NjHs$A7jz%gkE3PxXCKS)biU zW9@5-&dL6&?>1|~@u7;hPBo)DhY7B)o3VXxNp`LO#h{(XtH0_mA0Yj7{|sz39`SlH zKi$j9H}S)Y%&9*&J2|>;I_$PNjc+-9%|KUAj(BVDAqQ%uzR{7979F!z6zTtX_+ewt z#{~J=D&>C~SKIjoJN0#JN`54-FgX(ZKrT7^$nk#qXs6PU3$g#04Sa3+eQHwEc{kne zvt_m4%{}Ro;VBcipR>7pLtZo4dDkzee=3}GA$e`Q-aA_cO{0SLyUD1_i*i_K= zGJc|IEvJ@a+Qi8*#2`M)TaU}CU&nDntQJQ+y?^$pV!z$%r3;0wwFSYwT|3DqZSRzs z-PJ6xXitS@SizLpRUS>e-SaI%E2?saUOhJ>cks=#JI#Cb#ifKDem01f&e%iMbY>svvc zj+@+`XnA+rYLB}vcbd03-LjQwxZ#@$np`q>bibB8G{5KI=6=>k#uh%w+_rXkOqEae zjzlY4Zog^E9_)__IpYzWcQJ7OqQ9-B`5sr+C)!^AUbnY-sNdg}yovyB@vVMI^VS{8 z>i;+(Z2f@Wms;D6zW#VgueUqKHoPcVz^P67Vm^!>8J}F^h_~oTxl`8EsVdw$EN*t1 z&#~g2OsM4DR{L8xS{^$%rpL8iQR!>CoYC+v1woOhwOX#ANFpEs5}un>Qr;cNz^4ym{?LKVp zZeL!cK7F>vxpPKfeNDolB~NyE?s#zEugA;oD32-14vFNGA94ku*OU8Xh;z&c_k1GU)3CVf!5;^G;nw?juh^7BEUz=$Adi<{+mW?&5 z@IET9tE03yT*zyWh_*vX_?LcV^GiLr{>Ac|*@j zy~NT)+`%`c_eO7viiPdf!l8bSx3~8Tkba*sl4mpbj-x~4dk43M#lk6yMekSd&mD5J zU0uD`Bh`j<=k$J3btmq-)%@TIX*~Ov<6@{58&sSb1gZR zd{4wAe5Wyd;TV2*5vbafdG@g_6K+ed{$0v7 z^#0!rG%jP-8X7p9oLUQ)v1|bD2(`;nuCVu_Z98{}y9p zUaOWG=atuLBy0`tyjCsx0`uy7n)avFoO)~tCqtWCsVy~3LoEg=ZB#lsMXIKi;MkQmk^O4aDsmOT?ERYhr& zMKVSd=ojKw>%_-a-h zI~LDp*~8i8(5ftx??a8x*w5L1nTq0#Z5pxoc*e}Ce zPubtc@z+z_67zhD_r$!I;#N5R5sI5*ev;yP9Opd6wb=d|#S5_hnBoU;oL3b0#c@n< zIT?pAY$u>NS(m*i{tb@fOz|sNA4c&JSofy*SzIsKe@T00;P|sB`=?m{j^bRbCsOX)tHlZ zX5l#3SsZ;cZP~XUvN$|D$v)f6;*i~s<5++*5>VN3Y*-xP%t1d8dlrW{|G{yFusCFU zgE0~bi$feD<5?Wy+{1BZvN$_V6vg}EKw8Ynx?O|&xqxMlk-;OIvaiE&3Mf7rI~}0- zCTw3x@fyr8Qv4+5w$wlb z)i}-|7Kc5XtY-;}Lp#l|y)VVz;d;km4rVZv9Bdy=aX-upS#h8bGCcl!KEuh`25iZh z7G+z`+N54!AbpHU%XvnGbw`Q^VSNC_$$n1!pk6pHDX^XKedN=5X+Gw|a7yemuhusQM?H2q`f5me$3hDA86-qn172?Vt)zitXg=rKCL{q9|O7!mtgoX;SiAJi5P#|Vh zHL8f#Hp(dU@`Vjhb4V62dKp8yOdS)0zPB(U^tX;egg&1PG`yo>Jwg>Piq)uN6&h_a zu3Hfq8m>YA@Q_ja-%}xSg}EX335n!|GxSGVvL6vUcvpg3&x-(@Uf>%u_4vN+j#S8! z^Bw3Qa9;t(+Z7;#kaGahNs7Y}m2pKmi21+z!+QtBB=;rC8idqO-ZKa%^^?>K6}06a zi5InwIO3G_pZLRl33>8zqb0n-qz?s{Gq?_j3eD7{m(;;j)@R69@kIagMoq2wg(9#fels+6N&xF zdmhFu^%H$B%Cyz~Q@H(+xI$>J0R2ccr2Qul0~0q=fbt+2Sl>=Hn3xfK7TLDt?*Uw>5umu(2W`^}~F@w-(}0=C7@~!LJn8pNAU;%K^US m(EjiZhTc07V({OxOadq@f%@12-{{)%pM%@qjdGw==Kla>;tf^+ literal 6016 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 W$N^-t*!+#abg1|$nE#Fc6aPQ11XG^? diff --git a/src/fex.c b/src/fex.c index f6fc774..83723c3 100644 --- a/src/fex.c +++ b/src/fex.c @@ -6,30 +6,22 @@ #include #include #include -#include #include #include "config.h" #include "debug.h" - -enum Flags { - FLAG_INSTALL = 1 << 0, - FLAG_UPDATE = 1 << 1, - FLAG_SOURCE = 1 << 2, - FLAG_UNINSTALL = 1 << 3, - FLAG_LIST = 1 << 4, - FLAG_SEARCH = 1 << 5, - FLAG_FORCE = 1 << 6, - FLAG_UPGRADE = 1 << 7, -}; +#include "fex.h" void help() { nprint("E", "Usage: fex (OPT) (PACKAGES)"); } +char* flagNames[] = {"INSTALL", "SOURCE", "UNINSTALL", "LIST", "SEARCH", "FORCE", "UPGRADE"}; + int main(int argc, char** argv) { - unsigned short flags = 0; + unsigned int flags = 0; char* packages[argc - 1]; int pkgCount = 0; + if (argc < 2) { help(); return 1; @@ -42,25 +34,22 @@ int main(int argc, char** argv) { case 'i': // install, 0 flags |= FLAG_INSTALL; break; - case 'u': // update, 1 - flags |= FLAG_UPDATE; - break; - case 'S': // source, 2 + case 'S': // source, 1 flags |= FLAG_SOURCE; break; - case 'r': // remove, 3 + case 'r': // remove, 2 flags |= FLAG_UNINSTALL; break; - case 'l': // list, 4 + case 'l': // list, 3 flags |= FLAG_LIST; break; - case 's': // search, 5 + case 's': // search, 4 flags |= FLAG_SEARCH; break; - case 'f': // force, 6 + case 'f': // force, 5 flags |= FLAG_FORCE; break; - case 'c': // upgrade; don't ask why I'm using 'c', 7 + case 'u': // upgrade, 6 flags |= FLAG_UPGRADE; break; default: @@ -74,22 +63,32 @@ int main(int argc, char** argv) { } const int sysSanity = isSysSane(); + if ((isSyntaxSane(flags, pkgCount))) { + return 1; + } - #ifdef debugEnabled +#ifdef debugEnabled DEBUG_PRINT("sysSanity: %d", sysSanity); - unsigned int flag_values[] = {0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}; - char* flag_names[] = {"Install", "Update", "Source", "Uninstall", "List", "Search", "Force", "Upgrade"}; - int num_flags = sizeof(flag_values) / sizeof(flag_values[0]); - for(int i = 0; i < num_flags; i++) { - if (flags & flag_values[i]) { - nprint("D", "%s flag is set.", flag_names[i]); + unsigned int flagValues[] = {0b0000001, 0b0000010, 0b0000100, 0b0001000, 0b0010000, 0b0100000, 0b1000000}; + int numFlags = sizeof(flagValues) / sizeof(flagValues[0]); + for(int i = 0; i < numFlags; i++) { + if (flags & flagValues[i]) { + nprint("D", "%s flag is set.", flagNames[i]); } else { - nprint("D", "%s flag is not set.", flag_names[i]); + nprint("D", "%s flag is not set.", flagNames[i]); } } for(int i = 0; i < pkgCount; i++) { nprint("D", "Package %d: %s", i, packages[i]); } #endif + + /* End Prelogic */ + DEBUG_PRINT("[!] Break parselogic"); + + for(int i = 0; i < numFlags; i++) { + DEBUG_PRINT("Iterating over %s", flagNames[i]); + + } return 0; } \ No newline at end of file diff --git a/src/sanity.c b/src/sanity.c index cc376ff..ba82188 100644 --- a/src/sanity.c +++ b/src/sanity.c @@ -1,33 +1,58 @@ #include #include "../inc/sanity.h" +#include "../inc/fex.h" +#include "../inc/nprint.h" /* - * 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 + * Uses bitwise operations to determine the sanity of the system's directory hierarchy. In particular, it checks if the directories of + * /con + * /exe + * /uti + * /uti/lib + * /uti/hdr + * exist, and if the owner can write to them. This notably does not check if the program is run as superuser. */ +/* For a root check - simply use conditional checking for a zero value in some way, such as !(getuid()) */ + int isSysSane() { - struct stat conStat, exeStat, utiStat; + struct stat conStat, exeStat, utiStat, libStat, hdrStat; int result = 0; - if (stat("/con", &conStat) != 0 || !(conStat.st_mode & S_IWUSR)) { - result |= SANITY_CON_FAIL; - } + char* directoryNames[] = {"/con", "/exe", "/uti", "/uti/lib", "/uti/hdr"}; + struct stat* statVars[] = {&conStat, &exeStat, &utiStat, &libStat, &hdrStat}; + int flags[] = {SANITY_CON_FAIL, SANITY_EXE_FAIL, SANITY_UTI_FAIL, SANITY_LIB_FAIL, SANITY_HDR_FAIL}; + const int numDirectories = sizeof(directoryNames) / sizeof(directoryNames[0]); - if (stat("/exe", &exeStat) != 0 || !(exeStat.st_mode & S_IWUSR)) { - result |= SANITY_EXE_FAIL; - } - - if (stat("/uti", &utiStat) != 0 || !(utiStat.st_mode & S_IWUSR)) { - result |= SANITY_UTI_FAIL; - } + for(int i = 0; i < numDirectories; i++) { + if(stat(directoryNames[i], statVars[i]) != 0 || !(statVars[i]->st_mode & S_IWUSR)) { + result |= flags[i]; + } + }; return result; } +int isSyntaxSane(unsigned int flags, int pkgCount) { + if((flags & FLAG_INSTALL) && (flags & FLAG_UNINSTALL)) { + nprint("E", "You cannot install and uninstall at the same time"); // TODO: allow for this to happen by parsing the flags in order. e.g fex -i japes -u japes2 should install japes and uninstall japes2 + return 1; + } + + if(((flags & FLAG_INSTALL) || (flags & FLAG_UNINSTALL)) && (pkgCount == 0)) { + nprint("E", "You must specify at least one package"); + return 1; + } + + if(flags == FLAG_FORCE) { + nprint("E", "Force may not be used alone"); + return 1; + } + + if((flags == FLAG_LIST) || (flags == FLAG_SEARCH)) { + nprint("E", "List and search must be used alone"); + return 1; + } + + return 0; +}