From e441dec02054a81490bd36e9698d5e5770aa928b Mon Sep 17 00:00:00 2001 From: vx-clutch Date: Sun, 10 Aug 2025 18:04:30 -0400 Subject: [PATCH] save --- .../index/config.h.1D4220C6FF66C46D.idx | Bin 0 -> 332 bytes .../index/contents.h.2CBC61E2CD5097B6.idx | Bin 0 -> 4294 bytes .../create_project.c.6C9F96E4B534FF2F.idx | Bin 0 -> 4632 bytes .../clangd/index/file.c.398C7881CF457486.idx | Bin 0 -> 1020 bytes .../clangd/index/main.c.7FD7D25CC47FF791.idx | Bin 0 -> 2748 bytes .../index/manifest.h.2E308175C3A2DDBB.idx | Bin 0 -> 2578 bytes .../clangd/index/print.c.568C625DB5D5283E.idx | Bin 0 -> 614 bytes .../index/standard.c.D171D886C087801F.idx | Bin 0 -> 734 bytes .../clangd/index/yait.h.D7502194D2C0AFD2.idx | Bin 0 -> 838 bytes core/create_project.c | 268 ++++++++---------- 10 files changed, 126 insertions(+), 142 deletions(-) create mode 100644 .cache/clangd/index/config.h.1D4220C6FF66C46D.idx create mode 100644 .cache/clangd/index/contents.h.2CBC61E2CD5097B6.idx create mode 100644 .cache/clangd/index/create_project.c.6C9F96E4B534FF2F.idx create mode 100644 .cache/clangd/index/file.c.398C7881CF457486.idx create mode 100644 .cache/clangd/index/main.c.7FD7D25CC47FF791.idx create mode 100644 .cache/clangd/index/manifest.h.2E308175C3A2DDBB.idx create mode 100644 .cache/clangd/index/print.c.568C625DB5D5283E.idx create mode 100644 .cache/clangd/index/standard.c.D171D886C087801F.idx create mode 100644 .cache/clangd/index/yait.h.D7502194D2C0AFD2.idx diff --git a/.cache/clangd/index/config.h.1D4220C6FF66C46D.idx b/.cache/clangd/index/config.h.1D4220C6FF66C46D.idx new file mode 100644 index 0000000000000000000000000000000000000000..bcb14cfe8b6f19907513b9cca91ce8371b87d497 GIT binary patch literal 332 zcmWIYbaQiIWMFVk@vO*AElFfyU|z{A;eY)--WO zE=FDsUU`rd2t5BMtZ1;L+!!d#$HAun76TFm-%c#ny?xaaD9pjZ!4DJuaPCA4|9>4H zpfDo`qX10!$?gL=eFx3Mfx_$@>~Pg58k-ILrV7OYg*iDmd0?vl+^@AbJHI6lD9pma z0#_{@y4d5lR@FYBFe?YE2u$^XGu`?}cq|VBg?Tu5#9+cef8`{CIK@TD#oQnUqw$T1 L5HERwcMJ>wG^kI& literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/contents.h.2CBC61E2CD5097B6.idx b/.cache/clangd/index/contents.h.2CBC61E2CD5097B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..a89054b27334acc5d8034db0d9d221565d8b9a4d GIT binary patch literal 4294 zcmYk<3s98h8VB(A`I{>en_T23-tr!%X($R^6~xfQPEi^nii&rvfV?XLC%mAAW`>HI z3_5A0Sqg$yi)d!4D1_&DNku@h#LHwVp1|{dyZcT5o!Rf%-~0S$XZL$%XXkl6G9u!8 zccsE6Mb1r3NQr+;Ddnl3$tg+GT8dKRpw!&l#MLEHrG4Bo|LhTRC_i}V#n}O4`ezrk z9OQ8!FS~d|_?75s#UXoe%+4P#Cr*dyEUqE>%uRR#&o~?-R{R{{h0ap z%H^@W&x8k7T~Gh}WZBUMuMbKi3X6uttXlTPqr8%4_1pe4cE9J*^8BU-+nT=HbDLj{ zTJmLO+M?xt`G2}Mv)E2uTd{Xj$jOz7AN&|wzOlZlHuz5H#FU&9YxmdmdLs2e__~_v zB(J>EeMK$)b-v533|q{D(9n^KeLtT(e)|0QW1%Ah<5X2pNa=v@Z=7>i$@3B?RO&lY zQ`!_YK4r65mA6vvKZxZA@pcx~QYkOjmg3&L{@=(NoaWQqs(f{5n^?9<8)q>>kJ&@( zha9U84O`v9s#@t#8%rBM`^5-6VGqn(Xbadj^^vPpwbp^3#PXB)JBtzWw1>uJ?`ryA znM+@*^3kC;EN}SQFGirbJy4er;D0$fM+dAr@ReA;5?^OALT>g@W7o58{tJ9YSk>b? zlrENZ32+u8B=*pMkM6Y=S1h$zRXZJO6icJ{Ig1f$VGq@IMA7{V6{S`cphIWHa#nw6 zM=?VF_RyMvf!lXaNjq#+ZFT6bSnleOqZpw!_RyA$S>;z>52>*#KOJgiY2|Id7y*kt zP@Q#WM|Dt#TC4KVfgNJmA#I(-2sN{ZY!z{-4gP+&t;$7*GR2aqznP;LA=pDIDPeN* z27Q0b>58j4Q~hHw9_B=K!!b_Bu~Oy~b;B5;dHk@j@nCNLQ5Sve>f&nrr0frKr25z~ zPqSf;Q8$bkn#bnw^s!@dW@Bf!(7Tn{2ZB!Pj+={{n|bc$?hbd$Kk|SF$rGL=FL;q! zqczDJ-XtIRkbL1w3P1pWt2$F6ct)ims$? z=tk;}?xY^*L3#>LkpdA&>WQADr|~qY7kZI;qc`apJVWY(KBT_rOL`X1l7bLK>W6-$ z{^(B%Mlfjr29O3~ASnbPq)>#Cp2Ksb=kYx01-w9d5igQn!b_x=@iJ);29XA1FewaS zq;Q0jhF}OO0uiL47)p8tuaF`UNg9S>q~RD&dKIsdMqmUf3Q?qy7)g2!uaTk=O?ne= zlHS5wq)`|}8jaDUxA8V91~H^D7(7*H$L7It~q(mf=W?>fT9lS$&7w?kZ!+WG8B$1Ml zOiDot>3zIUnvL0{IhaG5i@BtEm`9qA`J@F{Kw5}}q(xXnT8zb{RHTwJ1Q|kJDp<;1 zCRoN^E?CZ9Ay~oA5@fMg3RbdL30AQ`6nx13NbnImTae9OEm+N7BUr=!Snx4>tza$t z6Tv6!b%J&5PX(W{a|Ai;^@8>64T25qje?ErTtO~-lVB5jvtToOi(m`;Gr?!Yr)s-J%T;#Zv@}4zZHDT-YeM4-Y3|{E)W#33k8Mj z{eu1MB0&+mSWwJ9AUME2C^*Qr32f{VK?(bi;1Ii1P|7|mILtmGIKnrVEKpHz8NM~mN8UNT^`t%Cn*!aw~!Cdro!?ER= z4Rg8E4d+Vd?3fFkZaCLCXTx0Lbi>%-%r`PuH+}5b+suZ!uIYwzNpp6R5@yC5FO!od VChHwl?{YaCqa*uxZ0)Jk{{g!4LVf@M literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/create_project.c.6C9F96E4B534FF2F.idx b/.cache/clangd/index/create_project.c.6C9F96E4B534FF2F.idx new file mode 100644 index 0000000000000000000000000000000000000000..7bff9d03ce56d3dfcc2669ccbf5175206fb085a9 GIT binary patch literal 4632 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 HXodd)URwVa literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/file.c.398C7881CF457486.idx b/.cache/clangd/index/file.c.398C7881CF457486.idx new file mode 100644 index 0000000000000000000000000000000000000000..5dd1d90e3596dd2ba6a4a915d333a53f9d5c6188 GIT binary patch literal 1020 zcmWIYbaVT{%)sEB;#rZKT9U}Zz`!5`#Kk2=nPQ9#4DCz|3>9-)Cpu;yHsERf8eH@u zQMS;9d$GWa%-vrCswCe?#JK13bjFIb>P`9g{id{bV&=7O!}rxylX5C%#ft4*X`+6f z{e15iuTRb1r~S-DE}p2roRl%^&eO*$EHzkPy)E5- zH}BqceeHnVsw?3-$vjT}ZOhIaC_i-Bk!}VTb`sm?VrnAmiKdbU)DePAl&Ah zVaK+d_x(rKikcgF#g(~9$-q#uwhlHfEMsNhVGvh)OU@aKeOnM3otp;k?Y?&N`vF zsj7@TqN?1gQZPkzbEOyWaDHYC6qaF>VTak!uztGV)WAdLKw&*rJua9NSyh>i>Y2PkaKYRv`n@x2XljUJcP5zGvrS3yArbMCiIPd{II+SUeCEy*a!2~&OM)BLCH{j9Tr!fJeK z;xMyKe!Qp>@6cHUbbvmmJ|D~w9#I=k8#r%i!HP|1-nAbD>ec4d7KJIgQJZ$|Vqfob zps=2xo(4?#uk&Swt;rkT0F9JllwyYo^N6Z5s>69O`CM}F?j)BSVq zRi9%xd3sULDfb&+EJ`|iB)@6>OQt*RgP--AM&ch1M<#!4i0{r$9CxU)NT2d^Wv?-~ zFg7K2!Or3xXE%Ss_%Y3Ki$30{XMxK;z1bHK zCaUfnwTt6OoHz57w;0vj`3*%pk5S0TXpBtB5u=D4F$(D+ju=Jkh>>BZYwI^I9&ytv zFiF*>>O?c??&(6rn9O#cEkT)zOpT~%o@mxHbR#1F4P#)}EE>pO;P---`8hw(>FHY; zYov!3Lt^~d5o0n{Gu4NooLS=r6EDA=OqKNG^g+xhCK~}Zf`-|u$-8FhRGdmyVUnfJ zlBC|Ew74@{m{cpPC8!=$^`H~k&7j^4lC|4GyA*I3f$0O_M{1qGb^bjgVx}|c6hRPp6Nh*Uk$B- zCCVjQCbn0U_g)BK@jco8%5koB#|m1x#j0W~s;5B1~0ThpcL!d zAev!z$rSv5+8rj@vTT*;WT9-K1Ql|HN|9@VfF=lL2H6b!|Jvi~zW&DP)8B2T;qM22 zznJM~pnX5{rM?zQ7_~-MW|++!|DQIB$xeWs;KKYgety3*`{m26bae-e>45Pp6$^d$ z?5GZ3)J6%jhuM#r`#8pMp-#JPHx<{aYK2b4>Wg}_w`OL+c2griffkQc969L&-g11x4!QhQXHi&vgBEk zQ=c!JFFExbS&jr*IE$0$u$rrOVgX@N53+g?`gW9W*ROxLB^;;muLRjjk?^hiy6k52 zh2ylMXFAQKUjUAQ$x_WyBBI)e+9-xfm#ezMZ%#ZxZOzfm@njn~*S{g67f}$X0=x5tyt4SSM~VApgAux%=l{ zr0Z=EV1rP0W*66P`E!Nsi|;5ANg{=-mHXB_(}ZrP>-I~kPH<-XqxVm3kRYSlC?Lz! zZ`xcu6CcqfsmfGAj7d69cM}cF#Kj`4C^{{ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/manifest.h.2E308175C3A2DDBB.idx b/.cache/clangd/index/manifest.h.2E308175C3A2DDBB.idx new file mode 100644 index 0000000000000000000000000000000000000000..4d67cdba2a9f4b5b6c0f195acee5ea397ed419a2 GIT binary patch literal 2578 zcmYjS2~bm46n!5^_@DeF1QJw8{GgBkK>~_mp;QD3L}gUeRJ86OwMtcj0_xCFM=E2r z2x=GH>RKJFIx4PJKrOY^792M$t+XhuOLcIoAZqV>@gi@AGkNEqbKmm+xun^wRu2zC z5;JW1*_pXh-3TFG@aM?QnR%5XgmWb%f5ZH=)Rn(Qcy4rja!&uOMC*It*2ok~d1~r_ zl9&K#?WPOk)=$@^_bolSJLKg6y0WVNo0|Lwqi<}g zaZ8Sxk@~mJx0~znN6YGunf8sXI=Fh>tlrl4a~Tz5|6Tl_?7YvwpK4Ra<*xsz&zh6F zzB_&W_zJsi_tL-I&D*nQ^656k)vwQdU7p1slh>-4EDCCd%-FP!tfa@T%2KtJGpt9$K}1v>rS z9#2lsnsC%n)wW={f0la0`HtdQ2QSryWUNUvmo)xbz9lMSMEae@shXkLmxuGCj*S=c z?Dh@0T0^U`t#wGM{fp4Ew)wj%s} zX15L>c%Z&)EfGmKLZmqFI6VU*xN^kk$4Rn%`t{bRDgTISB7i`{Y2*y(j1SR+;Hq1s zZeqbvt(tTPfj8&v!GH>SFhON~WOc`U_f~I3Smr2@M}oAydp(GLct&D5-BpEei+~%b^TTOo)aZ0D$*1DM!C_80s0$e zq%9fu@Tpx*l;HR0`~?Qo@4?pJ_Q$4Ey^Ft{tRO}Z1h@n!8BhU)0T!^Go>yGdf8BI7 z(SSh9X_X9E1$M;X)|Z;NVZ-LCi5vu;oTrQd708&NxnX>`>1kS?iiE=!O>&cx0dBGK zZ2G8*_}WD((gz-gxreD3;N!OPv4>o?Z1_Y)%!GQXmFDSc^KNWT>^st&X7RihAa$`UR z-t2nT2Dd%z@ErWJ8oom!_2haA45+}sb}(gG`Y2Pi{HBWZh8;u*5lRNQgF0XG=*QNA z#|jb%{$Q72fx+7yglStnn`4eYR}pvc2g(Bl2I!v;edRof$l#@6k$kPLynd4Qe*C=|>lk)0d#-9zchHQAfIBNAsEs_sf<79m~i1AdTUNqtfIfElLSO zf)?*Xl!gdHI%n7ppc3r`Xu&oBH%of}(xMbE#Cu~UygcyIK7gWI_u7-Ao-VAQZ=AF7 zsK(9!C23ngwJ4c6vj>K5Oxd7E7jLXS2qmNWX!tke9N08~rX2%mY!y(F_6ej#$tqYo z-+xPEdD`UI&wdB5zzfjToCCWE(6oghof&;;t7o^QR+%Ubk_}Se=0$0+Y;c!ZqAan? zEJ>EsWtJ>U?wnyWf*sOMgsX^B1Q)^M7O)|~R%kau5#9;Vv$yw9Lyr8@xq0HX zUxtlOyyr9oEiiliH*dRb%4yLRf0?daw7BkD-J9efsIk#Eqjk-xNTVES$K&cM={237 zMH57`x*sOlPLuhVX7TURgr*1^?%yjo+sxJ9M}24MyUJ{}ex zZhn3ier^U%CPoG!UPgXahN9H8;(tJu|5G)hjdpBfXXfD(L;&%xtn~gTEhf%Dx)A=H4mRKqcEHYGlP)}>}{Ci z{yJY~*qXfY4bVstMiF+Ha8YVbB8XjFlw7P2V!%Dgz#stPg8?I7MdF7YZE>?NGV==x dFbKlL85ojtQ*yY0TrN%?4mNgH7EWev1^{B6!ngnc literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/standard.c.D171D886C087801F.idx b/.cache/clangd/index/standard.c.D171D886C087801F.idx new file mode 100644 index 0000000000000000000000000000000000000000..e8c1cba90571fa33c072f8b829b933aeae9ddb1d GIT binary patch literal 734 zcmWIYbaT7L#K7R3;#rZKT9U}Zz`!5`#Kk2=ncso*14aghiaD(T2eS?v@LXN~xnMA zRoAZgzSlVaDO)pbdg@Ut zXPJSDJkPNubHW_YbLRO~%SpI6TxFBmw#;eHwOwtuE5DmR-~PY;%EsyfnadlLZ@<3i zy19Oz^tt+7Ja3N8IlTYj0wOxMkA4}8_vY|0 zh%zwn3$X}E35c_ZOEGXVF*1noG77LV6s4vWs{=!+;M-tE?>*Y`bU-2_s^EY1$I0jP*s0nQT+UF`8& zt7;$60(mZZF_=jQ&UEV^;jugj6jtU?h6|^fUs@y}?)njEq$ryx55h>{ gPcty^AruHBn8~>*Iov=l7bgz~8#^ltCo?w#09tJ2EdT%j literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/yait.h.D7502194D2C0AFD2.idx b/.cache/clangd/index/yait.h.D7502194D2C0AFD2.idx new file mode 100644 index 0000000000000000000000000000000000000000..c55bf45cb854418e6c2ce1e019b3e04a8231af62 GIT binary patch literal 838 zcmWIYbaS&~W?*nm@vO*AElFfyU|F1|KE{hKf0@6E6B4HsEpntXX-( zIXbkrVf#PEc)`e(x7jW(DcaMUd29dU9#+MugWgZ>RO`w|hqk{CexIgrw`Zc*gRt`0 z^3_-QlUe8GueFPr|KH=-goyf^&C40M-$iO4UHO8W#Xc$N^sXsKtz7M2tg=*_aiQ<{ zgIBBS1b!Tl$|(B&{xtIn!KYJZo7dcrid%Gb_dl_}(`T)8y~QY2+Q0QG>*k(4!q-lH zU4KfDX>qGT1W!*&s)kixiRLvoiNDsjHb1|~CFUJ&*z(4AkrsPZ@);R%laDENH zWp2`QV7ORY2OAfbu`=*52mpB?AS}!xEW^Ob!NefK%P7oxXZjuO1hKMI9tLrUJcF<# zi=+?(Cl?Du!Ew(=zl_Cub9fj;VG6`q#HAQGdDtKdT3JuzakDgK@6sVpM{^BffE>`U`MWe z#_+8D`r_|A4E!(!qAa2!2n7s9scFT3fpReaGIB!v300mM+*v0yH&vC9OPH5~7v@uj zI49|wu2(ud7Q%+b;I$yKnHSiaKZwT;YMxRxr=?h&w;``96a(+#SF0U02%@g2bg$K fYEB}EU0jr04ECh(vo9%gWcQiHGYWyT2~;5fEt=>U literal 0 HcmV?d00001 diff --git a/core/create_project.c b/core/create_project.c index d4a607f..c5faa77 100644 --- a/core/create_project.c +++ b/core/create_project.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -17,21 +16,14 @@ #define DEFAULT_GIT_INIT true #define DEFAULT_CLANG_FORMAT true -/* This is to keep track of how deep we are within - the project tree. This is used in reset_path_ () */ int depth; -/* This macro exist purely because I like how it looks. This should be called - in every function that creates file to ensure they are being created in - right place. */ -#define reset_path reset_path_() -int reset_path_() +static int reset_path(void) { - while (depth != 0) { + while (depth > 0) { if (chdir("..") != 0) return errno; - else - --depth; + depth--; } return 0; } @@ -40,11 +32,11 @@ int program_exists(const char *prog) { char *path = getenv("PATH"); if (!path) - return 1; + return -1; char *copy = strdup(path); if (!copy) - return 1; + return -1; char *dir = strtok(copy, ":"); while (dir) { @@ -61,26 +53,30 @@ int program_exists(const char *prog) return 1; } -// TODO(vx-clutch): sanitize the alpha-numeric range -// clang-format off - int sanitize(manifest_t *m) +int sanitize(manifest_t *m) { - if (!m->project) m->project = DEFAULT_PROJECT_NAME; - if (!m->name) m->name = DEFAULT_USER_NAME; - if (!(m->licence == UNLICENCE)) m->licence = DEFAULT_LICENCE; - - m->flag.git = m->flag.git ? true : DEFAULT_GIT_INIT; - m->flag.clang_format = m->flag.clang_format ? true : DEFAULT_CLANG_FORMAT; - m->flag.GNU = m->flag.GNU ? true : DEFAULT_GNU; + if (!m->project) + m->project = DEFAULT_PROJECT_NAME; if (!m->name) { struct passwd *pw = getpwuid(getuid()); m->name = (pw && pw->pw_name) ? pw->pw_name : DEFAULT_USER_NAME; } + if (m->licence == UNLICENCE) + m->licence = DEFAULT_LICENCE; + + if (!m->flag.git) + m->flag.git = DEFAULT_GIT_INIT; + + if (!m->flag.clang_format) + m->flag.clang_format = DEFAULT_CLANG_FORMAT; + + if (!m->flag.GNU) + m->flag.GNU = DEFAULT_GNU; + return 0; } -// clang-format on int create_libraries(manifest_t manifest) { @@ -90,29 +86,31 @@ int create_libraries(manifest_t manifest) return status; } - /* reset_path; */ - while (depth != 0) { - if (chdir("..") != 0) - return errno; - else - --depth; + int ret = reset_path(); + if (ret != 0) + return ret; + + if (HAS_LIBRARY(manifest.libraries, LIB_RAYLIB)) { + REMOVE_LIBRARY(manifest.libraries, LIB_RAYLIB); + status = system("git submodule add -q https://github.com/raysan5/raylib"); + if (status != 0) + return status; } - for (int i = 0; i < LIB_COUNT_; ++i) { - if (HAS_LIBRARY(manifest.libraries, LIB_RAYLIB)) { - REMOVE_LIBRARY(manifest.libraries, LIB_RAYLIB); - status = system( - "git submodule add -q https://github.com/raysan5/raylib"); - } else if (HAS_LIBRARY(manifest.libraries, LIB_NCURSES)) { - REMOVE_LIBRARY(manifest.libraries, LIB_NCURSES); - status = system( - "git submodule add -q https://github.com/mirror/ncurses"); - } else if (HAS_LIBRARY(manifest.libraries, LIB_CURL)) { - REMOVE_LIBRARY(manifest.libraries, LIB_CURL); - status = system( - "git submodule add -q https://github.com/raysan5/raylib"); - } + if (HAS_LIBRARY(manifest.libraries, LIB_NCURSES)) { + REMOVE_LIBRARY(manifest.libraries, LIB_NCURSES); + status = system("git submodule add -q https://github.com/mirror/ncurses"); + if (status != 0) + return status; } + + if (HAS_LIBRARY(manifest.libraries, LIB_CURL)) { + REMOVE_LIBRARY(manifest.libraries, LIB_CURL); + status = system("git submodule add -q https://github.com/curl/curl"); + if (status != 0) + return status; + } + return status; } @@ -121,76 +119,55 @@ int create_licence(manifest_t manifest, char **licence_line_buffer) if (manifest.licence == UNLICENCE) return 0; - /* reset_path; */ - while (depth != 0) { - if (chdir("..") != 0) - return errno; - else - --depth; - } + int ret = reset_path(); + if (ret != 0) + return ret; - assert(licence_line_buffer != NULL); + if (!licence_line_buffer) + return EINVAL; switch (manifest.licence) { case BSD3: *licence_line_buffer = "Bsd"; - printfn("Not impl"); - assert(1 == 2); - break; + fprintf(stderr, "create_licence: BSD3 license generation not implemented\n"); + return ENOSYS; case GPLv3: - printfn("Not impl"); - assert(1 == 2); - break; + fprintf(stderr, "create_licence: GPLv3 license generation not implemented\n"); + return ENOSYS; case MIT: - printfn("Not impl"); - assert(1 == 2); - break; - case UNLICENCE: + fprintf(stderr, "create_licence: MIT license generation not implemented\n"); + return ENOSYS; default: - printfn("bad logic in create_licence ()"); - return 1; + fprintf(stderr, "create_licence: unknown license type\n"); + return EINVAL; } - return 0; } int maybe_create_clang_format(manifest_t manifest) { - int status; + int ret = reset_path(); + if (ret != 0) + return ret; + if (!manifest.flag.clang_format) return 0; - /* reset_path; */ - while (depth != 0) { - if (chdir("..") != 0) - return errno; - else - --depth; - } - - status = create_file_with_content(".clang-format", - clang_format_template); - + int status = create_file_with_content(".clang-format", clang_format_template); return status; } int setup_git(manifest_t manifest) { - if (!manifest.flag.git) { + if (!manifest.flag.git) return 0; - } - /* reset_path; */ - while (depth != 0) { - if (chdir("..") != 0) - return errno; - else - --depth; - } + int ret = reset_path(); + if (ret != 0) + return ret; int status = system("git init --quiet"); - if (status) { - printfn("failed on git initialize: %s", strerror(status)); - } + if (status != 0) + fprintf(stderr, "setup_git: failed to initialize git: %s\n", strerror(status)); return status; } @@ -199,66 +176,74 @@ int create_makefile(manifest_t manifest) { char *makefile_name = strdup(manifest.project); if (!makefile_name) { - printfn("fatal: out of memory"); - return 1; + fprintf(stderr, "create_makefile: fatal: out of memory\n"); + return ENOMEM; } for (char *p = makefile_name; *p; ++p) if (*p >= 'a' && *p <= 'z') - *p -= 32; + *p -= 'a' - 'A'; - reset_path; + int ret = reset_path(); + if (ret != 0) { + free(makefile_name); + return ret; + } - create_file_with_content("Makefile", makefile_template, makefile_name, - makefile_name, makefile_name, makefile_name, - makefile_name, makefile_name, manifest.project, - makefile_name, makefile_name); + int status = create_file_with_content("Makefile", makefile_template, makefile_name, + makefile_name, makefile_name, makefile_name, + makefile_name, makefile_name, manifest.project, + makefile_name, makefile_name); free(makefile_name); - return 0; + return status; } int create_configure(manifest_t manifest) { - int status = 0; - reset_path; + int ret = reset_path(); + if (ret != 0) + return ret; - char *cc; + const char *cc; if (manifest.flag.use_cpp) { cc = "trycc g++\ntrycc CC\ntrycc clang++\n"; } else { cc = "trycc gcc\ntrycc cc\ntrycc clang\n"; } - create_file_with_content("configure", configure_template, cc); + int status = create_file_with_content("configure", configure_template, cc); + if (status != 0) + return status; + status = system("chmod +x configure"); - if (status) - printfn("error: %s", strerror(status)); + if (status != 0) + fprintf(stderr, "create_configure: chmod failed: %s\n", strerror(status)); + return status; } int generate_source_code(manifest_t manifest, char *licence_line) { - int status, year = 0; + int status = 0; time_t t = time(NULL); struct tm tm = *localtime(&t); - year = tm.tm_year + 1900; + int year = tm.tm_year + 1900; - // XXX(vx-clutch): this segfaults, but why? + // Uncomment or fix when create_file_with_content supports this // status = create_file_with_content("config.h", manifest.project, licence_line, year); - if (status) { - printfn("failed to create config.h: %s", strerror(status)); - return status; - } + // if (status != 0) { + // fprintf(stderr, "generate_source_code: failed to create config.h: %s\n", strerror(status)); + // return status; + // } status = create_and_enter_directory(manifest.project); - ++depth; - if (status) { - printfn("failed to create or enter directory: %s", - strerror(status)); + if (status != 0) { + fprintf(stderr, "generate_source_code: failed to create or enter directory: %s\n", strerror(status)); return status; } + depth++; if (manifest.flag.GNU) { status = create_file_with_content("main.c", main_c_gnu_template, @@ -269,6 +254,7 @@ int generate_source_code(manifest_t manifest, char *licence_line) manifest.project, manifest.name); } + return status; } @@ -276,70 +262,68 @@ int create_project(manifest_t manifest) { int status; - status = sanitize(&manifest); - if (status) { - printfn("failed to sanitize format: %s", strerror(status)); - return status; - } + sanitize(&manifest); depth = 0; if (strcmp(manifest.path, ".") != 0) { status = create_and_enter_directory(manifest.project); - if (status) { - printfn("failed to create or enter directory: %s", + if (status != 0) { + fprintf(stderr, "create_project: failed to create or enter directory: %s\n", strerror(status)); return status; } + depth++; } status = create_makefile(manifest); - if (status) { - printfn("failed to create Makefile: %s", strerror(status)); + if (status != 0) { + fprintf(stderr, "create_project: failed to create Makefile: %s\n", strerror(status)); return status; } status = create_configure(manifest); - if (status) { - printfn("failed to create configure: %s", strerror(status)); + if (status != 0) { + fprintf(stderr, "create_project: failed to create configure: %s\n", strerror(status)); return status; } status = setup_git(manifest); - if (status) { - printfn("warning: git initialization failed: %s", + if (status != 0) { + fprintf(stderr, "create_project: warning: git initialization failed: %s\n", strerror(status)); } status = maybe_create_clang_format(manifest); - if (status) { - printfn("warning: clang-format setup failed: %s", + if (status != 0) { + fprintf(stderr, "create_project: warning: clang-format setup failed: %s\n", strerror(status)); } - // TODO(vx-clutch): make this smarter--or not ( macro ). - char *licence_line = malloc(sizeof(char) * 1024); + char *licence_line = malloc(1024); if (!licence_line) { - printfn("failed to create memory for licence line: %s", - strerror(status)); - return status; + fprintf(stderr, "create_project: failed to allocate memory for licence line\n"); + return ENOMEM; } + status = create_licence(manifest, &licence_line); - if (status) { - printfn("failed to get libraries: %s", strerror(status)); + if (status != 0) { + fprintf(stderr, "create_project: failed to create licence: %s\n", strerror(status)); + free(licence_line); return status; } - // TODO(vx-clutch): Take in licence line and put it into standard.c status = generate_source_code(manifest, licence_line); - if (status) { - printfn("failed to generate source code: %s", strerror(status)); + if (status != 0) { + fprintf(stderr, "create_project: failed to generate source code: %s\n", strerror(status)); + free(licence_line); return status; } + free(licence_line); status = create_libraries(manifest); - if (status) { - printfn("failed to get libraries: %s", strerror(status)); + if (status != 0) { + fprintf(stderr, "create_project: failed to get libraries: %s\n", strerror(status)); return status; }