From f294c25946332a75bdb37385dfaea3f2c4edf7a6 Mon Sep 17 00:00:00 2001 From: Ugo Cirmignani Date: Fri, 9 Nov 2018 21:25:31 +0100 Subject: [PATCH] Some code adjustments --- build/Debug/GNU-Linux/ftpCommandElaborate.o | Bin 56072 -> 56080 bytes build/Debug/GNU-Linux/ftpData.o | Bin 36616 -> 36632 bytes build/Debug/GNU-Linux/ftpServer.o | Bin 50184 -> 50200 bytes build/Debug/GNU-Linux/library/configRead.o | Bin 33856 -> 33872 bytes build/Debug/GNU-Linux/library/connection.o | Bin 35376 -> 35392 bytes build/Debug/GNU-Linux/library/daemon.o | Bin 14152 -> 14168 bytes .../Debug/GNU-Linux/library/dynamicVectors.o | Bin 15976 -> 15992 bytes .../Debug/GNU-Linux/library/fileManagement.o | Bin 31552 -> 31568 bytes build/Debug/GNU-Linux/library/logFunctions.o | Bin 7304 -> 7320 bytes build/Debug/GNU-Linux/library/signals.o | Bin 10944 -> 10960 bytes build/Debug/GNU-Linux/uFTP.o | Bin 6160 -> 6176 bytes dist/Debug/GNU-Linux/uftp | Bin 160560 -> 160568 bytes ftpCommandElaborate.c | 103 +++++++++--------- nbproject/private/private.xml | 8 +- 14 files changed, 52 insertions(+), 59 deletions(-) diff --git a/build/Debug/GNU-Linux/ftpCommandElaborate.o b/build/Debug/GNU-Linux/ftpCommandElaborate.o index ce869d05f3381a27bae68b1f8ad224cb71966b47..f8982f6e940cff7eab11ca6ed90f279ff065756e 100644 GIT binary patch delta 8665 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 delta 8618 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 MTg_z++-rj)XdO{#R1jd`#k$!7Cn zL!JwHlt-Y;mkMPZU^8{Fl`!3A)IzCoEud8^v!zNIY-FdcqGCHcmDkh`&bsF(a?C$T zzMpgNJ?DGQy?H#d-??|c^Vvf4ZerdO56!gJh3YD;mgU|7;SBRS+!f?@eBSY&k1ymtIVL$Aj?Xz9jzRgJ5gi~j zR1|XA_?%RwB8QNuApVi;)1_!N(iN6xf-@%%DLTI(Cmd1wAK|Se9=I(hpHg%?!j;4i z=jG%vMGqogN#+oaR$6>@Vh*;N+-JMGzrj=ypO@2n6@3t%D&pF4xi!x!T8Tgv@u<{0 zq-Y$mD&lWTZpRcog=7`+DmnMpiY`T_ia40H-{EjvP;?R8)x_t8UQx6M{%Z35DnGZj zK>W7roirh*&ro`$WHLwT%aN!i4$2utie5&#n)rRGu}sms;aW%BC;o&L{TSYL)IC+! zZd24LC+=1H9?Aa)O1JBIMd>d|U873BJ2z1{yUxYqC5Lk=#tjoBpEWt>*e8lklDZr+ z9k#>UCG*Kje*l3Xaaj5?SJ4P!LE>(qUPb$n3=$6tU8Cq}WP-#Yxg)KL4#8bRzVFGM zeMZp<^8Ie5e_5(KsPx^4)(}4?UHH4A%aEucz9@I?Uy9y=bd6oIm|Eg@MSVljC_J^q zA<62TqQ69-miSLnZN7M8SM&$OYKc!t&a)JaAX!ViMrg637m=wY->B?ds_30kOS#f7 z%be6J{WJLM$Sg##&f;sb=YADaghU;2k-ROVil&jSBd(JAFDUu~T=m4OgkD$lE_myS z(?X|7?zT%+2-g$GM7>|pI>hUVS4(G06}^g7J@F>Vxn9xvFd^dU;z_@vTi^*1=gZys ziK68QgoqCc{jH)m5DO8nkexqOv>eI*S?iKL?0Rn?6C$$}`3)9Fq!%SBW-a^;#C>v8 z)+%~Gq7B5h%dLtoL!yDWQP%EM^fb~9#6fxYh81mtD@pF;VnD|ba=R!qC5Dya%=QegMQ}i@aVdCpTpHj2~rjd9^?qF2W6Yw+=_ec-+DEcA- zjl}sfA;XHEN34WgO ziG1DS)lx-gN-aL6-z&R4sr0vzXd(_uU+NV74$@7;h1tX$4##tf_QBOm+#ol0SkZa# zHWMF`IXJ249E6*Rr^~tTDY_i-X5w)|?U%{+=Lk~G#P`XX$&#H-_rbIfziGRtXbhef z;;o`CRrDePEyU-gYo&^gA=W}%A`Z7HdOMOW#N~2sOi@2FEyTA;&Mzvu8}3%(Su!O_ zMHj)}O6(H#oT7b*wh}LqE@b|XCR&Ndgxa&54a$!77}BjYqfB0sdt}mWY6>uI!vgbt zcsG!5mkeB)3UbKPT%q(=WVpjhFGG9-`7%=KHbw1UJYQCNK+1Ye=?7pU#4kv0?sPcK(Kg}&G4Y_HZY0`>uZs1@6kUOI8?kNSJBp6NwUPLo+^vrkZGm?q zaf#TSCqFxFQ_2wDNW53p&Q|n8#5WR8m1%lh(RQS=RGLts=;JW$#GlH!9g0TaX(xVD zZr*N1zlA_MaZ1h|R`fbz?Zm&6fjgMSqG+JMmswdri?t;qD-=69-+= zE8DAm@OKdJ5cNxnzJX{5@jh{5xuR!~=&;N}q&tY;5>Ixj7!O>X#Q%`f4=H*W-cDkt ztQ}SKHH15f?~?gBtLSrxcM_kL$^2N+!$@_KS&qMUT3jsq&y<@B|R&Vj4PG6&%8A+rly!!4ANcRyB z$zyavQ9oS$WQs7a{}EG)a6hq~$!z)Wn?0<@5$`8cilhBE&w5(LJPI>FW)XP6V!P5^ zI%Xs=aKmYOMgm)ljWe$TL)(64A_#2nHa|pq`y=KO<_#`3XAu}Ib~;Ot+Ave4oGs3zjK#8ow6zYf)zVPgp|kG!N;%Cx3D57m z=l;G+GPKA2#2)uk^UR6p{I&NF58c0d!X&G-rmDzlEUB>?^B!3@oLD|LWBAt9^Rvw> z@D-Bx^6joKzow?Yxo&g0Tq$XELRw%9_7S=Y=W))sv{I}ryAdlS{_$7Ra)+X;kSw%( zADguNvZB)_rG;0OeiXqX;?S*W`E5m85iTOWZ(>^hP|;n87Lj=t?-W^lQK|?@e5bmT z@DvlDl;}N*&V|32_~Bd9j-OI=CG2A2SEb&U6%8X&OuR;NJFMtF#EXfSN!*i)ehsFC zc%w|@oT78!DzhY4B5}|5GwNr1afV*Kwt1 zrsLvIr5^rFayX-G3_N8Nn4X!A_?e>Dr2j724yVJFl1Zl0?}A-MoG){kt7r)#WyIA& z{fagsUPjy|^f5(`!ITsKK&l8SItX7m1wu0SClviys(M=KcgxgXQuWVvO&0dEEIS((c>B`>FYdl9T4&XlYkQ*;Hw6~uF-!(l}U(F)>I zGOyTeXSg};(`tz>mZ(fzP1iH}RQ8PXf4q7g(YiT6p) zGZfv3cqQ?-h2|=H0;Y-rd&TnxMaSgdKUDe!*^_FepG83xnW<>5viSGnbC0rFfLImr z0@>~3ipG$vBF>Zg&nXIctBDs1y{71G2v!rvgiet;I9k%JLy_aBW$uxs&E#4@zSgmZlz01}@>~k9O}un+`rZ3n(GL)`iBAiiB0e0?T?pI6WAb{>Qxu5W#5;v9SM)U` zY~nLQo$MUXo8YM{xXou~( zaYUNPeI*lzn-+3VcI{ir$OF?%Jd}PQT;EeP3STqvWucXdmY|@S_>Zz{y^01g*i8Iy z`Rsa0QG-}B@u++%9#(WQlFh_>rQG)w-3xCE@d>$kmlR!(U<>h5Y4=2l?=&S3;TGaP zIXhF)5ky;vuSi8}6fH-hh4{L7E>!dZcv^`+5!$9`3H+_Z2ju2Gt!MytD{)j7@t~rA zMx>Sa*RpUUicUwomH1Pc?}v)+gJ~n~le1%r=D^oRyh%Ffk%f19wH*a*#OuR zdk}3Weof|hS2-;sEr@qmzJJK(4=MVBJRkd&ei*(^GW`g2TD)97k*+G62Qb)4{B==h-I2bwPDKY0 z>m;5ez3?kK5y{k9iJq_MRCv2AGk{Pj$ z#W9)k3eU}1y#hOInU#oyi9?ckpRx%f9=6OXm~Qep&+chu^SSsxuk;WC-In|Oc(imc z!xaKmPos#|kWw56$em zZjS3L-#n!|%eO@9DA-2k0-Cp_GC8o#;uqy&>{gcRk=#Z+D3|svMSbx0l9`UBy{pU; zgnNmdOlHbo-<)NA0nuJEEAdY6jaZwMO%6PLWU?^7&tj+2A8DImyYIT&)DGKE<{J0d z<2bbAm??$b-)V-B>|bR*z|x&L=55$JbKS`R65F#d7j**2kTwcDY>l$veZ>Pk6Fqy#MWCDd{maGF|i~ zO5ZjV%H?vcQ2HlGmRROvxNYLsMx|hb8q*G+O+4j{l)O#R9}u#M4-4I==p@)SnIq`5 zE#7^43O;30PiJ@c!;}(d%HCHg+6!+f`9Duf%~`AHXwlzM`d-;@snWkhq?GuCWZR|a zEW}I6UoSrFP&7l{KUKOtGL_pmO83K4Mtn#z{8Q1(5hx?R^|aL7bQ$G%(u!~y@dc7+ zmZDc7T1Gry9LrI3A(Cap6~j}J=O|hN_a^c;Nj6Ir9WB1SsPw(5V6NAd-i^>E;sJ?P zspv7-n~0A}-Q$YxL}C;9f0VgjD0+re;X9>|kqrM(`V4r>iKoe0&N*=W{0YHw;=|%e zwww}&9z&#@{ANUIlT#HPA^J?EUoHAPrBB3QIq{&-rxZ=VQ$f61vVTRr+9dSqJP3yNxVYTg^E6pP$ltf zsY_VVBd{xpXNdoADY^}bO5%$|tygpariz%vlYT|Ng13q|S9W_?(Yq0>B3|K~E?M8% z@6Cu*5swj?t!OXeRm4|IpYs zE1HRDHL+9U9g1#6vYHqYdB39fz+FR}DPEjV)P}Ey_-#=ykz2&^qza)LT30*5Jz0T2 zVAl{=OS%szI)FqC@w;+_o>cTEm|EfiS+YdYaq!j>=Zo5==*tM!5`QF-4=6egk^jv- zuIS5%*OD2J&ucCJ0?FJbk(>=1nKNDKW2CfqDSbHtb;Jjx9UoS74Z?NApUN>PRP-`L z>xl1_1NNGteMr`k-#t2Y(bOqAT;AK2zFpSpQ+h9a^~9597iT(8`OiXj1uRH zlN%L{Ard8S6*Z>l0OCXIit2ov4ZRM1UH%?}QR1MiyI;+n2TwEc_2Tn!MejqPnfPb% z>Qaf}M1BF`X5t5hPEd3WqRqrc&eYwCeuiW-@kr^_d_^CDJ4W0qb5|-FgfB*XjrjbQ zqQ4_FM5XFYioOp!MrJWOV-{CR<^yWXESMJZFOt>&Ry0k{@+f&aZY&Y+E>!xn2(}RK zk)F9j(ON`Wh<}ka9#!-)#9N5pley0+8pL4Be?F{J^mlk#iO-des#SC`0MVG_ZM(meUHeJzdgxZLo zmvw`Reg?aZ_^?!GxuO>%(MCK*dgDz+-+*Z+zf-A3MbqTHN9o5U&+SUzfM7fEUO79z zDLM|3cH&8r=cu8h==$%U*kg#d6VI0FWGea&2HT0}O5|G=-3?C%@r^QfwxVMZ=pZf< z=L;0gK)8c=pY&Uiq8kzIAdZXkwxSm!*U)SqrF?qb@0Tunn#d~PdC>hyKjP7 mfM8#aSr5A}#}p&kmt&rRr$5JxN3cJ~6v6J#F?*2g&-xch4>>>p delta 4432 zcmZ9Pe{9tC8OQHKi$GgpH>Zz}GW5a}nke6#(;%Rfn}OyUjjb|L)ViG+g4U%TgldFQ zE|^#s$T;63FsAm~mbTYlci&!rw+ydUSY;+_s&0hMd0-PdL-e*FFw`yOo^O<=fAre- z>-jvN=XpP$&-d;Q)aKOI=ImW;YMsK34<-{2R?M7hZL0e925alaDr@VSwWY~|M|RIj z?q7d!joAW!9r>aKo-04sXJ0&d9*<|P$K&amnH3miqlBGxi-X&9vdYsc@{1W+VYAYE zrc-%5o*hc>MyAd(arkWFZTVT)sbcn{%qI3HTFz;|SDKa6tOntLQoT|4pTjNx$_J}ABKQTic78j0VP-kKGig40NR zR_2~kbP(xA3Z9U)rxZOe6FjT*0@2SaeF*}GiEo#^=E?nV{XB*6VdB%`Nui=sun$x4 zOQ8=adO`G3rQbX|Yf6RE7sE6We=4+EQ3w7e;!3IhRYmVYsEPPn+0jzN_<+=0 zuIL2Pt;BoeY(B5(B6!<~CuH9`MRO5oBVH$JucFlmw-FCZ=1E0!VSjJ!Wksto-bRKn z)n*0DrSgDea=ZRgsw!4`fz0`(>{YrN>d$L2OAEdG4!xYPcSe4&p{RCyNyQ3!Dz(<8sDU zD!Kvb4&sc^b&5Lhb`n=f<{CvAfllHad3Sn4(Mp6niI2*p+7(?6yOU~GiF!)WFJ#BF zN?#_v{ZHv`e1YudI`g{3Em!)AY|U62_wxNR{YO>I-w}!vm&hb46Vq#q?3I&zM$y|*mLUGEJnJqiI)q4qxJ1_eM9!w`#?x>T z#IH(KD-?Ye=>&0FGOty%0$zuBw|G^l=oSPV;;5Y7mlgdb!Vd8Yaq^I&^{^e{Mp2WB zPGH<2cGsLx^lva-#HF(D8Ab1hzl+!>K3`V!9)!Ax{~=y2kQ~!N)1SnjL$r(dKA}q$ z-GNjWaa!DXSkYt1bP->awHp_&PAx7_yuvjO3_?I`-wl0vsSC< zHl+HA6EbaE(L7}OEwc;00rKZd%sCY^CC|l+O3%eJ1C}|5g98@7DL${9ceN+4AU!~) z7?%bta|a3sEwc~n2a8QN>??ndU-@l@$drJGEOx&)`+snCo=Jp;ER#TVi2N_g?5b3Z z``vVh(jUXgq3M0+3|r>sST=02UpoDlinI|Kw#-lA4AV^|@_xI}dvzsea&UThiK&M7 z2${)b;gMN0%sWZ{(IPYB;@jB#&L7RK@TZQNQe;xa=Eqnzvec9#JW^zK!5JwswaAPV anN9GI7MU9n9xXC2!Wk_xe?n$-(f%hc4jMc5ISUZZ8GOT6bzSK}gT^Xny6y3ifv;+5t)iH*CC>@#`OWya(h5P)@ zInO=!+;?tRSsYd}X39(-thH4OUnuAmz3m}!!rN2lb#+DSBcXuT(-RfFj(6*4-nUH_ z&6K_Q4b99S+o+wHOQkQMcdHafgImxWNV(Ir45LTTW7s{6N45;>bh>#Zx90snMcBh= z4d*?A1ZF*gXLsj_eY*C>xW{=itPlOkAe6*P+) zuc}m(A>bV)KQ_HizA0OLv8b@{3544ie@nLJhDII1M4L(pthG70Nivq_3NzHh)z0WP z`r8HnK{Cx6=0#-N8C}OpyJ}KObMccJMqi2}J`4Xx8eP!H*O2lFyM>qxZmr!t|Ha)-+6|0q$TkjUpRlyh^&T$`_PRiC(Ix1+RC*N+ zU5vjiiGB_F1gWmS=|hA=OxaU{k&wl7R3cWHJfF1EfO{baO@en{r3A9wj8a(X7Thbr zN1A|}s0lOLz-wW_A!b((_4Dxgt4Ow1_13eCU0)J1M zUyud&%BP%9XMwR-DCNbd>vizBY;afuUBN`JlOBTl($t8tK1NfR>JxMdD}5@}peFY0 z#!qhjM0L8I0^gz`#^?e3F;%HD;6}_somh>j{AcN?sJt-XC)neRuAwO&BR7`fjP7DB zE_g^D@2ZAB1Z%(88en(7h0GZ1Pt$$WBvk&ZJk947g#{XsN^DR3X9)+*VKuS!2#iUU zrqGn!HhDR@m1!x-=mV@J#m+R}F&1Vr!+P3jt(5&Y?k!aFlU=RZH_v2GH!9=XccCMO6rp-rfvqQEkMSDbBPgjfR_w|T=$J=ksKKt5Dn*F7A>i``@+Qqcx zQmncLw1;JAbe|O2VD#wPMltF=7CMTUhw+k9!}b@V+*x8U81@(p1|Oz9f?mRk zhw)`&4*Nvmd<>IU&o7GlJ|)o?74!z|&5XXlv1Y-|(r1gp`3A#TM%nyyjr$qMnT&#-Kx{O*lKn2htizo$wCDi0zO7p@xD*+S*hbvIJ=PcG5P=* zpI*5xom^Eoo27WY&BA|@@Erv{gJhd9Zc6lDINKQhXshNy+55x03T>T7m7meic*QU1 zGW>o)-(k!z_+N65t||QcSn)GHUzSt3t)PIZo$bV~D(HRK+ZoN{Si75^#$3CbZi9Cu z_&(|FZ`r#1UJPNOgHbP*I|R+Z*s0S=I6JdGW1URfFydmTi$|oDl~T;W=H7AgBi+l$i%hTJwUT&G2{;dHfYGn03kcpI%h)HU zoELot$$+35ECfQ_AvsZnQw(R2)t!>IK2p#%Ie{z6eXmrTQtl69Iw)uyD?vf0VCrK# z-YVo+9(%L*C1@V$K1OdM(=IL78x`e9n2fJ*esz+S+c^ z_d9rlR0=4hlbG&z)3-1UB&Y_d0Y(=vHz4R$WCnC1SVNDeUZ4Gu8VoxLuE85(^aH{n zUE4I`>yU-szbs)*BYZZLNj1u`G4tu8nC^8;hwLY|9q7=e2rDLSF9w zcb?}t&;Oj~dCBeVihi>zdjE>(sNKPb{_%K%m0wokwW{;Vtf#$I>%E@R$}JUTh2HF{ zN~?N9`j-Cdk5Asy|Me4Z#Py$conCBy3g1pjIujQ)^Rp!Kh?*T0`R$O;JpF`o&mz3J za|Qo$Rz%KK(XYT{5bv8Ck((9GfiuH055ki{+%hi$PpX*R2xJf^#75+^ie5!1gPi?B z|E*}8>|v{k0DBLN_)LqB+#6AA6ukj=Ch-IFBlLMikHDWvTo4nX`xSK~m`VJa?Dthg zUqLvNcu=x^L(xCL;UPXEKKxD5r;+9%UN9%J?zp1Y;qwr83B94{QgnNWH{BB%J2yJ= zwB2aJh=!mBY0iG=4N2LlSita)ni&}mzUbQPa zTRwLweL(iut@K#Q;iS^{$gcmS^hYC~u{_(sU&!v>Q!(e@&L)0Q>UCAoweV*XeQ+WDeVb6ga)a0Xbz075yhXUdyB-;3Zxu zXYDB!(}j?ic$4_6hFG)A&It@M+U$&k`7!kgDE23Ce8#@qzld>;%B924k_9TPZ9B;^vrQZ4i?@lli)63%9xuRMOze^w5)?fKe=%{j3uMz#BU2-q39HxrNl+Dmi<1r=WK$flz6_}VEJn71_Vlp>&2gD zMLQ5GB_5VL;eev2Fi}dJBzx;obT1Oih!4rkmlSP>yNvkvlJj*%YvC^=z9Q

8;3r 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 diff --git a/build/Debug/GNU-Linux/library/daemon.o b/build/Debug/GNU-Linux/library/daemon.o index 638515ec04ccfe922afb801d42784e3f1a357f12..c233c0f931fb644ebd13784248f36b349bb0123e 100644 GIT binary patch delta 1773 zcmZ9MU1(c%7{>cXSLx=(EOW2#yx5X7&DUxE$!4=JA=Hb;>|(U8;0L%Yj$kL+5Zf}V z;0#v$LR@(+>`)kIFxeakA>dT-W4&peC@o%C^~PKXMUYw@NYx9Wd5;%w;N)p>Xs&4wpnmb;ddZ1dFm>hYw_Eh!s)TEmp9vf->(R(D+ zI(qkPsP!dhxA*)-U0XjvBhT0wNzf@AjyMV3*3nOQZe82EI@gbAL|7hGS~v7tG$T%E zTSuNXbR3%zN9T}?I(aeFf!B>^6ZI(P-qrcv7#h00Bdi*|icg|t`9SyX(oR96N@uMrF-9i2cu$@DZ{PdYiGEe;!}hn1uw50qm0Npp@GPZhZo%Te9^xS@woNpa6L zrDsq{GUih|d6H;S@pQlYx;b^=*O`!z_LU4jT!nq!Wl>F7|pPJ zte!WGr-(+z(K4DDmR{|?U_76qoni8^nQ`I=?2gX2BuM@nh8#;oCqxaMLESkTgYQ^Y zHOU*sGlCVz@|My|hW-M|I@*U^mg#GhvX1V@OtwsutskY+p+#q%g6qIxv;Xhk zYyEp~&bd8$d34I7C6&n471g%3Y+$+DJNC{lH@;`gjrSF{R9{Am8ESexR<8)Q5(p4fXd5${j4(MRmDo=xNM$IQc_s9yD|lnuCr;kqtT- z)cVuL^9xErPJO8LuNit@_1i`-;7V{vjy2Zhl~f=7%wy>76%!S`N2y^Wg3`QLQ?@21W_I)7yJJ=(WX&&;o!!$8F0>*x}E z5^15=aV+8_qWj1i?=mbz9JQl0%5p)I4j4}Xy-}8S?Y_g%H7G_|CY8QrXd6yMSw7b8 z=1lhQgjq2HCJO@yUv&?IcorZ2iCC>lXFBv+Ig*Z!ERsX-?cfW(y?jgE| zVmH$c9O-uXux41HC+9o=)~`Ek^g*5X82x2Xg5{BBE*LtERKn493@2E=)ohc-lR-J* zXa=(hmOu5DFB#95s3n-D(CnN{`E2pC|HQi(a4Z2$5;Sx>O3u+Ms5q86P4cPnn6YasVntr&vgeG>NZzKAY8VL95bPlm6En1$)Dct!o#FRvwVx4NO52>=caA{r5rIzyMP(xj9xJ9)dt1KTmE62!M9XwHeAynH~4gZ0i zBPVx1w2aK|xxCeSj*QixL{q*%cTSc(niN+G;uj;?Fbu0<7&j5i5%e6BIZD3T5Qhz# zXC4_gA?r8BQjvtqQV)VC+K%7`Ir;tHP0}noB^54Q)TisG1YbWm7+;BDMd3F zR6^e4-C8y0FN`Z8XSn5#Mi)RX5nN(Aq)`jM8!t6|JKw+2^fc7CgbcDeq0!&ya|wBs zyJj^SLChs&KdXi8O6+?Wb1ot6Opj~y4>C+ee^FrynaZAPnrA;ErjTuX$}cqf2vJkW zQQmi4qqi|-Dw;-$TgZdV{%M|{@Vf&vj2^d=9n6k!USf+d#@#}OdBS#$j)8I&b->IO z^c2C>|LwT}>Od@4n2IxZZHj*}iOh6Pb8C7fta)pboYCk9ROGF6Me>9Ub8^4tX-0H~ za{fn+9>UaWLW)PwGO|5uUCzzxCu~NON6;tqcvM>AWLh=P4hz0|oYVpG3fasDGpw0T z!}KcC%JhduPw^Vln!bcSub=@8d6i5&yKl?-5xX$w71RrBzOq=8Mhf!ZTId<5V3|@u zg`-rCSYa1+!(SAj@8~JYr*DWA`Dhtb?6VkqQCeI=4-hH#(QCwteKY|o@zEFfOEUih D0D#+B delta 1448 zcmZ9LO-Phc6o$VuSveua7uD@5Mn;f2Ki6+`obqpy!odh?A}m`d!%#Z?nT3R6gh^lv z$>D9$EE0qwBrruN+*l%*5G^K&?1#uAFc+fPVm4vuoI$+b=6<}-d(L^!g_~%fZSTpY z#-Y3tIov77X}4-@x^iB%G&HG}s?#Tp`sx$)mz%Ji+(V>q1k$Tqy3-JD_1+hDAI z5*RN26^BIfSfZ zn$Tz!q7EUWwxqm`lIPm=F~`dEPmZC`Iouq=dZAd$nlJ513Ixe&s3m zHTn}~fvBEi+ON??)?aA)A5Jx{>2@?12zijzX^p-?UxAP}xaWdKLx>j$*~MxpyHfk^ z1zAF7Fg>o(Z?G&y?-8=z$_Lr#252iGnJvTSXl{<`&pv_)@L>S3;K!$ zwPB=K$yDvW^z{+1f_#G7A$`i0NE<%po3PPCm?g`U4zu(X9Y(zLHeExoEI<>8mHB8K l@iITn!z}mP7P4`wyn?zAE%(zP;^lstgjwOI*9cY|_z(3_+LZtR diff --git a/build/Debug/GNU-Linux/library/fileManagement.o b/build/Debug/GNU-Linux/library/fileManagement.o index e9779dba525959e46a5953af21b9192533e8c34c..721fdd415476f133a96ef44cd45b77f0a74d1b5d 100644 GIT binary patch delta 3703 zcmZ9OeQeWZ5Xbv;gR$YuI+5cR16HFBjr~~=&?qAv%9seOD(;=F+q$(|x30qhTU4AO zs3C~sYm_lXmOy*~UzRCgRK|cHFAA0y<1`p&B1ABONgPUanAxjjw|{>7-RJI}``+Et zcK4w9X3)HnVN$y$=T4nu1;TZHtEoC{E$}~;<@ePu$!!eR_$!`TVl~ZqBDZ__)Qbt- zEi;}O-Tmjx?BQ6>hGw)Zl56*nz^Fn`AbOOBjWFAH^ z-{SWZV{oa7J>z=bL03NU6QXvdq6^WVPn>0s#jI2GFdPNM2gSNk(bwTApq%xh>tjXj z^4_EDe~Okv%KjWWhtHBae^T@fL<@-TlRghBdN)iV@u8%cifcqoyaNm1E+jr6=iZ{I z3%)|i=^7o2y-(4bWbU(-y-?m4D*Jx)781WCQPqlW!ayPMSgB-%qE0xAi0h>TuPf?; zw}?1P>g-Z~=)iZ-uXnc)zIVP?XVDM!ZM*wnNbu(OX7*m&6`bbPWc|h@H~CGm7ql(?{GFzf+3d z3$KrONazI76z}baX!VgjB@r8ZE`Cg$a+TB9==Tx7FU18Fy#z-&@id{Wiar2OIdQp+ zXN#h%5Gf~~F6VAnbQ(I#iT4cGYO~pnD0&vra^hFy+|!D_3R6K`EK4(_Xe-@ZKyMY9KhRfY zu}!1~B}lLMC7 zjDkS6=|E?I_%+$?l(Df*jpy8qXn@Qq{2H+M+ZeJvs(dcP9VD{_IYBG=wB%Wf-T+~J zFqO+>B0Vaq9lb%zoW?+q_)&>6!@nqPSASdr&KmkZgIm#Jcxx;kB`f&6qIGDmvC@~w zBtB6zAsIi{xJ(5cwUi!|;}fnOdAvzNR;|lCf=DfKi%e{`a{3INwZyjz^(p#0qP4`^ zq>5FF9)k&4<`K9<#IK6a3FUJVzK~^Bqb)=nlxvlC-N-`!LT`vTTVyOybQ1InA@phbzxcFm9Ix%fz(&KP9TIMbI z8i`Y7WG%|)Tz6YzQli~9uY1GNOk;MUZ&{DojrQd$%mr|Bwz&dd^9*we?aj07V>03K qjK_uMjNyONTQcoqmY}dD)8wMPWtKUBzLr_ZWlgavK0^P}N&f==80S&| delta 3685 zcmZ9Od2Cd55Xawds}xX?B6OT8m?A2O^s%C;HBwlcfC~t%BJ^&z$M)D>Tcx$dfQz68 z6)azaTpEk*H)L>i^^*4MKk87x35fIGN?T^wev<(g2)28?Vlmmf4@=D zhc(o)tZOaHdg-dDfcqZEXuJWF7mnw#F;S^sY0pJ)A@SP5QSlN*N27J2ZBo#&kk~Kr zwkn-^m`vhXS4YK175x_c^KSLq&gxy0rEy`B|yub0sfCIE#3<6v8x47_RO56Y37%}?T@u%+)uF=>%qH&}gQB+gDcgVKJx$5) zm-l%}z5^ZE#1*nFWs0tb$sxWZlUk~%fjfsdPdf0bqNCxk2t47Ds#H`9x`%?v&D9bqSqjlOWZ4Sd05fm z2w=1cPcs# z;UeO2U#^yAeW_?CB1ObYCGHtTpFmtO@dL6nmldspr+og0KM@tELhe~qC75!QE>!gw&mQv3uc^0}$ zDB+ysb4Ae}7si$*nRUo0CH_-fOp{e|DlR~%lz6+CKBj01!llF~r5{y_Zbzh)xJEoL zSF{Upe&Scec9Wu;;qjAMhAh9$@5nSRD4mDU>bDJ{!%yZLob%iKo2+=b#B{14xXb8& zKSvaO6TY&3+mVuyW4jVQe*QRxkl<0orF*g@p+-| zD>@tD8r#f4q=xu*IZtPm&S!|LCH_M?bM^3nIZuM8);8x6thLSCXsspl3-;97{I={Y zl>RR;b>#ZdAfYaaFN@P}mC`==>d1^iQ=RR)9D^-&NoFfL>ugSzv-oJ-z$``}F=(5u z$Ozgd8KEGV0M-Zl&)#vRACE|oT)hUDf=T?QI2|)$pwmO})Z1nig7w4~Wc1BS=ezdS z`q-;n7iP6@X-GBZU7Ty&Z?>WB$))BLCN#}7zarR_Y>uI=X`1V=smSoeuW26d`g4G0p7uiY8pr=C3rETjW_iM=b zcbv{;^caQ_F$`lDbp%E=p|IMU4s8izvv-JZ3OK0+9$+-8_@mIv8ZDy~^=J|GXu#2M z2j15_$3UjyN7B&H=mBI*MMaF8ru=tYxFQ$F^}FL7WXn?@pONpJ3S|vFIsjFN^!;eW$va%$54+e9v5m$ zcegW(wYcJ#s6!e(1F{sK7xkb<&mvSD`9QTa}lns_?>KxL@0O2yzyEt5?`u{TE00UG7$4v1 zYgPIW(||ucd;6w8KQ-&m4_~_2x{|z0t&az{62;Ag_5bs_hn2J}tKYJ$A*nMOS%daK zDe)tLWU93WpC*t=~9a4G=laAr6OdeOdfQA$CSE(*5J&KOw(<+K- zKlmcHsWO55w^jWJ>S@C#J&S6_ z@UB#^DP2V^V|Y%gFO<&VS;p|5-1}1LJ8WcpIuCLU|CG#*%8Vg!4L=v{y?Sr2JDB{Z z(sNR_@2Q7|Yxt1pWu^D<)-^PRE!XE)l6j~y-%#`nSLF7l(x({l413bMrgRx~FWT?@ ztn?GMJwp@t-KP1ES`eQKhXi)aPwxzn_SPA;T%1o@EOpq3A5 V4RJoCL3HvVeLzqMsf}9U*k27Fgt-6! diff --git a/build/Debug/GNU-Linux/library/signals.o b/build/Debug/GNU-Linux/library/signals.o index c583123c18bfce3ddbdf1aec151a0691a2c2fbca..78c4af6366f676fe457069ef6fc789eccad496e7 100644 GIT binary patch delta 1472 zcmZ9LUr1AN6vy|w%d!>bjQZ{DZf>gL~?DuRZHd<%;$*r zn2}PuA<*Wi5u35mp~Oy%J0x6KVOf6KvLB1hVzI2TSS%MY;gBMP&m0OqTC?y3^ZZ0R zC{c;kAZss?=N9wiXjvh_^mpW+;yR9i6z6afTA_`ySw+@lW-G^#Q$hz-)){TXs52ra z@wQXJQL1o|c^+WK8G&z9;VPrE*r-dK&~xqg7+J!&uEZxy=n`HM`@%d^nARmcrq1U4 zX7*XMyCkHDdMJTOUtzUN!f#S58U27=E(yo!=IR+O!4a2)YO1`S(es#cNf@KE2}WB{ zxFu8&onh3DA$J6*b33DDr1vm= z9rYSudKKw6nSKo8g%NNNeah$@rVFK5k3R|(nEUv{Jfm3ckzx>=J*sw*_Pv$TnUk7l z>zF=DefKbZ5mO%duVX)>qbR%*3{r;}-Hst|tC+(fZv+<1taQg_o*B$|CAdi~WAr;3 zhJ;;owvN$qY&4X3j&VamH}yWlJPVjGlz4(^LqZMJxz9Xb(e9ICF9v-Iwh+@+{{J`M z#V((O7OJ2#I*ubgC4OPbC*e9JIn6xXDEty4M6WP<2Sa`ZtEl^1M$cluUuj^)F@L#c zvnJp8t28l@gp#lj)7ZS}p=dw|oD`>UI1mv#Fde86iwME6rWatmcq1MO280)fgJE$Q aUoXF*G_2)rz?Rag)$>K!Stl@B;`s|^&cgWs delta 1459 zcmZXSO-NK>6o&7){(u&PiuBEyU+;|BT>JS7qOgVIKsXo{SqVW48K~4kOv<25YC%k! zY&a{UA}b1O<1|nxS?b1uiV2FS$QZ&!x`^3?5>()v+v0Q=bK!m7^Pczn=4RWc+pk7o zFm2bmGCi(waOtkzo@2Vdvsd>wAKIVsRTP_Af9kC`nA&qK<46+YtaC7k5+pCHSpaGGgQ&^c=JDg44}gP?C{ z$fxim-`+k!ODXMBxRsNS3))LLpTZHIO$!>OO20zIbXHJXs~fnz)^_-I;9_dXifm7J8O)LG^FrIYEco4``Imeq}dF3>hhq2}3EL0y!vG)z&-QkdY~7lmh@ zW-JXE%3BKSIA>CLUXvA4u!kB#8aFXBOAFtE)AKG3g%s}M1h1gOln!ZFqFhMfFgLj% zJPE1{E8M~KnxNMy7S{Na>1RRD(B-f;S4^4=Z!s6m%wo9Fgj*TAE($PC-5Z`m6WNgg zI7MTTIBchUWG8$j+m4#$Rg_x4jt1=rRM40mg(Q7n{k7|(=5jTisBbLG))vk>PJMO3 Eza>GvA^-pY diff --git a/build/Debug/GNU-Linux/uFTP.o b/build/Debug/GNU-Linux/uFTP.o index b1bc166082e0f57d5a4aada92c04e0b2eecc9010..63c98472226b2755453ce1d7c38b2960c8bd6b80 100644 GIT binary patch delta 806 zcmZ9KKWGzC9LMi>1?$;M?yfQS^MO#aNV5167Y8YqD)r1@spz0fwMx(wHN>{GU0UiQ zMTM5{Ac%t^q8V!@MX()2a1dK4h+ri{hjc3__-CkKep%jI9(+EZ$L}5Y7V}T?i&;9f zoNMms)7Psv%X;!!RS%UXPLxM)jSt_hj+L)YjO)o$=ZE2RuQ#^42dR;FF4z=cp(mz0 zSnJVr1LU$gZd?D?SbMYfS(fEkmQ_c=Wx9lttEq$;H>L+zb=gkX`09?79?G$A#<4_K z8?+35pW5K3!GB;r5v#XibFz0Xv5jVe)pMD3(y&JnBxChi=#*g#s3kR>!_%auk625x z>X+iZQN99stX|8M?}lAL!DID7>~F(;%^G$Hs~)SnLW_od zh8>SpM(91m&LZQp+LF1C4O_ukU(-d*`>Zyl*)W<-Ec>h;iT!KX!)W@fc7jj0k!ZLHJNAwGIj-2V<_Un3yTB`3Kds=&O delta 771 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 delta 32990 zcmeHwd6*Q{)&9BF-P7GQ-P2vuRYTA8Ojpka!!W?eI*P&=7Dr?mkySuIK?Y?Lfk8!D zg$OYyv{8#SEXra;fw+KziisrP3ZjBWl(=g&fN_tS-}ByktGY0n?aTMi@A>d~oO5s8 zd+xbw)j99Er+2;^-1cs8X%(Bkz4b^%uYPaQl(%1=I_jDI^XC1&{lHOQyfS9({mYcS z_4V_w-9l;qPKAj6G^63>-g_P+B5L^A@84f(5H;M~`+$>ilgK#cWL#ws-M_l$!+*}b z$xjrzA&+QJjy0|Wt5i;Utjtzcm0s*2YE;^MNJQ#0WkgC_kfi2S5Gn0?6H!3DEJ>ua z??*&YwFl^0A0vvZ6`)T`Frt(?5_E?#L{z2j1lUY!&m zQo1x+?K`p=>5o(*rRxMD3Kf?Ud5%nGM4o{EhFl^K3%u_k@+khM2$9F@U&u3aKJ*ZU z`YA--$}3S?@jVqL3fh`g<@=d66g14Nml9G(~+ndl?(1=yn=qOp-$g~+F}-+G9eB6(;u#31qXh!>JYd17Yd z7!vvHMMg9y(iL?I7{=@gLnV8I z5iN~a=tNsKh=`U&eu+doo>&{%fJA$q*c{n{L@iHji`vFq&;w4g#TBmho#p&L8M7e#Ag6%T7yB7 z+7wh;FJ;vA}?sQNWT-NMVL0qp&I!91n@BuEsx4|IiE zYdu}Ziqpq)h{6dRIR#bWo(Iu#cSaQM-4h*{;3o?A;kjQ1h{ES!)+l^B5&bcTC=c~o zQD}USDBQ3qhp3=7d|rXyX40Scgfkhyb2*cNE&Vo=mTAA_(w;m4-vyAh8y+@(gzn## zOO#j4&$9svQ6#NPRAkC|Wum zEmCMnlqlLfz)w^VjlT4#pD5mJU+^`$h=)d=61vtiEfINIg_a6#EHElKLVz z^c1yLgYE@7s-l%xA2brD5Cw^14PS%LvOJ>eVtsdk&y7Bu6d+0c15S1x|3QEV{inQABN>u#(#Jrewe zVJ!!TU~xJ_f`D}UFBz6NDYCWyDA4$&=sv*i!yO_38rQq=wdaAF-wC^sh47k zuj^eyI30e02iK$BsziA%QEWa6RRt0aXl(%=)C3aat!-zq!hyFyvPCFR8&6o6;G3|; z>*9&;Q2J&Z74`8%8OHUNwtk|fc%lf4YY8S|Sv+wVYjr6me`h>VVa2<%ii>Z9$hYpr zFnp3nw5&RI+q^K=HTd6w#z_4Hv<2ELy0Q#(Ky+mV=#c2iN(dZHoP~B)BR>k^f7zWC zre|U(*YnwnCKy)RoqYPDi8)wA8~FT16MhWBMm~Yj#AtMQ6B5ItiBU*wMxrU2ID$dE z2kT`{G=b@hZ8@1sbRwF#0xN*OA*ni%gW=_gw6{9(E@otFX@DqDop=BZ@kG2jaXog$ zb_iTmo%lV9{ThQ%Q=M22Ngu$IGpiFr(dvVEQeU0876bPXwqawn80H-q=CRd@>riJW z>ReZySOF0pIT7#?Evim@p;(XhV8!X(sJ#1|T%zE(Thlu%YS*Mw8kq*kS zJTi@x0M>2EL+IiWF6Cf+Y!lH+@rT%|Ls6n6?}sR%WQL1w*vZD^nR&cEQ+DESn6c846N&CN;db#{jwiMyJUH(;Cu z2Tx{MbMiRG@ea?Q_@pdtHgj``*fQRNC$pznh_Kv~Mw6b*&Svv24CQiJU|+NO1}dzO z=>yH?9RVV?Ql^hIn>d}>Dvw+i%~UcOow|WbG=89v9Sc_U;V}9T!@|75^Hd&2VK`rS z`D}q4mC006f>9o3RrO-U!+F_ZvTTD`q$6a}QDz~=>q40vYxV}?k$iBJOj9YE6g4Kv zBIAilYB55ctW~{OaZk>@(kL`fD#%Jf1TOb4H%b z=Co)v!mD~RJJW(yRHk>QO{{aK@ljMV4Q4Y2IbX7_H|JwgV;;<{l4+z86(YZ7UDKNt zr+G_nDHuH7QYT39jv}_gPTBIiJgsDUiH6^k$$E1WCg*)wdUx8q9)0>ifjE$(5DkB* zI1OKchF|5yA3K*%p;gd_MbD_m&V5x0>U;*1SfjF-k{K*I|C(%bGAV%rII7-3Q!iL! z`>^6l-ia4@C+ro#UUVvy48Q_-%39aQ?(b8l7JVjLv?td0I+1SR64Fnc)s`~s)wb?? z19m5`!Ka3wdv{5Wa=~G#1VZ~R&*|Ev*aK}os$)fPv%vQXz6-P_SLp*WqId_ zMy?cpNGyg0l3hJf$)#9^{dvYGJw>Tauy^s}=aK?@F#Ai1_B9KM21*fLYsRtMC{r({ zo6USMv@?!0i)DYll07W$#_)Z~?G8tKh?Wem-C{utyTvb=SnrF{<}We8Uo$LGPi9-% z`~t#>w34YeCt$^jWLn8IiuM0j-hd~wOm2^FWO`NF{5{6#TW-n0b}BpPC!+Nk;t!ek z;l)(R2i22VnvTlD^PDmmVGf^ofos-lqTBHN$`Ef;eV^c|Kd~mqXteBIXtr* z{+%H1>@5GQuw>2_k8y4h(Vfn=@f6zPpUwJ;;cpPfldO^HCD!b@lK-f(b0rfdnV6qr zy!vq~nUWcclgno{p2t#S__UUBv9VSJ-!jg~lesHx4&X~gN?LDzg?Vhr@b!z8xD5w& zEA}B1M=fvVG~No1Au2g&J%1i6ZO&7NUO1)DpPWL!utxT`8++=MGS4_=bZfa&<~OI5dD1B}*gEW#dE}HbyPYz7 zEMovmoySLZ6cz;&=O;AkOuS+c0&(gH}nwRFOY{PfjopI^6(;%hp-!Y z2)mJoup4;@yOD>m8+izG0a!Y*JUoCPL^ zNMIsQ0uy;X58J>*Uhi{lU?Q&%&jqHCCxD3v&fNE4@pJ(bc@6h+U?T6lVjGyq>(6@v zU?Oh-&*e-8*1%BDnbZK7;9O1xCh{6T0Wk4T(FhU7>uNDh=T%1mHoxa%>iO&}S{Pfd}0M zJm@aqL3aTUx(j&F=dO2v2i*lc=q}(vw}FSWLZn}Z9t+?>zaH%h;6Zl-5BdT;0Pv7U zq~C}dHPJ+0EQE!4QX5SGi_qOzgnkotwZtOyn{hfwEJDAfqrf7#m0Vwf>5^cCo&_Tg zT*xZY03-BU=V!qP{kAi0FhX~M5xNVE&|P4J?gAt9l@L{c5xN6LphIiWAw3{Ev=*h} zfduf0w7#Cty8tNkJNd*5fI{EEXI=ml`bIwW0-(@0At3<@eKQggpwREZLX!Z6zGZ6` zpwQg_g-8IONaJ<96)q(bpb!ZOQ0Q)eLjN@eMgkPN8=%l1#1jcn=nr9AOMpV(fuWZG zh3*C@^hfZXS(FAqL8R|OYH77NqWb|H!(NS02(X2|`w<7W&>vf5!xs7;G%H{W{RuD- zu!Zi1E%e_G%fc4=UY`wH=mNG#bKF8C1a6`418^d63qcFmLgowDLOu|%g?u7l3;9IC z7W)2QWMK>a>1G?Y&~4bF9_!*cn}$0h>C{Ch{k&Lmq$j3)V(nx{Rp%cQupN(>92qesQJi$6?9acuMz2g z03BEFL;h=6tSPk)`A5axy&LrFpsUmf_`CtSMvY;7b?W1w-^Bi` zS7(EM3;7M|1~l+CpzuaD38wE%@DdGI6UcuT<1m&&wt-4CB1+%vZQjB=HisJ zIhA5aSwEQ^U)mQk_vd~FuzV>2Z2z*Ct)Go$B`w?PMC`B9)G@r2YwzE(>o{YS#d0Zo z(|TqsE77e_#e@x7V7IZ=#7uJ}W2 z)w%gZNv`VOEZc3O)M#tTI93|XhXr7+El#q|+B1$7vtHKGaV*u2w|^A9^JI?9Zgmkv z=L^x3d2x2DX0&${ZhM~0zS*sQVYRuKRrTPO6}~DxnG>^Hb6JmJ$UT|2XSc?(V}Hc5 z^JKo9UD0`*5b`s8%@R@Tdh6DUS%>r+V7=?aMIv{BV+VUbM%0QA*)EVuW_YU`!Eu+I z)7GD0iXVkLOVCqR%b^l#y%?E~Aydg*RyB#(MePHVN7 zgF0etw@qsWHwZTJP5yNAwAM$g*Dqm-&dVYBMREeBwN}Am9^P6&B3oaCB!9zuG6w+W z;hj^x#cDU66;I?+_YqPz390)CsmBVb`v^HlQ8jEw?966qX!)t=Jh4@m8AL*`Ga;Cg zX=>FQqkX2RIiA`ak6PQuvlb(HV^wxzyik>0h=yn|?M(DKrk!<$FzpiY&S6DM6kW#D#}0E7{!El>4mlt=f}KDd4d1byEKs7?M-3D z**(c|FMZar;)Dj3*;bs;V34+ZDQH-6zU7XY(2a(IwB1YB+E$$Zz`Zp6kKIeF9QV>E zY%7lAUJ7B>I9{U5kHHQioJ~0?oJ}EH)}|BM5U_1J(%H0~`h9QHR<=&g#uF(nKQqcdvw-j!(TT!NpB9IuasB+>%r+S<|VHv)`6cU{h6!-bQnC7n!jY+FvaKktBWGUd6#$rS#kLQw$48$Z>Q6K;Hs`#O~X}g?GwJkf*<5iAjCwc-x*)FFrYr*BT zVG1ig{XcX$4TY`MQ&@T4^E#0pRUQh!VfTIOxhbqbys(0Z3o=U&~*it zh^TN^HM%T;X$0=7hRZ5sI98$ar%J1k(Y+6B7TnF$=nH2_?q+KA11YRRhRZ5sxU52k z%PM5JtU`v%DrC5wYO%0dL$8gzv4BO_T!26%W<-+D;T#t6EOgNhw(&l5r+0i` zCK5y1d`#GUjD>ho8#Q6`F{I7Mg#W2=6ZU*v+=TzBaWnka>*FT;PmNnjxXs6eZ=12i zz~n58n{Yriq|L{yuyU`E4yeYhCAm^nTUKq{_OfmBFD)!4x2G-|>D)!4`rRAcLD+`ePN0aYa8 z)g~NJ4Qbyo;ecxV8iP<%ZNdT7koFxD4yeY1cv4?&!U5HI2phDqT8#4!4D;A(6Aq|` zwC|X3Ks6pYCLB=BFBEIr4C#Ps?1o!qQaF(sdoQuAF^0>DRM5g0W9-8v5@C!H^db{J zq%xnG@FA5CmV;)}t-oB!N(bMIH`43UVPI4R_g*~a_zzV66xvZ=mRcy3l+pZE0riNYL>1Sd za(`Yr=&6vLD;8KyGg(JgVy&9V%Gm;I&rGJrxMsXhGHxQG>Jip^Gg&IiA^V=NIe0Rg z=hZxJwV1`s0lz`JeNN{NK_}+bZ0AW_bn|2m%&VEhlcLU%c{R84BvdX>X5YM)lV%BF zcWB~o%>rw|ELPsS3B~wf?#b+#M{R3~=&LAEO$T)2Q&E5Syqa#-fmuxNHyybK!%p{P zj?Jt13f1lO`}4rN-JQs*vsJl|MSH|nwc)+06PA?WHIG}hvsqCMhxWA=LjU`0wJ3e0 zh4?!q-`4*Gs6Tsl_5$JCIM&4lLXh?aLO5617YN~OW?vxu8@Hl~3xv2LWnUnKj%!~a zM81825c&26!dlk_!oF5XvvYwEgD)=-UixocAe{1d7YJwKK8?6Qc+KBkAViM5K*&j{ z`E5t`=N!}rX={Gtvzi}wHIsJ;VPgr%JA|O^JA|O^JA|O^JA|MeBp(S!^J{yG=7&cP zl8=OghtmX#>Bs8`)yb;_FT>ffS^W&t@{2-fK^HZ{#A7^80eh#1YrCH67 z^AVcgAEo9uZZ2zan$Y}ayEH%0w&n*`_N_wDxK()fTvpsh=y;fK+$!9a)$!V9bv&N? zWxzTymldUja+i_H9c7g}E~8NHc&$3dGViNb>P-uUg1iR zxHXtpv=Jn5`bhE2L7;^?hs%2Q4Z;~&bq<#X9d!tIgq|)aF3i+FV0co9l@>@&X}bvb8zfc7!%}%{*2-X&pcZDAW^)j<^plG%>BqL6nCkrqzihjf;cY>Abvpv-QzDsflUb z7oirvIH=V_!4s|gM6`m7gIZ5f3l|5qUZBOrL9GuOkrxNGhSwaNU+cRXd~k74>jzS3 zbXtE%A}$VU1A1gH4r&AOKwKQu8bOPTgWCCx&c#7(5c0*vL2WQ-TpT=*mKO)LVHJ)p zr;Rv@=Ap}JBSklGaZnqDTJqwcHhL$@b6rjw6Sj3ZZ5*l!T~50gwAAIaOWsF$esNHn zaFwmgX%lK33;%q*MD(>= zH)Roh?Y6PDcBkEe*2MKf%>pg17i!Bui|d8j3ee(up|%pD3PfL9jeJ}$%p=m)AR!Tb zZ7oXKh`zR-&$~eMwLAI53q)Vrz-L|{`r1Z5^#ak?HX$JqeQh%m64BT0!Ag^ezP9C1 z7SY%E%Tr!C6bT#A*S6+n5q*)6h`zQRa?2}++OIJ%64BQlz!Q1pP)BO^4im5Y&}qWR_NX%}2^kQY7Z`TodDP4vej>fny6X}rnUaQ?*( zl$;O6a6T09@8??Ug)5mkysp{ZGTChT7P12Nrd7OL{;6aR~NG4Cce1N6l?3t zc@?}=chRrK>52|$q6gllp3KrTwcd_&4IbP2@KiCB#8#Da$!pLNB{RGnH~3i%hEK^f zRxGeCTEtp*;41auxKOE|eNfb0D!t{m71%2E|9Q**KxCdDgj8ML@}Y0zMBY2N5B+M8 zdjYlBn)lDMnl~&bw&sm<*4Dg1+nP6MTk{5;QXffY!}qwI=pEG?#r{W_>vL|+8-DJN z<_(Fbr+?Uq-lcl~1I!iP?2hIQS9C}7=Fxj>%^MaVNApI)(Yy!Yd(Bb3@yJoVdH9|m z^r1iD*1U6-zr$S7W2t$Av^8(^J)qVi)X+wBJxWSowa4nan6*D8m=7Va&mrsQiycKA zHKiiXNuh{yvZwX@Vjj%r!^Ny9E#TH`vPw7F`TJl#yuiN!w+3&B6Gd|au;Qv07ZK&E zfSO6YJ5H3Fi)#b{Xy$2hdDa8uRF5LePEU|T5mblkyzS42KtQ2B+;g4>0tydmLLCGG z3J(Tp``d$tzK&=$JP=TLC`jAi{$12UAfVEJ>Tqv8KA5%O=mR@*0jx*ZY1Blm5I%!u6i#awY>u;nmDt??+irEn(rb6ALJ>u?+Fs z*2IY-rKAuQHpPkjUL1A>@x6YcqSS_w9QA|GBXCb->u1o_Zw$2{ifjjWQtz`aUdmek7(}dPqY`P^ zs6<*eDp7v28#G=Xl_=l54Ei>r66Kfn0dgv$66H7724GXje`!rX+7$8+a}qX%{3BZf z0wNA)Y@bl_>wX=o_LE z<)461!l;mc@_a;&Q~O!>W~B3f%;o&AXPy7`tnQzr#<@}#PYECx=Tm(=C4k^dxTzq;o&Sv`n672< zlp6?6RanPvlcoaW)-f0w5sApSEe>T6k%<0%AQ+-XQ*IzwbVxe?iw>QL{l^+z+o)3Ink5=hkwq&;glO3 zPG!MiZ*_`0{~KF9uvk^61UQUDygKCuhf@L^#=z86r`+IhN`S+7QeT}C;4rpzV|9vy z@H;T{W2;kca5yEvVZ8AcrK?kL{x^0ZWjp^@LA!Q2{~NpS2-z`J_)b_lNeNsAZ}GTwav3Wf z$1(2H*%eW)ELJuY5wUI(Zk|k4Gr_hUPme}$JR%w?{t#OQ5V)K(XeSvomEV}Hpk&5V z*)!Ia%US6tUaE|j;&;f)QLKXD=BARVr`8W4t+91a3g!|vC$?%f3i%|*S$kJ7 zLkPOxF1j5;?6-?nFR{K{!HTkL&>3 z2St_on%&m*PUb@*v!Q0Ub-$CjLu5AA?6%%!mde_ z>_zR4SQoBlDX}chz-VJ_3U+7N>@Gr=WJ;A@bsGt)7!oLuzSjH#z!>7R0dMc##h^WMVL?!mz2&0n!9b6q)d<#f85_oRrG$F$26ZTCs|l0bUucSVhbL zuZ&i#B4&U$z?LXPW7S#(?W^o|g{VnI&;YLtSF9pvfLDeqRuMG7o6pt~(Hs>q1H1(c zw`ZFPlL3I zpaI@?!qq@U&;W0H;cB2FXn?m?xEiPk8sP1~aN}gBikJaj8Ln7G%m8m^wq1dzK`sIX zcvl2?h+^+rbTfz$#ol!wDTolo-u38jAP6IewR$b<#tj=0L@D<6U{4^r>mlpIwbHQR zTZqz8L@D+y;v@_kzMpZjr`2wq^f1Ut)Od*ezbYp3cX>}I>o>~m;#9v-a zlso?!?5+!ull$}E!U^IPWZwd*D0m0BElnd4AY&4SAryxnVZj>-q7V<|P%s6JCE&I~ z{?CetLP_w+4}|OTVWgR!APS#>X``S8iMrj6T|@cNaE~4+FcFz&WA9V23Wa|H+8ewS zbkBFal%@bmpEKEEcdm43?twc+dfA5e;8-(nnPAOR$@O77NCKoCwqiQj9=! zgy2HdA1Ue&ME%iodCMI^H=&IvTASPhg_}!=!c(y(DL4xBH10pkM_}e;l-PzQW(#&I zXzsxq2p&ZfFRFM zjB>%vC_9OFuDVzy3QtE*3KZ*=yIA?TpW|suF=I>6D!*yv4Q9ZWzp?_sR-kK9CKT+5 z^4CE4DEVJPD|2Bo@;_$v-oVO37ncx4Ozv)xZ_V7mYECms5N9rY7MazLA$F5YG3Z)6!3wC>u-+Oh@K z3maJ{@p^oqM7$pN9>RbVb&^*W|5Qw*^figM;cW;~w%X3sYI|3!wd?V71)|l{;3t*xh@UGEt%{#3Kz^-9{9FO@>x49& z4>2E6y=Rg&do!COf2lxWM7iRZ3W5lkBYvsCCw{5GCw{5GCw{5GCw{5GCw`v5Ctmrv zc+YzmcT|XSg~K37MTY)4fTL9W=m0uI9`U0Cw-He~z$0GzzCj}D5x+VBI_?p_IsiK5 z5x+VB+JP;Qa9|509M}R0$6*i&$6*i&$6*kO;b}YePr&Pn{gdZ);T90t@fbwH@fbWq zafSYAp|~6dD;1Z+pzd|S78PC>Y|$H^4GwMr9m&BhkZ^DdBplcR2?w_L&h{9@RWS(X zI1E;M@fw%+!xZ^T1L&nk{L%nO@`S}t4WPpTPp$REufFFdc!oeH&bddv#B&y+C`Tu9 z7I6|U@tmJ=vZwX)dsxwAToCgoHo#2~W4sq`f>>43O)#+LK^w6MtcA!Nu?Vcgis5d8 zfsMQX-rRxvcmce*16xtRC*H_D5m(+&ENu%b(Y{O)v0OI8hY!eQ>4NQ6k1edEaRsvT z7$O@&Ss-r!WZ@SjMC^+JN5vT+VPs;f5YxYiv-$#@l+5tNBw}Ad0w{uo8>}r`SaFn> zcuSOMqQd3Yku9vagy%jXavO^FpyemfdnHp}G~3edWeGOlYJ0C;{{g3di8bP0R@{x( zU;bncME!DJ5m)V&qiIj((|JYBCRB0kVo&D%c@S%*c(yoQvclSSFEdVm3QgWL|A^?- zBJqdVDh0-L&iy8Em%Uo->eYAmvf`n<#MQEdXzyyYr(_z@++3%81KPRtPcMrGK62W@ z-6+w{rGiTn6>8S>`&e<3^ByE~1@A$E_gE^dv3_+QE57t}^suwt{s(BJGgi8iX)Kz^ zQ$m7%RQN3BuYJE4Mbm8@31Dq6;(XfMZN1Nne#|dokEP_zR?Sux@6XGmY$<6=K0Z)j z29%NDZmkrriLdYr07TSWApSPs*#7_Uy0BE`r1}216o$ATxfpy_Igxh}FYsSil4hmumkTgk=iTy;Fmczrr8a(A;=5n);dG0zaEB*q?-N*~z1(cf&Gnc!SFHHEUht9qq z|9`&}h_>@nIHAVP{ALCJQ5dN+8og6E#KPq_0kzJA%80_1ps66&I`{x9NxzG%s!O2c z!$2N9vy7-V?=-|0S9@0y<#ohbBK5BoM0uS+2h@e2JEOIz+7)yc$fK(br9^pMQ6{eb zHbsNFN0&hXyH8*pWEOXRj*GGMcU(Q zHBL$ZaC8eJQ%)3T(SqgRGNckeX@TDXBK748qG%CTZ$R}S-$WRUsJgcl5D9+RDqlSa zx)h@jBkQ9FStxx+8BuUv(O{5KgYe${> zl}V&E7AOc`(*X^SeAEl@ZDtBi#Gr?(2T*1-=qB}X(3e5xImCZ}>S`M=S1998Vn>fWty{8iTBItnXNfAxTFDr#@L_JPVDn2j`KvmkLi*THozp zDR#bP?qn5gjMZx=D`nlSOOZ-jKi|np&E9b3vy`#i&fiefy#f*UWwO5LeCz3*tRM4R z@rPL{>usI!Fl(!PRccLon003j*5-#3M{oO+3gGl-q5e84>k_spZhTddeFR(cv|Q!A@&o|oh{?hafkPiD7d+tJ0=ny`zR zY?$@aU96OKvNr8v?UXOdt;4&R8M_LTU??ykcrp)MOH}x#72M5ASx>9YZkEuFV8p$g znUWcfE)UzyN-ySLTnAa2$Ng<6ngz)Z^0$qWsZVyr0KCXX@sIAN%zxaB2|Nc*yXa%!;_t`FlxA<2=`Q2YTXW2^N}qK*Gi@#nTPJ=$V#J?pV)3jJ4^qWsrCWOis|I%6ft?M|lw7xjfGr@i;4I zuUOYU&T1ll^!8;Ouu7(({55Om<1AIlGf#@l`tsLMM25BQg)eBlN?N{defu~|CHsT< z8nMTRmrsQt>o5c8Sjz{jZhKgY^|watVac}ZQFM-YIK2D_6o#wCni*UEEGo)W6H&`? z)}}oymF87Ool<4YDOF^uiCVq_4*l_p|M(5D*Dn=+h^=~EBNE%TKO}_?R*tt78;H~1 zlQ}VuTAo0 z0~(+XFdhEgAu%1$Hl~wC!U1)Va6la-98d=d2h>5r0dTpcwDmSJB zi3O&U_C|Ti0d*F*K^=q{b3h%0eRDt^_{KP(4zLsl)LG&Nb#S+MnT_cn;b1yQY*x37 z6`&4M4yc14?r=aIi0Xhk09pPH)Im2Tr~}dlbu$j!0)V&_Oa?yu-9#3r&jHEb}FjNoytkE zQ#skwn!KMCT`G2J0xsN`#BKmw@q%yw*EaUn^k=uGe;pQ)1YCIm0l0Dr1>lMT09Q#r2@J6S9fQeT*pUIXP6dbw&`~{O z8y<7eQSFAa6riKp1EvKII;v-b6$c$vQh$PkH+ZR)d5Y<2&fr`ZgT9;rhZ)uLAPrzf zb>Q7jYv;QP4-$m|GpZMWuYeiV!Mpf-3^1cQ1Tkh;XMkL_JjQ6kqD3x zRWJGgATeM@bpl${0W+!-amGQ45e2Xl0A^H23I>1~)zPzg%N?!hPcuCXU{Rflv8UiD zEAuqd(?Al{*`fxJM3vtb6-c5w2M0%pjOl8}y*?rxNTS-AlRy&HGe5wT07+DPVayAF zB&z)|x;l_Vbtu9C=s*(HNnHMFkkcWnu7I>Eo?#{j6V;YtCIBX?RbnClCaTq9@SwD- zwV(xw#Oh zS&ymYU}A`e@&K3^f0k8s0GODYWH04NFfrHUbkTG8XzTXC=NL#LpndqqRwW*{W<1N< zu-mO)KFi|iTTrYVBJ+z`tMJ7|e~vjO<+tR^VIB|&B8(XSS6pSk99-9>{(Z-swEIWI zfADh+7`1#EfV7YORQA}%r>p%j#*IMV^RW3x4mN32aE^T>oR2XioR2XioR2XioR2Xi zoR2XioR6{L?qmNV*Rju4o9xFJoH((x(OsMjr9JfH>lL z0dd5mz^T46`JcA5+8$(y$Z>3pB+4q8$*~W23_Hj^)|Hih>y?k$8#^lBV^bCL1Ense z4AhmjF{N)@snnI$x>9Q>6)~kkR|e@je*FRK%JN9@vYbnEW(Q*U&pP=bGuS%I|0mWM zi1BAjb9RjQ6YE{E$8i7v diff --git a/ftpCommandElaborate.c b/ftpCommandElaborate.c index 9cf174b..9d84bd9 100644 --- a/ftpCommandElaborate.c +++ b/ftpCommandElaborate.c @@ -86,7 +86,7 @@ int parseCommandSite(clientDataType *theClientData) if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; } - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandPass(ftpDataType * data, int socketId) @@ -115,7 +115,7 @@ int parseCommandPass(ftpDataType * data, int socketId) data->clients[socketId].closeTheClient = 1; returnCode = dprintf(data->clients[socketId].socketDescriptor, "430 Too many login failure detected, your ip will be blacklisted for 5 minutes\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } } } @@ -160,7 +160,7 @@ int parseCommandPass(ftpDataType * data, int socketId) if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; } - return 1; + return FTP_COMMAND_PROCESSED; } else { @@ -188,7 +188,7 @@ int parseCommandAuth(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "502 Security extensions not implemented.\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandPwd(clientDataType *theClientData) @@ -196,7 +196,7 @@ int parseCommandPwd(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "257 \"%s\" is your current location\r\n", theClientData->login.ftpPath.text); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandSyst(clientDataType *theClientData) @@ -204,7 +204,7 @@ int parseCommandSyst(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "215 UNIX Type: L8\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandFeat(clientDataType *theClientData) @@ -235,7 +235,7 @@ int parseCommandFeat(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "211-Extensions supported:\r\n PASV\r\nUTF8\r\n211 End.\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandTypeA(clientDataType *theClientData) @@ -243,7 +243,7 @@ int parseCommandTypeA(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandTypeI(clientDataType *theClientData) @@ -251,7 +251,7 @@ int parseCommandTypeI(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandStruF(clientDataType *theClientData) @@ -259,7 +259,7 @@ int parseCommandStruF(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandModeS(clientDataType *theClientData) @@ -267,7 +267,7 @@ int parseCommandModeS(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandPasv(ftpDataType * data, int socketId) @@ -284,12 +284,11 @@ int parseCommandPasv(ftpDataType * data, int socketId) data->clients[socketId].workerData.passiveModeOn = 1; data->clients[socketId].workerData.activeModeOn = 0; pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber); - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandPort(ftpDataType * data, int socketId) { - char *theIpAndPort; int ipAddressBytes[4]; int portBytes[2]; @@ -301,7 +300,6 @@ int parseCommandPort(ftpDataType * data, int socketId) //printf("\ndata->clients[socketId].workerData.connectionPort: %d", data->clients[socketId].workerData.connectionPort); //printf("\ndata->clients[socketId].workerData.activeIpAddress: %s", data->clients[socketId].workerData.activeIpAddress); - void *pReturn; if (data->clients[socketId].workerData.threadIsAlive == 1) { @@ -309,13 +307,10 @@ int parseCommandPort(ftpDataType * data, int socketId) } pthread_join(data->clients[socketId].workerData.workerThread, &pReturn); //printf("\nThread has been cancelled."); - data->clients[socketId].workerData.passiveModeOn = 0; data->clients[socketId].workerData.activeModeOn = 1; - pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber); - - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandAbor(ftpDataType * data, int socketId) @@ -348,7 +343,7 @@ int parseCommandAbor(ftpDataType * data, int socketId) if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; } - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandList(ftpDataType * data, int socketId) @@ -401,7 +396,7 @@ int parseCommandList(ftpDataType * data, int socketId) data->clients[socketId].workerData.commandReceived = 1; pthread_mutex_unlock(&data->clients[socketId].workerData.conditionMutex); pthread_cond_signal(&data->clients[socketId].workerData.conditionVariable); - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandNlst(ftpDataType * data, int socketId) @@ -432,7 +427,7 @@ int parseCommandNlst(ftpDataType * data, int socketId) data->clients[socketId].workerData.commandReceived = 1; pthread_mutex_unlock(&data->clients[socketId].workerData.conditionMutex); pthread_cond_signal(&data->clients[socketId].workerData.conditionVariable); - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandRetr(ftpDataType * data, int socketId) @@ -461,14 +456,14 @@ int parseCommandRetr(ftpDataType * data, int socketId) data->clients[socketId].workerData.commandReceived = 1; pthread_mutex_unlock(&data->clients[socketId].workerData.conditionMutex); pthread_cond_signal(&data->clients[socketId].workerData.conditionVariable); - return 1; + return FTP_COMMAND_PROCESSED; } else { - return 0; + return FTP_COMMAND_NOT_RECONIZED; } - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandStor(ftpDataType * data, int socketId) @@ -495,10 +490,10 @@ int parseCommandStor(ftpDataType * data, int socketId) } else { - return 0; + return FTP_COMMAND_NOT_RECONIZED; } - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandCwd(clientDataType *theClientData) @@ -569,20 +564,23 @@ int parseCommandCwd(clientDataType *theClientData) setDynamicStringDataType(&theClientData->login.ftpPath, ftpPathPrevious.text, ftpPathPrevious.textLen); returnCode = dprintf(theClientData->socketDescriptor, "530 Can't change directory to %s: No such file or directory\r\n", theClientData->login.absolutePath.text); } - - if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - + cleanDynamicStringDataType(&absolutePathPrevious, 0); cleanDynamicStringDataType(&ftpPathPrevious, 0); cleanDynamicStringDataType(&theSafePath, 0); - return 1; + + if (returnCode <= 0) + return FTP_COMMAND_PROCESSED_WRITE_ERROR; + + + return FTP_COMMAND_PROCESSED; } else { cleanDynamicStringDataType(&absolutePathPrevious, 0); cleanDynamicStringDataType(&ftpPathPrevious, 0); cleanDynamicStringDataType(&theSafePath, 0); - return 0; + return FTP_COMMAND_NOT_RECONIZED; } } @@ -593,8 +591,7 @@ int parseCommandRest(clientDataType *theClientData) char theSize[FTP_COMMAND_ELABORATE_CHAR_BUFFER]; memset(theSize, 0, FTP_COMMAND_ELABORATE_CHAR_BUFFER); theSizeIndex = 0; - - + for (i = strlen("REST")+1; i < theClientData->commandIndex; i++) { if (theClientData->theCommandReceived[i] == '\r' || @@ -621,9 +618,11 @@ int parseCommandRest(clientDataType *theClientData) } theClientData->workerData.retrRestartAtByte = atoll(theSize); - returnCode = dprintf(theClientData->socketDescriptor, "350 Restarting at %s\r\n", theSize); - if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + returnCode = dprintf(theClientData->socketDescriptor, "350 Restarting at %s\r\n", theSize); + + if (returnCode <= 0) + return FTP_COMMAND_PROCESSED_WRITE_ERROR; + return FTP_COMMAND_PROCESSED; } int parseCommandMkd(clientDataType *theClientData) @@ -655,11 +654,11 @@ int parseCommandMkd(clientDataType *theClientData) else { cleanDynamicStringDataType(&mkdFileName, 0); - return 0; + return FTP_COMMAND_NOT_RECONIZED; } cleanDynamicStringDataType(&mkdFileName, 0); - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandOpts(clientDataType *theClientData) @@ -667,7 +666,7 @@ int parseCommandOpts(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 OK\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandDele(clientDataType *theClientData) @@ -692,19 +691,19 @@ int parseCommandDele(clientDataType *theClientData) { returnStatus = remove(deleFileName.text); returnCode = dprintf(theClientData->socketDescriptor, "250 Deleted %s\r\n", theFileToDelete); - functionReturnCode = 1; + functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) functionReturnCode = FTP_COMMAND_PROCESSED_WRITE_ERROR; } else { returnCode = dprintf(theClientData->socketDescriptor, "550 Could not delete the file: No such file\r\n"); - functionReturnCode = 1; + functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) functionReturnCode = FTP_COMMAND_PROCESSED_WRITE_ERROR; } } else { - functionReturnCode = 0; + functionReturnCode = FTP_COMMAND_NOT_RECONIZED; } cleanDynamicStringDataType(&deleFileName, 0); @@ -716,7 +715,7 @@ int parseCommandNoop(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "200 Zzz...\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int notLoggedInMessage(clientDataType *theClientData) @@ -724,7 +723,7 @@ int notLoggedInMessage(clientDataType *theClientData) int returnCode; returnCode = dprintf(theClientData->socketDescriptor, "530 You aren't logged in\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandQuit(ftpDataType * data, int socketId) @@ -733,7 +732,7 @@ int parseCommandQuit(ftpDataType * data, int socketId) returnCode = dprintf(data->clients[socketId].socketDescriptor, "221 Logout.\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; data->clients[socketId].closeTheClient = 1; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandRmd(clientDataType *theClientData) @@ -758,19 +757,19 @@ int parseCommandRmd(clientDataType *theClientData) { returnStatus = rmdir(rmdFileName.text); returnCode = dprintf(theClientData->socketDescriptor, "250 The directory was successfully removed\r\n"); - functionReturnCode = 1; + functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) functionReturnCode = FTP_COMMAND_PROCESSED_WRITE_ERROR; } else { returnCode = dprintf(theClientData->socketDescriptor, "550 Could not delete the directory:No such directory\r\n"); - functionReturnCode = 1; + functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) functionReturnCode = FTP_COMMAND_PROCESSED_WRITE_ERROR; } } else { - functionReturnCode = 0; + functionReturnCode = FTP_COMMAND_NOT_RECONIZED; } cleanDynamicStringDataType(&rmdFileName, 0); @@ -814,7 +813,7 @@ int parseCommandSize(clientDataType *theClientData) if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandRnfr(clientDataType *theClientData) @@ -849,7 +848,7 @@ int parseCommandRnfr(clientDataType *theClientData) if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandRnto(clientDataType *theClientData) @@ -892,7 +891,7 @@ int parseCommandRnto(clientDataType *theClientData) } if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } int parseCommandCdup(clientDataType *theClientData) @@ -912,7 +911,7 @@ int parseCommandCdup(clientDataType *theClientData) returnCode = dprintf(theClientData->socketDescriptor, "250 OK. Current directory is %s\r\n", theClientData->login.ftpPath.text); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - return 1; + return FTP_COMMAND_PROCESSED; } long long int writeRetrFile(char * theFilename, int thePasvSocketConnection, long long int startFrom, FILE *retrFP) diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 5f61ea6..aef7ea3 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -6,12 +6,6 @@ - - file:/home/ugo/uFTP/ftpServer.c - file:/home/ugo/uFTP/ftpData.c - file:/home/ugo/uFTP/ftpCommandElaborate.c - file:/home/ugo/uFTP/library/fileManagement.c - file:/home/ugo/uFTP/ftpCommandsElaborate.h - +