From d44629ff7d386332dea9f1216958e3d17a5e38ad Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 16 Apr 2021 23:18:50 +0200 Subject: [PATCH] [vfs] updating logging in Linux/WSL `fsnotifier` Dropping unwarranted use of varargs; reusing printing code; warnings; formatting GitOrigin-RevId: 9661fafcb44df27adcfe2a7821ea42f7fac37dd7 --- bin/linux/fsnotifier | Bin 26452 -> 26408 bytes bin/linux/fsnotifier64 | Bin 28416 -> 28352 bytes bin/win/fsnotifier-wsl | Bin 28416 -> 28352 bytes native/fsNotifier/linux/fsnotifier.h | 14 ++-- native/fsNotifier/linux/inotify.c | 47 ++++++----- native/fsNotifier/linux/main.c | 116 +++++++++++---------------- native/fsNotifier/linux/util.c | 12 +-- 7 files changed, 86 insertions(+), 103 deletions(-) diff --git a/bin/linux/fsnotifier b/bin/linux/fsnotifier index 94007d7c95db1b6538eb5e88c2bdb3657c125c81..ece4fac4cdc6304d78f0a9c99674b9d3a67288c5 100755 GIT binary patch delta 9730 zcma)C3w%s>zW>iSNhT3yF!79JBIB)OloG89d7)H-B(7%_6kUk>G+rE z;NR|tlUeH^1(b*t_cO4$I{H8zJkr3wm0~jc>cmVsHoFck(7}Jz$@k`irC7 d?io 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 K_=bni?eQN@v-JM} diff --git a/bin/linux/fsnotifier64 b/bin/linux/fsnotifier64 index 60861bc20576d030ff21f2d2c2d758e911b91a23..c07b92dc5faad58a1748f00450bf721f3b287c08 100755 GIT binary patch delta 11208 zcmZ`<349aP)}KlD0!>)kve<F2J z$Mf?&<>^zDr}!xPDrj0PE#<=n0Tl!($aZT$KoL-ueE)N2(gOaz;m6!NXTRs1d+wQO z%8tmjKggA7a@pGSw_{etN#a_y_FzWrhrP6i4|}l=@_?AUcG_be%avr?j}*|Ug5rP0eWSRa5%=H4eT2Bzv6RRRIbCS1gw3X?1aOm$ z!-b3_abG0vae`_cY4W-K! z-y_lfa2s%H6JLHk81&XUbNp>|z+4S5+}~LTOwj=~$pUc1Qp>ko3kGXSvuqN72(xVv zEH&SQdrci+fry%S33VS(mP5^{fHy?U9Or^Jwi!U_&xD*BnnBWv2uV_WR`WPKUD_&u zyZE=zSknmvyloGl)rkH;E3mQ@91pgaBu}mLu^Ll1DDlB3W!7-uWuy0Vu+)$-e1CW1 ztE(X=^F9!#sBCwq*f#O734)3{_+Mp5JH@+x6Ld{{Wi0d`;!l7)Fii2aTjYSGIk3}D z{@p5MK1gDGLmnU$$R*CN62NK)fPX@Zt>xZCv790TEr;#?g`u^o-vj+bxFo3ul=2-E zi)r?UUH0krN9+aD>ma5L@r;5PwGNc;VU?K&)Pu%xjqdHT>M*yh$iL5f$e6oN{n~x3 zHhs7K6EaFYn7i-9_CF#kmfq*BHRhgIFA%cP{;5E2&)s*jnr4pKziht|smwm2R4g=4 zEmDk&Ym1DoY_rSes3y%p1DCWs`LMDw;^yl`BzYm6?x_Z?!O^`O?;~WI*0kg zvus+R72(!YnAf}o$>Z?C45Q}_VISYtnKH%b9T^M;n|}sc%c(cJN>Z-6Gmu&|z;(-t zu^_$*hB{Q3(!hTJ9dgC!Sp!yByl4z8o=XWyz`Y`=>d98m?;@#;9>0Lq`L`qJB&?0T zi2fwNebw;z-^)t-1~ZCZZpiKtlmag}Txy{?&7nHY10Cu@GZN2gAte)`*<0(V*kV3F z(OC02VwhtI2GVW|k=?yh2G8|e@FauBp1IRl@fwH$vy4ctoM^>2N%AL=x3L7;ue22$ z>T!p9G7wu-iG7%+xa(!(M>*1n*y8h!%;UxF9qMU55-UeI9qA_(xxOI>yXpXTRS(!y zGYHZ`y9)Yw43YYV7zih})jC)Lzy$^CK!M8D9)HB6hA$BS>(>Bq2V4)O&S;`sa+zXx z66OVr#-uVBOogJi;;w^%VX*IlBlDzY-!=C zLXG4vfCSz$CP|a*Q|y!T^X%%STs3&Pp$xfY^qhnahkD(iUJbl@kPjxg zYP}=<>P^8kk|Be#T&>v#KU{_X5xk4YNX^LSe-nV?08liCYmfU|@bd-0S_c5X7tD^# z>y&Kg_{@tGAz^0cqEHz@wefsL&TUD#vo3IGR#uYkTdcHSYA_T(ggZ*?%LeS<%MCUR zM$d^>A0*!F11e{pYLMKdphf<`KglQiT<~LuRvG`F3op_-Z!r!r{|d*z?fYSy=AkWw z65DkQ908ZU0RZ{s>aXJQr4Zi5?-T@9Hz525c`f9^6p&)cQd?SbmR7d@LR8f_`%z=p z3Wz{Qvu9YFL4Eh-#0hfd$#0j#iinKm6VF5 zRP_{N&Us3h1JI0Ow*~fApdZ^gG8#t&R?*QvKg-rq>jsHUcokl}&4c}Jt$A0q_*T(6 zspeg8sd>gEn+wIbojMZUnhw#S!UyAvHNPz;lyGFY=DFzrP&NDT7vae9E%*}xV6_6k zt3m6?ylV8E6NROTe|G_eL1`Z^Ocu-I$ zKkMp`n&67 zs|A_S<5#d2 z@w($se?sV1;}pa;^*wAh-JfZ?DXg0>)6t+$+|HV}2uW_+n0 z?cjNTR+gRzTK8auJbPJbe_Y(gO?m-HXjR`pHkVojHNm-mQ7RR=6&HEsv zezhm|wX5Zw!X}A+6{II1L-eZ8f)Kpar@pSQUES$G1^*0ArPjSSXrRk74C6(ZLK)j-c>Rmn+_B8u)7Hafy8IE_O>3-bi@K%?t3(r+m2~guy*W zIAyq<7SzNuU{Q`Yxcp(eJ9y1G8F$2d>be+#;x`ZDiDCXn5_9mO{ZF?zp52}V}7^pm4u zIbKuUJJRru+WLyx?yC{7x6Xz=f+JhsBiqPw-;gbY()xijVzt}=72evXU860BTFZM; zB@DnKJ|g|TAue!Hb^I}F&&KLefA!*`;H2SP3hl8zzMWiOV8lhi}cnSc#<_@pvmmR9`OUN*Ua0VhvOI@O+ zpVNs4eDM%2n!2VlTfvVz_P=;%_w8tCRPY=r}OmpHMT_#xu#96{FaefoZX0|bX& z_)H-2S%10*@=qcX_!x5v^C}r@D!#WRX{D^)5AP`Un6kCqPG z+J*N-2zOMJ1j|apf*Gi1SCop0=4eqLY1_mCjWCSl|Ka2%#T`t0vP7wtl1-8c`&Ti( zab?+bege+-p9n1Z4hz9q5i=O zV7tBHIf6(w<450Qt3k^phkAi`AvNVY*5L~#J|~GUNg)@qT62nPc#PPCBQ0k|mw>8* z0(c2PJsGc_#?hlILeb~{gJ)DH&&#kMuk}=gu0&(|)tBzb@mw-`W&tkf`F}u(6fk;x z0Ewb?+JP$m6E=!k5BREg0q=pXrEQLS%HHrSDaoL%la93r#%I~eUa4*741+(N=C=Gq zEPJ6nx z@ZwK$R2X%cA3G%u;EFuFIN)TU^TiL^vXvbqqjx&|?I-I*%v_W-3A_>vW z|Ch9D1d#zAM^rcAq{&gQHBSMzFWWruV@igUMv((XPb{E>&BT~ZHrzmvHh{CWoHkdW z>G3~#i(ExLNc(6aWPb|IVBkJpeUkLMfA93<=<0B!s_~7+Wmf;jTiC#o(!$afClo%s zHSv34xyt{fw@&?vS7Gt~Z6O(<0`UWmh)=syk_Q^qdis7xEv6)LEbu<{{cJ{`6qoyM z?YmMKWf3L7Man_cwu-sk;i(^T^wOcIKjo^mux&o%`mEQ6AkKI3{vt-p)3bd&`Sue) z4CAq6&BYK~wu+Al%^K%GIsknuOuSE|NaK4gX9F*$C78nTm|4HF8{v@8^(-x|xBMlW zkk-9RIZ#UG0cR4jSMiNRe_LYWud?#ABv*Grk+j(~frqvoC-GJXEJFig*-OEpE!6xB zUN?#=Ma>DlBP95&`v)UnN6V22^jV*;g!R;;o5%^PzJRN$WTS^;q&L=HMV0>eY~2-b zLhy`>x`mylaq{Ga(Et8Gj8-bP9h+&BXb-{V z23kDwK3cA$R?`>J9!8RFZD47*kQ?0NE;WZsMo$#%viove;qTD*9p@ct6S_IkUt4zZ z=kY@2zH-C3x(;gqRrovF2atWp!(7^|yfKVoZ(Oq-5X+%JO6$p8R0-W0(HkJ5KKIoS z8w!2_HW-yr5exwavT%&#L{1Am%2vUz&_VUXR)|?MX{8RW8 z85)Vz;-rg1JVRgB?h3FjeS0P6AwK5^k)EJ4g0DgG^I0qL>z)Dt zM1|SffR2)Lq1w3WL#$Y>_ZyJ;t))dA)i2|0fZ!(wv6{Xqu8HuPV5gjIf+Y!Bf+B}G*@jj3dyuV^T!lzOOW>J0c3{+ z&CT?;30`y*OHXiLZ8yUigD=-cuM8*@y#_^o4o|e&tR0aJsOzF?H4gwKPAJ8_Glkbe zAq+5jHe3yd$~mw{jjH~Tx>Op>b}1l47nD}h<9{qE^W1b6_; z`v>f8U7q`D_u_&2Sx!9^_Hpo2Bu22zx+M?R6`LC(Hew>z?1B=046SgWeW;!?&iwro z<}C}U7Y&tg^f>hbgv}sfkQEHeIt4#gZ`USJ0PLp95KJ@$rT-n&5MM zrT8|CUJo+(9*~IFOwxSafa`{*3@tj*FRLz*;xihbfpCC8rS$cgQF%Oi`hKVisR%AT@++O>G`<8x*& zc@%OWX7-Xri)Jn^yeGL&uVsDM{aIt#-?Ju#lgg?~Sx<$z=nwQ}is!Cia4F{NK8I^C zHe!4j_a8Ocwm1pXhQqJ4+MiVFe(RwLHaPDARQVpR%7HCuVCkP!X}AE zDyLygz&L_74R&q`MviKBG)!_yS1`E?zzGK}jmzJ#$F;|CbiupJIyT!m4J!~!s;VNAfWJ|eQ8Bn`tP z4}hr{7h>FiaTUfZ7^^YT*A^*?vX#9xIyGI{9SmmBQ+5=UJqi0;Dg+EF#AU`k8~>NG z3#0o)a$u4o*&Rx}>Gd#o)auBJh&ACaggt8r`zN!E>1?vcy^ggL&nNg_{WY7f+~IOy zdIJAz_XdMfO7F^ry*1rDO3fqU{+NKPE=OMr;Mh+WyY z!QgbvNuJwam=Z_Z0gqHfb^!Mqt-&70;&YQnwvUJ#260(&X;6EUf*IXG^C}ohu!m-0 zt_zz%!stShOVm^}9%h?!doQA#IgI_PW5v%6t^sxcFyT~?qxqI7r}hJu1{{fOS?}n$ zTDfJxo#b1W2iJq#0p7+V!QiVbWo#F=U`%^?A32x3I3~3#{XJGf?uB%bZz)f&9c5pR z855HL@3%!t-VN5?aw1d4c8@FsOgh2lkL?=c!PJBVeU4R(?IDk68^ZhiNs?DH>L+-3Hixzzl+eoX0DiD2b%yP0YHFvEr+Y|QwlG7PU1ING+)i_Npn9eaGt?w;m!#L&W0T@7@8F5J%6i!Z ze3p(ygRQ~w&Ow*h9T<1A3zOqna%4FEo{sN188$*n&rzP?x`>f2w2?=Ih&Nmndp4Uf%iz)@!4Iz0JlOK#vEC#O$u`LZnPvgx^ZT_bqkqI)9!y@zO$^<5P@AwCn>Z*}ZI-RE;)HC?BKgg?YR zj$L?|@`~5eu5$D_D*uySDOH)zEBfzI1Q z$9je2S9I)AJvTx}&cE0(@cu`~*6NazP-p1+hSz7LmqEJvyTHgX>4Z z^}CKW=~#=9C`nL49n*-wMtjeMm`Aujo0CKsTL zi+QQIzbNiU*-XIS7xT~9+JgAlZ*@862eHis?^P|EaY1HJ7e*QG9$YnfR;k=c|0$%+ zHrkP!HL_sPfI$O>u&-xts(QCDR=%_4XOp+!CFjgp3+EIpEq3a&N9Q=JzMo?@Y@Rzq z#;G-PUPjE~7@M$nG5g!Rp)q^(r#OqP$=<;s?>$|8rn4?aplY7=Sy7}tg~8sW{{yRZN!MhEG1~AMG8r2=?w%#X@OC&)Gkm!7D=S@sHT`! z=Nifs4{v1NjEe86ptyi#7&eo3N(+pRQx|wBN&!)Cj0h-#vfcOpPHtFy_xHqs00)HCTeU=lSJ19KK9mM*IBjc3b;i8rwyd51Mn$!9{=15|OU=<;v!*pOMYlj)#_o?Yi7C8oVXHB= z@;05f+o^qSv7R+XC5tC$!WtHaXSHm(K1b}u8QVE=7H{9;?aRC^LZwimWr_D3}J%_LH2TNcJIfkE2^q$ z9}{YpE~{R`4#xhIyS%ggIlxGG#s7q(S=@YHPs}B|NLm-Kn*4Bw@YgtFz@{O~54dVI$&A;%%+P@jas0mt`iD zi>B75gjG>&y3X)!(l@%e^wBm!+TXs_%FgsX=8+)7tLo~1FZmue`1Lm6CPMZGwGAB+b_j5FPqTRW^|l&R{kiTBccQC*J5fM#wDFKMo*C? zNp5$1^0l+_8>xAYB~OwUTMSOwVhQ!FX;D^PQdM7`SJfMv@?qD&^bRO<7|QITz_Yf& z`BywYNn0kzEk2(&EpG9tyc*+Dh~$FPi)5JWnDt}pL1%N3C0%*(GKERq84r2MmFy74==RAVf&S9Se@Xn1MatSV2={yK-VOHJ^4`|7T?HEfw z(%xsW@Vx}5sj51y30fH&pXd52!~2rsjZJq06MPaJ;Seb{34%l37wSjRd;n@Xdq zOKAq2t2TlQFL-M*^fgEH?aTG`bdavwf8{}8Y`n$;rPDt~)AwF&6CXeU?^Rv>i{4IE zs_bkS7nS3Fu1g;!gx0_iPmtgwtcLxr9Rua8r$YmbX*R*zDFXd4q0b?P@;i;qW}pF^ z44C|bvc&@~Z=FH-{UPi?@(EJ&Y_TD)UNROR;c*NXNX_dlJF&i!!nki!26*FWKUM02)V9>Tys9ssRAEl7jLPSgcJFFbU3w3NVqf6mdJPvF%o~8=F3Z z4MIcw!|X@_6|TvKw9swJQ&`=f0XbH<`5%Dy0elZc2+B&5`Z)rthV`V(9b`6MY`MNaYM zJ_<-6o=ASW$o8a;^_1KoNeGkV0up-7m?o6jXW3`Ym@fb9kgr|rYJgx@GB<=%zMz!H zYK906=Jv2%=+wE*foBVC0)~2b??4NN7dvgp6&JGTf-(Xe7dr)%1Y_fWK?C^hWC^O6 z;znsAU#|raz8+X(Ol!mtuH+8)mw@Je(ByYMu>?$SV-9B<`wK#mug*~1q}Clqs&IEN z)7*X5DPL4>zeqXb-i6##GEn9APc*<+utGooi-oqZe@kHcZ>T(ywxp$u$`yJBdZr74 zyO-qMXLu-Fe*({g0%?975)xaa)!!cxC|xeGP)b3%%aSF@rIt~W?6l-L5ll8GMp8q; zo=Ko`Ph|f}P4O5o9EFc0>n+<%h10r+io`guZ}G0YvG#fbr^mB)y|%WW*qp1(JL% zunLa1wgs)&O$+yuz06)ZL-Kx~<&dvHgpEXeg8Y^{C^QdZy*DkY&lWhd~+-oZ-+=i zNM3%2v3Wej9{{LFy`ZZ@?zEmpeRei46K%%zolax%S--nb^I*6xMnRIjp?-vrBSW71 z`2a2vg7TITR&L_OHp$qy4G{o!CHahU3W%mQr+nGC_7xBoTh&ksWewdA2*1w*0(<^` zWAoG8QD=(eYf1y(?momeRe*O9Y;-QBK`LU+DSxB9#6hk-{&w0XECIxiPWc3ON_CaC z_$K^K5s8pBP{=M0YiMlj&jY+iLdlv9nCH6MO$*8A7rC%ARH7e5>_7s7Cy9)H`uDTF zSFgBcc(1BXADNv*8yh#nbKa|0jg1U~{g-dp{YN*tzvlm0 zq*T-3uMov`*3_88Wq8`S5M$Fx1T7-)`oVYy*n(S0xBWJ%ZpvIbB0s}8lFwIAAA^lV zp@b>uK0#^n6N-CN+mq9*M{mR=&M%;#`fIeT+!^qK2iEXFvYsSgh)9-r#BPLe9<8eK zD#Yb?)VBu?hnG3TU92iEkR&Qe3d4w;?nB=y;3X+`ETJSk<^AYFxbg+|>Mw?mpzas&ka8`<>Z8Nn%GA?nR&D=$>E; zFZ#?GDr>o;Fb$vNI{;zCABzI&B%Bn`oP zcUbD*AXVAP4rQi!>Y$(;JsAL8dG8I(D~gn)G^|9SHjmD4oGkBnczh9d^{1Mf>r4T^)Ai??^Uz0sSSz;z5+&hhhpj-59Z3N#F?l3 z0BQcGp}=m^f>`M&tOILkfPcdcIDnP>jOkIf5NH2GPu}mp1i_Jrw1LD|up1~P z6G4MFs~s4(ir9mD{Pp0bkTY>g2T|^Yy#3K*F+~2WA(O9QG=WLM{n3Lpu=Oa9D#Jr~ z@sSH^0quxf0({XrnqI#p-E;w1{rv{)72(z}pyZ1l*F6XxBI8Ukhu< z%J3}0JsMSEqV=>ft%y?R3`+12#FQ3nTS7SQv{ev6%0rmbssCqe12<2qhFK7i-&wz} zxbcFqu^MnruT+2%E;cr<1qjlL}zo~A`|$OX07 z2xpX8LH3|tnd1b(=dvUy$-UUZ?Atw0fsN}*v<9Npt~i-MIGf%5{M{36*vLgqSJ(gg zRoI;XlezM)F5`~kz6ttqdiUO9QtG0z?mP1OK5v^SRd)00MQ0rCwc&}rg0bmASl&+x z21Lpe3J0_DL|9s;az2OvH~4kMNEl9}0}cH90SZg8d?i>4ZeNjQ)GpzyAY>fiwZhmK z3n*dlK_9jaoV58C9|h^6?a>#xUoN8!-;^ymne@$LlvQwX)BpCna zz={HY&n;|V8GoH60dKttWWG?4b>Ep{UWT3c&qU}W`F`mv6NmMWrSJ*8-NMp`Wq2lz z#p?u|co$sGU38wTfwI)RU?42eXVUc?_|74>Va;bzfqVsf^Wnm~l+&iJeBDYIgDgpS8c4{IA{PP!X&yyOfZBx3bvrVJY* zUSr1L18>^~l$3wOmB!zRCgQSNm!y2a?8DPMPC}75Mgwep)wd+SAOWgjN7j!iGw3Un z;JdMcP;=`GgV|TGJ`bKaz8apui>9EAfcj*BKU_u7wTi|@GklJFeX;d4uJ4wln=gJ8 ztRBHXrARXl%wj}=m74V<=z`%C6=$U~HUDR0^T!Zo_r3K!ma+SqPNA#8S#bDuI$YfT zsm@a<{?NYq8_2e;K7kMk6w98o_IBkC z$`o(sKz~uh;0}HpdI|-{jsP{&%U0zPsdD+Ox2)bG9zi}4fiHTiXG~brUUuI~Jr}Na7dKsSBC(VB zmjTAcA5bdoz7qZG{2e+CUpU}W$)G8Q1K?t~eFFG8-Frfyu#d8y`kd zm>Ab?0t8o!fi*3-GK5jBQLukL-hE*qWAif+7F>H4>ceUsBFo^d%-c0ks+?{P7qAz; zrf_xd@;!lX36(#hLUVES1(hNaBgqTqL7egcND<9{!On4@6~fbz^EM0TNl4eqwvJ5C z~Evvesm9@AQ_zKc7#|wJQ?BLq3+1ZhqW6$JLw85&oyKoy;>R@ULw!dNX za;N{ETM7+7o1dmS=qrf5huxQx;hBXv;_MXY<$N2)#t#6Lnzvi%+D!13fYY03Gh7hf za5W%Pn=ZJ_6jS|B7wKM{uCc#BGF@1C7wKhHWn}mfgz{O`j^H97l?z|N2xjl)-j%L6 z?`55_Ne?I%%7OO&fw$-!J|K61mDjMK6_k!j9Dw^Xl<8QI*B07s_!I(spuM?-iZkDq z^1&%~->584U$Eg4; zX%9`n_@X_;qPO@b-Av-(CHE9+Rp^l$ckxd>1b6^D90rwd?9h98pnH^d%+tN;Es(v3 zC{Y^gMYn;7>7bVt90%rfIrC)%3Z7Pp3tMMc@GA-&S5(< zB>8gS>}tE<7qBR~GgXty53z#dY}?)DnJYlguWb!Gi8kJStgC?rLg>(qcZr%7{&gKL ze~_uzz`|dNdvM&-?dHreN;H?=+7?QsdqG+cGv?koWX5n5otX~#u)WM7|7ct=+i|QP0`Rhgz+G48M?ULFR3#zNq zvofo)g{j3eX4p%L<1<&pv(+~1w6bZl?4=W>Vtb*pIDT-vaLYW0AnqkAD_oTeDjr!} zJvKe(R)SlRnJd`8ZI3g_zBhF+FppJNE}f6Hv2^9qM<1!e?)om5Sv5b)9nXUwI1WD4^)-nbv^n8=u7{ls;{8`^dnV0k6!H(M&Cjux)j#`f(YQvJ^F6+=h1(Uz6kYVU@QcquZm?g zC4;gJ@2hGKWkgXd6`up!(W5AKK2ud*U_eC*6#>=&7>v#zC?w1VtRAolA~$5Wc#9zi zlOdC_fhv%`LedeAFR}L=Lv@Eaid}LHN=<;BHzOV+a-ASf2kezE*gcac$1THfJHoSq z$&-hOMQrQjfu6m99YNtB_mB_fBpQkn$uxd! z_fnfJ?DBznLC8bIllw$0fuZaZcI^4`IgPwB^wJCkE5lhaSJOU}Z$;mAb^$Y{1Y@h+A$El-yL|9~Jg$*NtjyL|aGJBcH`X0u_wKc=Wp^xxZ5I)r4^9F?B zYsf};jDIim;RlR@}Y+9&Iw~@a2nKO!dfqC*y);2B9&9s;G^i9 zNIX2N(I+tbY?F8=ZzoWjQVJW<|2`UiW0m*V^4TUU9k8UEP4gr8}V4XH0->QVeDK^BM3Wa zC%Qx-OS6s!7Cz!D-OiRjY)bh$!mDW$iRVjPa_^|{x^0@|3{8YdgU_>uS9ECbAuQuT zlemt{AIrznd0WX_H*eSTb`x*+uoDlOQVwX+j%ya@H3kw75lu=^!`jT@wdi+xdd?9x zItpQ*&g{B=_-o7ZhfLxS_A=VL__%~xEB*Y?M}T*2HqIBxlUfY8f3)a`tok@{G4mXA z%71GV^R!%vRHZk#bU$xDp*BU)D7R|%sOBpP!Y`aAfwj*uiRrv8;B6_jDT@%Uq`_Iu zx`Q>YM_9&OQ;M6gI(+@wFRVAF{Ap+R1KX_erfb?q4ut2q#9Q&Dh7~m4Nc?{nfopp#)nuO6;0>DhA}7hU$SN8dlqP3h z4tuKnt$s`0u4QhQ@L2V-rH{GFs~@jk;%Xf^??eqC7_JGpRVd?bN!u%#}VBraqXi*ouz zYGmYpd*j&4i*ovIE(x!+xr8q$*kW2wE*h`v{R;w#9*Xh_Y{Zgbac$)sApFWImW+wp MRTG{?LEp6h1OJk=ng9R* diff --git a/bin/win/fsnotifier-wsl b/bin/win/fsnotifier-wsl index 60861bc20576d030ff21f2d2c2d758e911b91a23..c07b92dc5faad58a1748f00450bf721f3b287c08 100644 GIT binary patch delta 11208 zcmZ`<349aP)}KlD0!>)kve<F2J z$Mf?&<>^zDr}!xPDrj0PE#<=n0Tl!($aZT$KoL-ueE)N2(gOaz;m6!NXTRs1d+wQO z%8tmjKggA7a@pGSw_{etN#a_y_FzWrhrP6i4|}l=@_?AUcG_be%avr?j}*|Ug5rP0eWSRa5%=H4eT2Bzv6RRRIbCS1gw3X?1aOm$ z!-b3_abG0vae`_cY4W-K! z-y_lfa2s%H6JLHk81&XUbNp>|z+4S5+}~LTOwj=~$pUc1Qp>ko3kGXSvuqN72(xVv zEH&SQdrci+fry%S33VS(mP5^{fHy?U9Or^Jwi!U_&xD*BnnBWv2uV_WR`WPKUD_&u zyZE=zSknmvyloGl)rkH;E3mQ@91pgaBu}mLu^Ll1DDlB3W!7-uWuy0Vu+)$-e1CW1 ztE(X=^F9!#sBCwq*f#O734)3{_+Mp5JH@+x6Ld{{Wi0d`;!l7)Fii2aTjYSGIk3}D z{@p5MK1gDGLmnU$$R*CN62NK)fPX@Zt>xZCv790TEr;#?g`u^o-vj+bxFo3ul=2-E zi)r?UUH0krN9+aD>ma5L@r;5PwGNc;VU?K&)Pu%xjqdHT>M*yh$iL5f$e6oN{n~x3 zHhs7K6EaFYn7i-9_CF#kmfq*BHRhgIFA%cP{;5E2&)s*jnr4pKziht|smwm2R4g=4 zEmDk&Ym1DoY_rSes3y%p1DCWs`LMDw;^yl`BzYm6?x_Z?!O^`O?;~WI*0kg zvus+R72(!YnAf}o$>Z?C45Q}_VISYtnKH%b9T^M;n|}sc%c(cJN>Z-6Gmu&|z;(-t zu^_$*hB{Q3(!hTJ9dgC!Sp!yByl4z8o=XWyz`Y`=>d98m?;@#;9>0Lq`L`qJB&?0T zi2fwNebw;z-^)t-1~ZCZZpiKtlmag}Txy{?&7nHY10Cu@GZN2gAte)`*<0(V*kV3F z(OC02VwhtI2GVW|k=?yh2G8|e@FauBp1IRl@fwH$vy4ctoM^>2N%AL=x3L7;ue22$ z>T!p9G7wu-iG7%+xa(!(M>*1n*y8h!%;UxF9qMU55-UeI9qA_(xxOI>yXpXTRS(!y zGYHZ`y9)Yw43YYV7zih})jC)Lzy$^CK!M8D9)HB6hA$BS>(>Bq2V4)O&S;`sa+zXx z66OVr#-uVBOogJi;;w^%VX*IlBlDzY-!=C zLXG4vfCSz$CP|a*Q|y!T^X%%STs3&Pp$xfY^qhnahkD(iUJbl@kPjxg zYP}=<>P^8kk|Be#T&>v#KU{_X5xk4YNX^LSe-nV?08liCYmfU|@bd-0S_c5X7tD^# z>y&Kg_{@tGAz^0cqEHz@wefsL&TUD#vo3IGR#uYkTdcHSYA_T(ggZ*?%LeS<%MCUR zM$d^>A0*!F11e{pYLMKdphf<`KglQiT<~LuRvG`F3op_-Z!r!r{|d*z?fYSy=AkWw z65DkQ908ZU0RZ{s>aXJQr4Zi5?-T@9Hz525c`f9^6p&)cQd?SbmR7d@LR8f_`%z=p z3Wz{Qvu9YFL4Eh-#0hfd$#0j#iinKm6VF5 zRP_{N&Us3h1JI0Ow*~fApdZ^gG8#t&R?*QvKg-rq>jsHUcokl}&4c}Jt$A0q_*T(6 zspeg8sd>gEn+wIbojMZUnhw#S!UyAvHNPz;lyGFY=DFzrP&NDT7vae9E%*}xV6_6k zt3m6?ylV8E6NROTe|G_eL1`Z^Ocu-I$ zKkMp`n&67 zs|A_S<5#d2 z@w($se?sV1;}pa;^*wAh-JfZ?DXg0>)6t+$+|HV}2uW_+n0 z?cjNTR+gRzTK8auJbPJbe_Y(gO?m-HXjR`pHkVojHNm-mQ7RR=6&HEsv zezhm|wX5Zw!X}A+6{II1L-eZ8f)Kpar@pSQUES$G1^*0ArPjSSXrRk74C6(ZLK)j-c>Rmn+_B8u)7Hafy8IE_O>3-bi@K%?t3(r+m2~guy*W zIAyq<7SzNuU{Q`Yxcp(eJ9y1G8F$2d>be+#;x`ZDiDCXn5_9mO{ZF?zp52}V}7^pm4u zIbKuUJJRru+WLyx?yC{7x6Xz=f+JhsBiqPw-;gbY()xijVzt}=72evXU860BTFZM; zB@DnKJ|g|TAue!Hb^I}F&&KLefA!*`;H2SP3hl8zzMWiOV8lhi}cnSc#<_@pvmmR9`OUN*Ua0VhvOI@O+ zpVNs4eDM%2n!2VlTfvVz_P=;%_w8tCRPY=r}OmpHMT_#xu#96{FaefoZX0|bX& z_)H-2S%10*@=qcX_!x5v^C}r@D!#WRX{D^)5AP`Un6kCqPG z+J*N-2zOMJ1j|apf*Gi1SCop0=4eqLY1_mCjWCSl|Ka2%#T`t0vP7wtl1-8c`&Ti( zab?+bege+-p9n1Z4hz9q5i=O zV7tBHIf6(w<450Qt3k^phkAi`AvNVY*5L~#J|~GUNg)@qT62nPc#PPCBQ0k|mw>8* z0(c2PJsGc_#?hlILeb~{gJ)DH&&#kMuk}=gu0&(|)tBzb@mw-`W&tkf`F}u(6fk;x z0Ewb?+JP$m6E=!k5BREg0q=pXrEQLS%HHrSDaoL%la93r#%I~eUa4*741+(N=C=Gq zEPJ6nx z@ZwK$R2X%cA3G%u;EFuFIN)TU^TiL^vXvbqqjx&|?I-I*%v_W-3A_>vW z|Ch9D1d#zAM^rcAq{&gQHBSMzFWWruV@igUMv((XPb{E>&BT~ZHrzmvHh{CWoHkdW z>G3~#i(ExLNc(6aWPb|IVBkJpeUkLMfA93<=<0B!s_~7+Wmf;jTiC#o(!$afClo%s zHSv34xyt{fw@&?vS7Gt~Z6O(<0`UWmh)=syk_Q^qdis7xEv6)LEbu<{{cJ{`6qoyM z?YmMKWf3L7Man_cwu-sk;i(^T^wOcIKjo^mux&o%`mEQ6AkKI3{vt-p)3bd&`Sue) z4CAq6&BYK~wu+Al%^K%GIsknuOuSE|NaK4gX9F*$C78nTm|4HF8{v@8^(-x|xBMlW zkk-9RIZ#UG0cR4jSMiNRe_LYWud?#ABv*Grk+j(~frqvoC-GJXEJFig*-OEpE!6xB zUN?#=Ma>DlBP95&`v)UnN6V22^jV*;g!R;;o5%^PzJRN$WTS^;q&L=HMV0>eY~2-b zLhy`>x`mylaq{Ga(Et8Gj8-bP9h+&BXb-{V z23kDwK3cA$R?`>J9!8RFZD47*kQ?0NE;WZsMo$#%viove;qTD*9p@ct6S_IkUt4zZ z=kY@2zH-C3x(;gqRrovF2atWp!(7^|yfKVoZ(Oq-5X+%JO6$p8R0-W0(HkJ5KKIoS z8w!2_HW-yr5exwavT%&#L{1Am%2vUz&_VUXR)|?MX{8RW8 z85)Vz;-rg1JVRgB?h3FjeS0P6AwK5^k)EJ4g0DgG^I0qL>z)Dt zM1|SffR2)Lq1w3WL#$Y>_ZyJ;t))dA)i2|0fZ!(wv6{Xqu8HuPV5gjIf+Y!Bf+B}G*@jj3dyuV^T!lzOOW>J0c3{+ z&CT?;30`y*OHXiLZ8yUigD=-cuM8*@y#_^o4o|e&tR0aJsOzF?H4gwKPAJ8_Glkbe zAq+5jHe3yd$~mw{jjH~Tx>Op>b}1l47nD}h<9{qE^W1b6_; z`v>f8U7q`D_u_&2Sx!9^_Hpo2Bu22zx+M?R6`LC(Hew>z?1B=046SgWeW;!?&iwro z<}C}U7Y&tg^f>hbgv}sfkQEHeIt4#gZ`USJ0PLp95KJ@$rT-n&5MM zrT8|CUJo+(9*~IFOwxSafa`{*3@tj*FRLz*;xihbfpCC8rS$cgQF%Oi`hKVisR%AT@++O>G`<8x*& zc@%OWX7-Xri)Jn^yeGL&uVsDM{aIt#-?Ju#lgg?~Sx<$z=nwQ}is!Cia4F{NK8I^C zHe!4j_a8Ocwm1pXhQqJ4+MiVFe(RwLHaPDARQVpR%7HCuVCkP!X}AE zDyLygz&L_74R&q`MviKBG)!_yS1`E?zzGK}jmzJ#$F;|CbiupJIyT!m4J!~!s;VNAfWJ|eQ8Bn`tP z4}hr{7h>FiaTUfZ7^^YT*A^*?vX#9xIyGI{9SmmBQ+5=UJqi0;Dg+EF#AU`k8~>NG z3#0o)a$u4o*&Rx}>Gd#o)auBJh&ACaggt8r`zN!E>1?vcy^ggL&nNg_{WY7f+~IOy zdIJAz_XdMfO7F^ry*1rDO3fqU{+NKPE=OMr;Mh+WyY z!QgbvNuJwam=Z_Z0gqHfb^!Mqt-&70;&YQnwvUJ#260(&X;6EUf*IXG^C}ohu!m-0 zt_zz%!stShOVm^}9%h?!doQA#IgI_PW5v%6t^sxcFyT~?qxqI7r}hJu1{{fOS?}n$ zTDfJxo#b1W2iJq#0p7+V!QiVbWo#F=U`%^?A32x3I3~3#{XJGf?uB%bZz)f&9c5pR z855HL@3%!t-VN5?aw1d4c8@FsOgh2lkL?=c!PJBVeU4R(?IDk68^ZhiNs?DH>L+-3Hixzzl+eoX0DiD2b%yP0YHFvEr+Y|QwlG7PU1ING+)i_Npn9eaGt?w;m!#L&W0T@7@8F5J%6i!Z ze3p(ygRQ~w&Ow*h9T<1A3zOqna%4FEo{sN188$*n&rzP?x`>f2w2?=Ih&Nmndp4Uf%iz)@!4Iz0JlOK#vEC#O$u`LZnPvgx^ZT_bqkqI)9!y@zO$^<5P@AwCn>Z*}ZI-RE;)HC?BKgg?YR zj$L?|@`~5eu5$D_D*uySDOH)zEBfzI1Q z$9je2S9I)AJvTx}&cE0(@cu`~*6NazP-p1+hSz7LmqEJvyTHgX>4Z z^}CKW=~#=9C`nL49n*-wMtjeMm`Aujo0CKsTL zi+QQIzbNiU*-XIS7xT~9+JgAlZ*@862eHis?^P|EaY1HJ7e*QG9$YnfR;k=c|0$%+ zHrkP!HL_sPfI$O>u&-xts(QCDR=%_4XOp+!CFjgp3+EIpEq3a&N9Q=JzMo?@Y@Rzq z#;G-PUPjE~7@M$nG5g!Rp)q^(r#OqP$=<;s?>$|8rn4?aplY7=Sy7}tg~8sW{{yRZN!MhEG1~AMG8r2=?w%#X@OC&)Gkm!7D=S@sHT`! z=Nifs4{v1NjEe86ptyi#7&eo3N(+pRQx|wBN&!)Cj0h-#vfcOpPHtFy_xHqs00)HCTeU=lSJ19KK9mM*IBjc3b;i8rwyd51Mn$!9{=15|OU=<;v!*pOMYlj)#_o?Yi7C8oVXHB= z@;05f+o^qSv7R+XC5tC$!WtHaXSHm(K1b}u8QVE=7H{9;?aRC^LZwimWr_D3}J%_LH2TNcJIfkE2^q$ z9}{YpE~{R`4#xhIyS%ggIlxGG#s7q(S=@YHPs}B|NLm-Kn*4Bw@YgtFz@{O~54dVI$&A;%%+P@jas0mt`iD zi>B75gjG>&y3X)!(l@%e^wBm!+TXs_%FgsX=8+)7tLo~1FZmue`1Lm6CPMZGwGAB+b_j5FPqTRW^|l&R{kiTBccQC*J5fM#wDFKMo*C? zNp5$1^0l+_8>xAYB~OwUTMSOwVhQ!FX;D^PQdM7`SJfMv@?qD&^bRO<7|QITz_Yf& z`BywYNn0kzEk2(&EpG9tyc*+Dh~$FPi)5JWnDt}pL1%N3C0%*(GKERq84r2MmFy74==RAVf&S9Se@Xn1MatSV2={yK-VOHJ^4`|7T?HEfw z(%xsW@Vx}5sj51y30fH&pXd52!~2rsjZJq06MPaJ;Seb{34%l37wSjRd;n@Xdq zOKAq2t2TlQFL-M*^fgEH?aTG`bdavwf8{}8Y`n$;rPDt~)AwF&6CXeU?^Rv>i{4IE zs_bkS7nS3Fu1g;!gx0_iPmtgwtcLxr9Rua8r$YmbX*R*zDFXd4q0b?P@;i;qW}pF^ z44C|bvc&@~Z=FH-{UPi?@(EJ&Y_TD)UNROR;c*NXNX_dlJF&i!!nki!26*FWKUM02)V9>Tys9ssRAEl7jLPSgcJFFbU3w3NVqf6mdJPvF%o~8=F3Z z4MIcw!|X@_6|TvKw9swJQ&`=f0XbH<`5%Dy0elZc2+B&5`Z)rthV`V(9b`6MY`MNaYM zJ_<-6o=ASW$o8a;^_1KoNeGkV0up-7m?o6jXW3`Ym@fb9kgr|rYJgx@GB<=%zMz!H zYK906=Jv2%=+wE*foBVC0)~2b??4NN7dvgp6&JGTf-(Xe7dr)%1Y_fWK?C^hWC^O6 z;znsAU#|raz8+X(Ol!mtuH+8)mw@Je(ByYMu>?$SV-9B<`wK#mug*~1q}Clqs&IEN z)7*X5DPL4>zeqXb-i6##GEn9APc*<+utGooi-oqZe@kHcZ>T(ywxp$u$`yJBdZr74 zyO-qMXLu-Fe*({g0%?975)xaa)!!cxC|xeGP)b3%%aSF@rIt~W?6l-L5ll8GMp8q; zo=Ko`Ph|f}P4O5o9EFc0>n+<%h10r+io`guZ}G0YvG#fbr^mB)y|%WW*qp1(JL% zunLa1wgs)&O$+yuz06)ZL-Kx~<&dvHgpEXeg8Y^{C^QdZy*DkY&lWhd~+-oZ-+=i zNM3%2v3Wej9{{LFy`ZZ@?zEmpeRei46K%%zolax%S--nb^I*6xMnRIjp?-vrBSW71 z`2a2vg7TITR&L_OHp$qy4G{o!CHahU3W%mQr+nGC_7xBoTh&ksWewdA2*1w*0(<^` zWAoG8QD=(eYf1y(?momeRe*O9Y;-QBK`LU+DSxB9#6hk-{&w0XECIxiPWc3ON_CaC z_$K^K5s8pBP{=M0YiMlj&jY+iLdlv9nCH6MO$*8A7rC%ARH7e5>_7s7Cy9)H`uDTF zSFgBcc(1BXADNv*8yh#nbKa|0jg1U~{g-dp{YN*tzvlm0 zq*T-3uMov`*3_88Wq8`S5M$Fx1T7-)`oVYy*n(S0xBWJ%ZpvIbB0s}8lFwIAAA^lV zp@b>uK0#^n6N-CN+mq9*M{mR=&M%;#`fIeT+!^qK2iEXFvYsSgh)9-r#BPLe9<8eK zD#Yb?)VBu?hnG3TU92iEkR&Qe3d4w;?nB=y;3X+`ETJSk<^AYFxbg+|>Mw?mpzas&ka8`<>Z8Nn%GA?nR&D=$>E; zFZ#?GDr>o;Fb$vNI{;zCABzI&B%Bn`oP zcUbD*AXVAP4rQi!>Y$(;JsAL8dG8I(D~gn)G^|9SHjmD4oGkBnczh9d^{1Mf>r4T^)Ai??^Uz0sSSz;z5+&hhhpj-59Z3N#F?l3 z0BQcGp}=m^f>`M&tOILkfPcdcIDnP>jOkIf5NH2GPu}mp1i_Jrw1LD|up1~P z6G4MFs~s4(ir9mD{Pp0bkTY>g2T|^Yy#3K*F+~2WA(O9QG=WLM{n3Lpu=Oa9D#Jr~ z@sSH^0quxf0({XrnqI#p-E;w1{rv{)72(z}pyZ1l*F6XxBI8Ukhu< z%J3}0JsMSEqV=>ft%y?R3`+12#FQ3nTS7SQv{ev6%0rmbssCqe12<2qhFK7i-&wz} zxbcFqu^MnruT+2%E;cr<1qjlL}zo~A`|$OX07 z2xpX8LH3|tnd1b(=dvUy$-UUZ?Atw0fsN}*v<9Npt~i-MIGf%5{M{36*vLgqSJ(gg zRoI;XlezM)F5`~kz6ttqdiUO9QtG0z?mP1OK5v^SRd)00MQ0rCwc&}rg0bmASl&+x z21Lpe3J0_DL|9s;az2OvH~4kMNEl9}0}cH90SZg8d?i>4ZeNjQ)GpzyAY>fiwZhmK z3n*dlK_9jaoV58C9|h^6?a>#xUoN8!-;^ymne@$LlvQwX)BpCna zz={HY&n;|V8GoH60dKttWWG?4b>Ep{UWT3c&qU}W`F`mv6NmMWrSJ*8-NMp`Wq2lz z#p?u|co$sGU38wTfwI)RU?42eXVUc?_|74>Va;bzfqVsf^Wnm~l+&iJeBDYIgDgpS8c4{IA{PP!X&yyOfZBx3bvrVJY* zUSr1L18>^~l$3wOmB!zRCgQSNm!y2a?8DPMPC}75Mgwep)wd+SAOWgjN7j!iGw3Un z;JdMcP;=`GgV|TGJ`bKaz8apui>9EAfcj*BKU_u7wTi|@GklJFeX;d4uJ4wln=gJ8 ztRBHXrARXl%wj}=m74V<=z`%C6=$U~HUDR0^T!Zo_r3K!ma+SqPNA#8S#bDuI$YfT zsm@a<{?NYq8_2e;K7kMk6w98o_IBkC z$`o(sKz~uh;0}HpdI|-{jsP{&%U0zPsdD+Ox2)bG9zi}4fiHTiXG~brUUuI~Jr}Na7dKsSBC(VB zmjTAcA5bdoz7qZG{2e+CUpU}W$)G8Q1K?t~eFFG8-Frfyu#d8y`kd zm>Ab?0t8o!fi*3-GK5jBQLukL-hE*qWAif+7F>H4>ceUsBFo^d%-c0ks+?{P7qAz; zrf_xd@;!lX36(#hLUVES1(hNaBgqTqL7egcND<9{!On4@6~fbz^EM0TNl4eqwvJ5C z~Evvesm9@AQ_zKc7#|wJQ?BLq3+1ZhqW6$JLw85&oyKoy;>R@ULw!dNX za;N{ETM7+7o1dmS=qrf5huxQx;hBXv;_MXY<$N2)#t#6Lnzvi%+D!13fYY03Gh7hf za5W%Pn=ZJ_6jS|B7wKM{uCc#BGF@1C7wKhHWn}mfgz{O`j^H97l?z|N2xjl)-j%L6 z?`55_Ne?I%%7OO&fw$-!J|K61mDjMK6_k!j9Dw^Xl<8QI*B07s_!I(spuM?-iZkDq z^1&%~->584U$Eg4; zX%9`n_@X_;qPO@b-Av-(CHE9+Rp^l$ckxd>1b6^D90rwd?9h98pnH^d%+tN;Es(v3 zC{Y^gMYn;7>7bVt90%rfIrC)%3Z7Pp3tMMc@GA-&S5(< zB>8gS>}tE<7qBR~GgXty53z#dY}?)DnJYlguWb!Gi8kJStgC?rLg>(qcZr%7{&gKL ze~_uzz`|dNdvM&-?dHreN;H?=+7?QsdqG+cGv?koWX5n5otX~#u)WM7|7ct=+i|QP0`Rhgz+G48M?ULFR3#zNq zvofo)g{j3eX4p%L<1<&pv(+~1w6bZl?4=W>Vtb*pIDT-vaLYW0AnqkAD_oTeDjr!} zJvKe(R)SlRnJd`8ZI3g_zBhF+FppJNE}f6Hv2^9qM<1!e?)om5Sv5b)9nXUwI1WD4^)-nbv^n8=u7{ls;{8`^dnV0k6!H(M&Cjux)j#`f(YQvJ^F6+=h1(Uz6kYVU@QcquZm?g zC4;gJ@2hGKWkgXd6`up!(W5AKK2ud*U_eC*6#>=&7>v#zC?w1VtRAolA~$5Wc#9zi zlOdC_fhv%`LedeAFR}L=Lv@Eaid}LHN=<;BHzOV+a-ASf2kezE*gcac$1THfJHoSq z$&-hOMQrQjfu6m99YNtB_mB_fBpQkn$uxd! z_fnfJ?DBznLC8bIllw$0fuZaZcI^4`IgPwB^wJCkE5lhaSJOU}Z$;mAb^$Y{1Y@h+A$El-yL|9~Jg$*NtjyL|aGJBcH`X0u_wKc=Wp^xxZ5I)r4^9F?B zYsf};jDIim;RlR@}Y+9&Iw~@a2nKO!dfqC*y);2B9&9s;G^i9 zNIX2N(I+tbY?F8=ZzoWjQVJW<|2`UiW0m*V^4TUU9k8UEP4gr8}V4XH0->QVeDK^BM3Wa zC%Qx-OS6s!7Cz!D-OiRjY)bh$!mDW$iRVjPa_^|{x^0@|3{8YdgU_>uS9ECbAuQuT zlemt{AIrznd0WX_H*eSTb`x*+uoDlOQVwX+j%ya@H3kw75lu=^!`jT@wdi+xdd?9x zItpQ*&g{B=_-o7ZhfLxS_A=VL__%~xEB*Y?M}T*2HqIBxlUfY8f3)a`tok@{G4mXA z%71GV^R!%vRHZk#bU$xDp*BU)D7R|%sOBpP!Y`aAfwj*uiRrv8;B6_jDT@%Uq`_Iu zx`Q>YM_9&OQ;M6gI(+@wFRVAF{Ap+R1KX_erfb?q4ut2q#9Q&Dh7~m4Nc?{nfopp#)nuO6;0>DhA}7hU$SN8dlqP3h z4tuKnt$s`0u4QhQ@L2V-rH{GFs~@jk;%Xf^??eqC7_JGpRVd?bN!u%#}VBraqXi*ouz zYGmYpd*j&4i*ovIE(x!+xr8q$*kW2wE*h`v{R;w#9*Xh_Y{Zgbac$)sApFWImW+wp MRTG{?LEp6h1OJk=ng9R* diff --git a/native/fsNotifier/linux/fsnotifier.h b/native/fsNotifier/linux/fsnotifier.h index a4ea27f9078f..4d8b28629be9 100644 --- a/native/fsNotifier/linux/fsnotifier.h +++ b/native/fsNotifier/linux/fsnotifier.h @@ -2,12 +2,15 @@ #pragma once -#define VERSION "20210416.1152" +#define VERSION "20210416.2304" #define _DEFAULT_SOURCE +#define _FILE_OFFSET_BITS 64 + #include #include +#include #include @@ -17,11 +20,11 @@ void message(const char *text); enum { LOG_ERR = 0, LOG_WARNING = 1, LOG_INFO = 2 }; void userlog(int priority, const char* format, ...); -#define CHECK_NULL(p, r) if (p == NULL) { userlog(LOG_ERR, "out of memory"); return r; } +#define CHECK_NULL(p, r) if ((p) == NULL) { userlog(LOG_ERR, "out of memory"); return r; } // variable-length array -typedef struct __array array; +typedef struct array_str array; array* array_create(int initial_capacity); int array_size(array* a); @@ -35,7 +38,7 @@ void array_delete_data(array* a); // poor man's hash table -typedef struct __table table; +typedef struct table_str table; table* table_create(int capacity); void* table_put(table* t, int key, void* value); @@ -52,7 +55,8 @@ enum { }; bool init_inotify(); -void set_inotify_callback(void (* callback)(const char*, int)); + +void set_inotify_callback(void (*callback)(const char *, uint32_t)); int get_inotify_fd(); int watch(const char* root, array* mounts); void unwatch(int id); diff --git a/native/fsNotifier/linux/inotify.c b/native/fsNotifier/linux/inotify.c index 9f7a0d80b0fa..27ed17daba3d 100644 --- a/native/fsNotifier/linux/inotify.c +++ b/native/fsNotifier/linux/inotify.c @@ -4,7 +4,6 @@ #include #include -#include #include #include #include @@ -17,11 +16,11 @@ #define DEFAULT_SUBDIR_COUNT 5 -typedef struct __watch_node { +typedef struct watch_node_str { int wd; - struct __watch_node* parent; + struct watch_node_str* parent; array* kids; - int path_len; + unsigned int path_len; char path[]; } watch_node; @@ -29,7 +28,7 @@ static int inotify_fd = -1; static int watch_count = 0; static table* watches; static bool limit_reached = false; -static void (* callback)(const char*, int) = NULL; +static void (* callback)(const char*, uint32_t) = NULL; #define EVENT_SIZE (sizeof(struct inotify_event)) #define EVENT_BUF_LEN (2048 * (EVENT_SIZE + 16)) @@ -83,14 +82,14 @@ static void read_watch_descriptors_count() { userlog(LOG_ERR, "can't read from %s", WATCH_COUNT_NAME); } else { - watch_count = atoi(str); + watch_count = (int)strtol(str, NULL, 10); } fclose(f); } -void set_inotify_callback(void (* _callback)(const char*, int)) { +void set_inotify_callback(void (* _callback)(const char*, uint32_t)) { callback = _callback; } @@ -100,9 +99,9 @@ int get_inotify_fd() { } -#define EVENT_MASK IN_MODIFY | IN_ATTRIB | IN_CREATE | IN_DELETE | IN_MOVE | IN_DELETE_SELF | IN_MOVE_SELF +#define EVENT_MASK (IN_MODIFY | IN_ATTRIB | IN_CREATE | IN_DELETE | IN_MOVE | IN_DELETE_SELF | IN_MOVE_SELF) -static int add_watch(int path_len, watch_node* parent) { +static int add_watch(unsigned int path_len, watch_node* parent) { int wd = inotify_add_watch(inotify_fd, path_buf, EVENT_MASK); if (wd < 0) { if (errno == EACCES || errno == ENOENT) { @@ -147,7 +146,7 @@ static int add_watch(int path_len, watch_node* parent) { } node = malloc(sizeof(watch_node) + path_len + 1); - CHECK_NULL(node, ERR_ABORT); + CHECK_NULL(node, ERR_ABORT) memcpy(node->path, path_buf, path_len + 1); node->path_len = path_len; node->wd = wd; @@ -157,9 +156,9 @@ static int add_watch(int path_len, watch_node* parent) { if (parent != NULL) { if (parent->kids == NULL) { parent->kids = array_create(DEFAULT_SUBDIR_COUNT); - CHECK_NULL(parent->kids, ERR_ABORT); + CHECK_NULL(parent->kids, ERR_ABORT) } - CHECK_NULL(array_push(parent->kids, node), ERR_ABORT); + CHECK_NULL(array_push(parent->kids, node), ERR_ABORT) } if (table_put(watches, wd, node) == NULL) { @@ -189,7 +188,7 @@ static void rm_watch(int wd, bool update_parent) { userlog(LOG_INFO, "inotify_rm_watch(%d:%s): %s", node->wd, node->path, strerror(errno)); } - for (int i=0; ikids); i++) { + for (int i = 0; i < array_size(node->kids); i++) { watch_node* kid = array_get(node->kids, i); if (kid != NULL) { rm_watch(kid->wd, false); @@ -197,7 +196,7 @@ static void rm_watch(int wd, bool update_parent) { } if (update_parent && node->parent != NULL) { - for (int i=0; iparent->kids); i++) { + for (int i = 0; i < array_size(node->parent->kids); i++) { if (array_get(node->parent->kids, i) == node) { array_put(node->parent->kids, i, NULL); break; @@ -211,8 +210,8 @@ static void rm_watch(int wd, bool update_parent) { } -static int walk_tree(int path_len, watch_node* parent, bool recursive, array* mounts) { - for (int j=0; jd_name); + unsigned int name_len = strlen(entry->d_name); memcpy(path_buf + path_len + 1, entry->d_name, name_len + 1); if (entry->d_type == DT_UNKNOWN) { @@ -289,7 +288,7 @@ int watch(const char* root, array* mounts) { recursive = false; } - int path_len = strlen(root); + size_t path_len = strlen(root); if (root[path_len - 1] == '/') { --path_len; } @@ -337,11 +336,11 @@ static bool process_inotify_event(struct inotify_event* event) { bool is_dir = (event->mask & IN_ISDIR) == IN_ISDIR; userlog(LOG_INFO, "inotify: wd=%d mask=%d dir=%d name=%s", event->wd, event->mask & (~IN_ISDIR), is_dir, node->path); - int path_len = node->path_len; + unsigned int path_len = node->path_len; memcpy(path_buf, node->path, path_len + 1); if (event->len > 0) { path_buf[path_len] = '/'; - int name_len = strlen(event->name); + unsigned int name_len = strlen(event->name); memcpy(path_buf + path_len + 1, event->name, name_len + 1); path_len += name_len + 1; } @@ -358,7 +357,7 @@ static bool process_inotify_event(struct inotify_event* event) { } if (is_dir && event->mask & (IN_DELETE | IN_MOVED_FROM)) { - for (int i=0; ikids); i++) { + for (int i = 0; i < array_size(node->kids); i++) { watch_node* kid = array_get(node->kids, i); if (kid != NULL && strncmp(path_buf, kid->path, kid->path_len) == 0) { rm_watch(kid->wd, false); @@ -379,10 +378,10 @@ bool process_inotify_input() { return false; } - int i = 0; + ssize_t i = 0; while (i < len) { - struct inotify_event* event = (struct inotify_event*) &event_buf[i]; - i += EVENT_SIZE + event->len; + struct inotify_event *event = (struct inotify_event *) &event_buf[i]; + i += (int)EVENT_SIZE + event->len; if (event->mask & IN_IGNORED) { continue; diff --git a/native/fsNotifier/linux/main.c b/native/fsNotifier/linux/main.c index 2f421ff7c782..05588cf3815d 100644 --- a/native/fsNotifier/linux/main.c +++ b/native/fsNotifier/linux/main.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include @@ -42,9 +41,9 @@ static bool update_roots(array* new_roots); static void unregister_roots(); static bool register_roots(array* new_roots, array* unwatchable, array* mounts); static array* unwatchable_mounts(); -static void inotify_callback(const char* path, int event); +static void inotify_callback(const char* path, uint32_t event); static void report_event(const char* event, const char* path); -static void output(const char* format, ...); +static void output(const char* line, bool flush); static void check_missing_roots(); static void check_root_removal(const char*); @@ -78,19 +77,17 @@ int main(int argc, char** argv) { if (roots != NULL && init_inotify()) { set_inotify_callback(&inotify_callback); - if (!self_test) { - if (!main_loop()) { - rv = 3; - } - } - else { + if (self_test) { run_self_test(); } + else if (!main_loop()) { + rv = 3; + } unregister_roots(); } else { - output("GIVEUP\n"); + output("GIVEUP", true); rv = 2; } close_inotify(); @@ -102,7 +99,8 @@ int main(int argc, char** argv) { void message(const char *text) { - output("MESSAGE\n%s\n", text); + output("MESSAGE", false); + output(text, true); } @@ -172,14 +170,12 @@ static bool main_loop() { static int read_input() { char* line = read_line(stdin); - if (line == NULL || strcmp(line, "EXIT") == 0) { return 0; } - - if (strcmp(line, "ROOTS") == 0) { + else if (strcmp(line, "ROOTS") == 0) { array* new_roots = array_create(20); - CHECK_NULL(new_roots, ERR_ABORT); + CHECK_NULL(new_roots, ERR_ABORT) while (true) { line = read_line(stdin); @@ -190,17 +186,18 @@ static int read_input() { break; } else { - int l = strlen(line); + size_t l = strlen(line); if (l > 1 && line[l-1] == '/') line[l-1] = '\0'; - CHECK_NULL(array_push(new_roots, strdup(line)), ERR_ABORT); + CHECK_NULL(array_push(new_roots, strdup(line)), ERR_ABORT) } } return update_roots(new_roots) ? ERR_CONTINUE : ERR_ABORT; } - - userlog(LOG_WARNING, "unrecognised command: %s", line); - return ERR_CONTINUE; + else { + userlog(LOG_WARNING, "unrecognised command: '%s'", line); + return ERR_CONTINUE; + } } @@ -209,14 +206,8 @@ static bool update_roots(array* new_roots) { unregister_roots(); - if (array_size(new_roots) == 0) { - output("UNWATCHEABLE\n#\n"); - array_delete(new_roots); - return true; - } - else if (array_size(new_roots) == 1 && strcmp(array_get(new_roots, 0), "/") == 0) { // refuse to watch the entire tree - output("UNWATCHEABLE\n/\n#\n"); - userlog(LOG_INFO, "unwatchable: /"); + if (array_size(new_roots) == 0 || (array_size(new_roots) == 1 && strcmp(array_get(new_roots, 0), "/") == 0)) { + output("UNWATCHEABLE\n#", true); array_delete_vs_data(new_roots); return true; } @@ -231,13 +222,11 @@ static bool update_roots(array* new_roots) { return false; } - output("UNWATCHEABLE\n"); - for (int i=0; iid); free(root->path); free(root); - }; + } } static bool register_roots(array* new_roots, array* unwatchable, array* mounts) { - for (int i=0; i= 0 || id == ERR_MISSING) { watch_root* root = malloc(sizeof(watch_root)); - CHECK_NULL(root, false); + CHECK_NULL(root, false) root->id = id; root->path = strdup(new_root); - CHECK_NULL(root->path, false); - CHECK_NULL(array_push(roots, root), false); + CHECK_NULL(root->path, false) + CHECK_NULL(array_push(roots, root), false) } else if (id == ERR_ABORT) { return false; } else if (id != ERR_IGNORE) { userlog(LOG_WARNING, "watch root '%s' cannot be watched: %d", unflattened, id); - CHECK_NULL(array_push(unwatchable, strdup(unflattened)), false); + CHECK_NULL(array_push(unwatchable, strdup(unflattened)), false) } } @@ -320,7 +309,7 @@ static bool is_watchable(const char* fs) { // don't watch special and network filesystems return !(strncmp(fs, "dev", 3) == 0 || strcmp(fs, "proc") == 0 || strcmp(fs, "sysfs") == 0 || strcmp(fs, MNTTYPE_SWAP) == 0 || (strncmp(fs, "fuse", 4) == 0 && strcmp(fs + 4, "blk") != 0 && strcmp(fs + 4, ".osxfs") != 0) || - strcmp(fs, "cifs") == 0 || strcmp(fs, MNTTYPE_NFS) == 0); + strcmp(fs, "cifs") == 0 || strcmp(fs, MNTTYPE_NFS) == 0|| strcmp(fs, "9p") == 0); } static array* unwatchable_mounts() { @@ -334,13 +323,13 @@ static array* unwatchable_mounts() { } array* mounts = array_create(20); - CHECK_NULL(mounts, NULL); + CHECK_NULL(mounts, NULL) struct mntent* ent; while ((ent = getmntent(mtab)) != NULL) { userlog(LOG_INFO, "mtab: %s : %s", ent->mnt_dir, ent->mnt_type); if (strcmp(ent->mnt_type, MNTTYPE_IGNORE) != 0 && !is_watchable(ent->mnt_type)) { - CHECK_NULL(array_push(mounts, strdup(ent->mnt_dir)), NULL); + CHECK_NULL(array_push(mounts, strdup(ent->mnt_dir)), NULL) } } @@ -349,7 +338,7 @@ static array* unwatchable_mounts() { } -static void inotify_callback(const char* path, int event) { +static void inotify_callback(const char* path, uint32_t event) { if (event & (IN_CREATE | IN_MOVED_TO)) { report_event("CREATE", path); report_event("CHANGE", path); @@ -367,7 +356,7 @@ static void inotify_callback(const char* path, int event) { check_root_removal(path); } else if (event & IN_UNMOUNT) { - output("RESET\n"); + output("RESET", true); } } @@ -386,36 +375,27 @@ static void report_event(const char* event, const char* path) { } #pragma clang diagnostic pop - fputs(event, stdout); - fputc('\n', stdout); - fwrite(copy, (p - copy), 1, stdout); - fputc('\n', stdout); + output(event, false); + output(copy, true); if (copy != path) { free(copy); } - - fflush(stdout); } -static void output(const char* format, ...) { - if (self_test) { - return; +static void output(const char* line, bool flush) { + fputs(line, stdout); + fputc('\n', stdout); + if (flush) { + fflush(stdout); } - - va_list ap; - va_start(ap, format); - vprintf(format, ap); - va_end(ap); - - fflush(stdout); } static void check_missing_roots() { struct stat st; - for (int i=0; iid < 0) { char* unflattened = UNFLATTEN(root->path); @@ -430,7 +410,7 @@ static void check_missing_roots() { } static void check_root_removal(const char* path) { - for (int i=0; iid >= 0 && strcmp(path, UNFLATTEN(root->path)) == 0) { unwatch(root->id); diff --git a/native/fsNotifier/linux/util.c b/native/fsNotifier/linux/util.c index 433bda3d3d2b..bfc995a0012c 100644 --- a/native/fsNotifier/linux/util.c +++ b/native/fsNotifier/linux/util.c @@ -9,7 +9,7 @@ #define REALLOC_FACTOR 2 -struct __array { +struct array_str { void** data; int size; int capacity; @@ -101,7 +101,7 @@ void array_delete_vs_data(array* a) { void array_delete_data(array* a) { if (a != NULL) { - for (int i=0; isize; i++) { + for (int i = 0; i < a->size; i++) { if (a->data[i] != NULL) { free(a->data[i]); } @@ -111,7 +111,7 @@ void array_delete_data(array* a) { } -struct __table { +struct table_str { void** data; int capacity; }; @@ -170,11 +170,11 @@ void table_delete(table* t) { static char input_buf[INPUT_BUF_LEN]; char* read_line(FILE* stream) { - char* retval = fgets(input_buf, INPUT_BUF_LEN, stream); - if (retval == NULL || feof(stream)) { + char* result = fgets(input_buf, INPUT_BUF_LEN, stream); + if (result == NULL || feof(stream)) { return NULL; } - int pos = strlen(input_buf) - 1; + size_t pos = strlen(input_buf) - 1; if (input_buf[pos] == '\n') { input_buf[pos] = '\0'; }