From 7163a25b105921e4cf94474f03a5b8553ceec5c8 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 16 Apr 2021 12:21:12 +0200 Subject: [PATCH] [vfs] updating in Linux/WSL `fsnotifier` Dropping `syslog(3)` use; forwarding errors and warnings to the IDE via `stderr` GitOrigin-RevId: c981356950a0ac3cdcd60990a714f8e7e7220496 --- bin/linux/fsnotifier | Bin 26636 -> 26452 bytes bin/linux/fsnotifier64 | Bin 32864 -> 28416 bytes bin/win/fsnotifier-wsl | Bin 32864 -> 28416 bytes native/fsNotifier/linux/fsnotifier.h | 9 ++- native/fsNotifier/linux/inotify.c | 38 ++++------- native/fsNotifier/linux/main.c | 95 +++++---------------------- native/fsNotifier/linux/make.sh | 9 +-- native/fsNotifier/linux/util.c | 16 +---- 8 files changed, 42 insertions(+), 125 deletions(-) diff --git a/bin/linux/fsnotifier b/bin/linux/fsnotifier index 9ec6dc70e1151dc9291a79a8dfc6540713290ac5..94007d7c95db1b6538eb5e88c2bdb3657c125c81 100755 GIT binary patch delta 9577 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 literal 26636 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 MgL14yq*=HB2ZG-JcmMzZ diff --git a/bin/linux/fsnotifier64 b/bin/linux/fsnotifier64 index 19b5270363d3124921b21e23d41f3927a65b3247..60861bc20576d030ff21f2d2c2d758e911b91a23 100755 GIT binary patch literal 28416 zcmeHw4|r77weOxu0uf^-0@kQlhB9cVkYo@sK_WAdkTW`9gdp514#Q*uQ#8j8Q>FpeoG$t$p^MoC%rt z?)&q-_r34q@MYH7zrFU_Yp=cb+WVY+&f%UK_X4xY#N=US*E32DjCF8G|7EOqHBSnx zf}PJC>~c1NjRKO3KL^hts-H=^#;j*ZnlJcrK&jkjk-ypOK#I~1B9N>fl1dGUQn{hS zAx?GLUZ^J}Wkq_L%H`3iNV6gbrI2=Ta?RH`VUkL|bbUG-8YoT#)h^J>Nop)dwkcYq z=NH|smy@)K41nYCRib4=FER&}vx;(7QBKkU!7iz^C)tGlc9Q^39T~Kmrx=rzc>nSu;z+!O|JL-Q%GMnY4D%QkJ~r$&IU@@cOmm?|Xk$U!2#!Y*82KO*)V~ z;-Q21g}M0obfhVtx65Q@?WQ6#VWs$^W9sD(PH0@}Evoz^F5ObkF#LufV5}i6PcO-W zcY|RhetQ<&ng!pQ1@Fy*|1AryX2Anl^nW%B|M^+?cV*!($$~$f1^;hZ@TFPm-H?U< z+gb3MEOORm;ok&)EAoaPjQ~dK-ve3j=d$3(vf!t);5TH!tFp9~m$TsKXTc|D zk-s+!e{&Z6<}CO%S>#`ug@1Jx{;^qbPZl}uEc}&O_;a)HKMwv2Sutz(I&j9AjNku+ zbHcla;YopS8iq5(Lm!2|S*)?KDH>kGTK(RJhCnN842JwIEF5WV@im8-uPGSz6U>3o zdKPF2MgooNJ*~~2b>4_?4Ga65{JsbkZ)ytqz}FDq#T%j_DijGefhE%167jc0SffAK z$QoDsBVp!~{H;x>&*Sm8wzdR45aEpkf-PJf5*Cc2R45wp@!v3O_BZ>WMk7~@L6VT% ztcxQxLf*(4My=5GZh+*p+JTk;YaM6~R{EWK|FHS|grjFYK_kG1MApiJ;A`em|>qyXMXJ%qX3i zKC=&&4m~8GyUh30so2tm;Ov^ zESfXrA^n+fIge7F^k>4$2oOi{N(Vn1jbEV(Pg@PRoU?I?1EXfXgvVdCLtr44OVx8t^e`l(97ioMNgxLI%7*f}m{%937lK z+6{PN8fEM|2Hax6yA3$`hddrN;Kuo2lK~$mnL#%ja9V@OV~YX5NP?i-4fw?dyw`vi z8}NMw{1O8`V8AK%%j19nzf6LlhYh%K@unH@%MJX;4ER?K_$dQE(SS1%pUFq820Y(@ zPcq;|2K;LVyx4$GHsDqRZZqH|27HPEFE`*<81M=Mex(6-7;svP$wM*VQzZymXTZO1 zz?U2Fs|@%`13t}wpF913Yk^NKU;SK(eUPuj^O83)rgZj3%&7q-wmZL%E0((EZNRB1 zNAPQz=)f7J*HB*aa00X}xJ*9Ify@jWLM`;Sl$xS@HgVGd= zlifW145cXqC);`Y2};wjN``p)XOyOpn_S7$KcqB;+GHJ1f1lD6Vv`P@et^;xT9f5G z{cTE9NKIOK`dgHyP?{{_=~hZp2u(7c{wAd@lsz(iAe2TX=dNr72VhkTcJuTMO4HPuZ0G5(Q<_3$GQ`tgqcnxc zl4 z_bE-GE_v)Uwf}8OTPb~*r{APBg|_4XPrpKG3Teq+p8h?hCsTS0Pyde66vC35czOq= zDRd>fdHNYjQ^-oT^Yjyxrcjj(@$}CqO(80|lBa)2X$norI;6>;?H{_-mv2|px0TqD zV|Deey}i~M4yNqgwZ%?kZ|^wx@kO7w89Uxh{C$n3mWdsZz*zV8b_6P=ihd*Gwi84{ z;=CRLQimJ6`x=LsX*?u2|Ggh^q8?LreKc3ubt*?O^(!x*iCmbLFj`0$UY_c2ueuy< zV9{|)74;qMTQG8e-uXaGEBel=kN5{47}8;>bD8rN=Tc|=66M|x6b!>y%DiE{62Cn^ zk?TN9)I(YTWHxJUrC0_d@F;4OQv_Sl!HRL_=q4yJtrXV3HTU5MYF zlfVY^dfuX}xyZ5~OrC)9{dwMn(D->X&J&do(?e$vbT9`dj91x^Yd^7rgD-0PQDF~_ z0c`_3S5fn(BbyAp0VPxn#*W^|Klg+#K^@N*GS*&|i+pD3*o5C6(nYK0<@$PPajRVk zaf-SpK?z0OtBrdUde^-leR^95=V|54viUVUfR=cBqp zb31!2u48WBC+f$l1GER}2Ntc10D>iVF|e(3TX#VmU-4DjWr%9A&o*L1vM(RocrDjF?8NaS*@ z)hZ11mi-m`i|(#!n^pS>EY{iE_QVaH;EwpwwA*fkxV^9j>}%=Rg$SXjeTixF9Nh3{ zP&whh1fH;S@Q{||U}Qm}5&-W#g&S}enyti1_qff*TasJ^-(S=Tr7RtfaBa0|h@>68 zmd=^TN#2bTy4%zsAiC7ugX74-_d!dy`ktcpYhA#(X4ARws;6-uL@So+j@8vA7uos` z?jn|sGs1VS71~}Wn(z|pkDWGe_(^O}O7ZP!pOaG-{eFLL4jX(BX1I&w7NIh!6P%JeE zgl*nZx*oDo;LysrF3~4l@i{j832gwgm{YB`<-6kJZHdKDSPrta;O_AQK<{anU^47! z5{UvNlB=Ns45S6&vK_sdHn()X0SgRXk+{kU=TE_3DV7d?Mf)}?PfUUsJG%IHz-f+q z9ukb9-4Os%(tEK`4EYe%kS>SMNUPM@-E z;&iKR3#U76y`YL(Z!1?+x2?jB_Bq@*Q`)O6E<}{*hFHq9{Xq=9=e~y@#ZtYmGu3lH zKdt$P62D-Ff}u(4i5=*2raeg=yS)gf$sT&u%&n4iOR3i-8yN{Y}W_n;_E6EIo> z6^mcf45Vian6*z&!YX;F`|k5F#s>i1+Gi-7Av3eOcvbC?+yY(hH9!U*w@hR_UN5Or zKXa*PPWHD$<;Zy6b8hv7=D{+D_uSxQP8=upn4`r#56p8goaRO^=;_Ak$vqA;iebo~ z(59or$vq6=%hK^f=!izWT?_4_2(ILs8-c+!Cp5|lPWR6Q@!Sla$~||rpv{HJ#fb{76 ztUZ~J?6l*=t5$#=9^zK_YxB@_nCeC#TK@^0-@BVMH7p)z{4462o;%^3_THo&hUqrU z&#@0mTj=o;nq{%RCi&p(fq4fMlo3MJ?$6Zps@Nl+=bGQ zARRkpicUlVabY=Dmx*_2L?E!;`I#PqZ@`e~nS?Q&7=<6L8XCLQejXd!AVv?PXE3HY zG#cD|R8S}9Q|qWca!<^wgH=Q84JCe8zP5}Q;u|oA5OObtGMu{)v4M)e2n|q*W7m^} z_)=V6EG$Y?LJ{d9yJ;?tuP92?0;C|`cbxQ&Bod1N?0_ha{_#_es)@yd?MIx=(h-4i z6Uzj6zW_Z1t`K0W0B<006~G-7B&e!3U1(XNRj}3y)``TrPJlCXuyZQFWFCIpU3cat zRwLI9=O52=BRdm!2p~tWAH*Cp`179Mav#v9V<1qEy$(Ys{W<9OgP){Qu?lnavYvdD z)H~-FC@VUr(}(i*gNcifnQSxb7JUR|^bT8yz~)l-lF0All!kZ=O!k9rwZT^GRyWx4 z2d^FKt;X)eoe;z)7PtC7{K}1}9>2|Ii}jgE2+6DLvvgh0YkCiX@O)_MQuo+D#H8fz z3Yi?1hxWKFHOCUsd7}69*&qjkob4N?voaOpqL1{@C7kxO1t#v~Q%sSi<2UGiXsf74 zwIj&r>~*VOST;Te#u|HS@Dds?v>u}T-N<)V?zME?$2;k0wR%Qt=Z)PBuck2a4E&5% z0uvz=Zsu0s)qcvM$n%L^)JQY|8K1b-zoDHJe=p|8mq;jQ`PtxdXumX3?KZy%z? z;BuqVo!_MXKFMVrrJ3Oya2p7K-xQI>KU}{&cKXZ6lGy2#J5Dwy$(D}I=(gDD)0U1O zKyKoTA)|kyCZW#jr$`;dPpAX;Ax+-KvXI6|XETZ>so6b{kM%Y>8+c?L0gM)+I-{^9weo386J%M2CQcq&xf^~EH0uZy#6$&b~Y|EK5Ci?Nh z%9GIxspA?xrXjl5J@r$?)Yp$y;G0-2%ysB>-hY&W*)`=z>WhbM0Nhi*!0KcIFupM1 z_I^t%fE=*qrCH-(MJ+U)r?j7ZM7dS(%|)yDtauyEl*whsQYp*Cc7|gK^*;)0Ij{&h z#3H!Kkow&;6Nl#w_0Mex)$u#?wFri%62DHHLp8vcXX-Wm8*0+FWBEX{Jtp?vTMfd< zUQ3tMX>CwZ&AS1txE8psXJxgFTN9xd>9CSYWA6Di^#;-rByh3E*HP#5!b?$jFr>Zp zA+#xhM^8aXINB@o;Z@LwmY2_9+K8PlwsiKQnLU3;j`nMEzh5J%{hSI`XdgjX;y%>B zgOs3>G*`Bv``3~{}27+lO5UBtK(;`Zjv#wo%?YVhKC)eM43zrA^r1#Caa{V)GkTn(yK0ib3CGprBp{oqkF6^_|HcZ1U9F*z;&Wj8Jh4pDdIK|b6s)|*luMQFywh!b&H z>8iKo%c};>gf4~g=WA^rkg=3ls$^Z8vYlCrSP_DfV)@ro;T77G;7Sz3RNM-<64Pxs z6I0N31dmkm5hxLN+pOxoDeM?yRjeJ0%{t3(d%535T!|@E7y@B1x(@yvA#FQ1#>(wj zw4_k4IkHrnFYBRR5|#X!SP^1UgV)s9k5qr>L+8|^3w^1c!(Io3z2#Ov*S>`A&i?xe zVNT1o*RasEpKz-mYjg(0uhyaHteqHIAQ7V1Lypj z7o2bvOUFjCuG&|vzURiQb?GRYFMxmNY2dgvFIeb1?(Dyh>L{bW44{d;oXX4Xadq)L zCDx0X5EmxS*lyF{jWs4(Do&Y$&WP9wwDGw1Lj^U|sD2SplG+)XbxxhJZ2UGv@%B*# z`BZ^efK5S$yDK`5-wB~WrnfKh?}-$;k$@X`gCqTxZ8c*Ha_8hmch*otPHNwKpL}jN zspT8sL6)XrD&KzBSZ3+`20Ai9tC?8pn@f(s+c_1>8*P+AOODKV{ zbztyP>SA#NO%}1gqPeLM>HGsaLI2$O9yOw>0PTm_?61gT$!A70)@Y0eu@8#lRS#9b zTMpj~Z^69;rcH;9$jaY2jZS*jWa%h|Ut;N9WB-tkJ>%k;+aqyfwdeqt-h$~z>B^l> z>om7XbNjS~m7iI9)TqatyR@&;P>$`Hkf@e@>f%evZzI4u zF@%a$+~V*ZP`Z|wL>&7_+Xf>!WA_xWNJW2)2Od{f5LatQwVm&x2~?u%`M-G`tV_Y* zewh}*F>cpfo9O@sJTb)cwp^?0dA>8gE|<$r4b*g=a3dh$?g{j^bbJKIcgAaTf64D; zOvHUEtjl?LvcIUU#F~zx(}TOwCeB4SE-W3-p^%F&+WwS7{$knq3m{mbO=#@K(o4^J z7Fm_J13}ev-7iaE?fA`HU8~p0F1VtN^-oZIb;Wv2{_#6B9-`01@50???Yo$dxHP(_ zshOxC$xBv1oVFOO7%u-6?Z#X`58W(RA|;q?2hCy;Sv(Ya`e+e3Y`oN=U)yJqMyW`i zwh`VOud*VIJ1C=;CpV&w<%SiN@K3sFR&3>SJ%T{I>gYA(r09+v{kRm-+R#VjqyGl8 z;jZ?qj2OySJoizAk5`RGMd-Ryxg-W9fJa zpwhL~Mi(@MuLDlkpIzu!-Hv`B3p-ClipfvMVK$&E7ON=!W0DzxR?m^n_LPdqbO6KS z7~*5{4rFR4{tnv~$G*5Aa$f8Uv!#=shC)4MXjo!GMsxJl$2OGYp*v{@r^|;$#NJ6- z9qOaO+ChfUr)%I7oL#jvBk@*gFCC$o;?83ADz_TWSN6`QvB^mFX|DL)Md+63SM*C$ zdg2S~QkS{_XfGlceCc+=kXQy|?wCo Bq8-Abyr^D&4@ylHGGS~-SV*@>KZ-aS+# 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 aIFTdkm5dkSWTf)XHR>EW!wL*bvi|@Y@9M<> literal 32864 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 Bq8-Abyr^D&4@ylHGGS~-SV*@>KZ-aS+# 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 aIFTdkm5dkSWTf)XHR>EW!wL*bvi|@Y@9M<> literal 32864 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 #include #include @@ -10,6 +13,8 @@ // messaging and logging 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; } diff --git a/native/fsNotifier/linux/inotify.c b/native/fsNotifier/linux/inotify.c index 9b15393faaa4..9f7a0d80b0fa 100644 --- a/native/fsNotifier/linux/inotify.c +++ b/native/fsNotifier/linux/inotify.c @@ -1,30 +1,15 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. #include "fsnotifier.h" #include #include -#include +#include #include #include #include #include #include -#include #include @@ -66,7 +51,6 @@ bool init_inotify() { } return false; } - userlog(LOG_DEBUG, "inotify fd: %d", get_inotify_fd()); read_watch_descriptors_count(); if (watch_count <= 0) { @@ -122,7 +106,7 @@ static int add_watch(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) { - userlog(LOG_DEBUG, "inotify_add_watch(%s): %s", path_buf, strerror(errno)); + userlog(LOG_INFO, "inotify_add_watch(%s): %s", path_buf, strerror(errno)); return ERR_IGNORE; } else if (errno == ENOSPC) { @@ -136,13 +120,13 @@ static int add_watch(int path_len, watch_node* parent) { } } else { - userlog(LOG_DEBUG, "watching %s: %d", path_buf, wd); + userlog(LOG_INFO, "watching %s: %d", path_buf, wd); } watch_node* node = table_get(watches, wd); if (node != NULL) { if (node->wd != wd) { - userlog(LOG_ERR, "table error: corruption at %d:%s / %d:%s)", wd, path_buf, node->wd, node->path); + userlog(LOG_ERR, "table error: corruption at %d:%s / %d:%s / %d", wd, path_buf, node->wd, node->path, watch_count); return ERR_ABORT; } else if (strcmp(node->path, path_buf) != 0) { @@ -199,10 +183,10 @@ static void rm_watch(int wd, bool update_parent) { return; } - userlog(LOG_DEBUG, "unwatching %s: %d (%p)", node->path, node->wd, node); + userlog(LOG_INFO, "unwatching %s: %d (%p)", node->path, node->wd, node); if (inotify_rm_watch(inotify_fd, node->wd) < 0) { - userlog(LOG_DEBUG, "inotify_rm_watch(%d:%s): %s", node->wd, node->path, strerror(errno)); + userlog(LOG_INFO, "inotify_rm_watch(%d:%s): %s", node->wd, node->path, strerror(errno)); } for (int i=0; ikids); i++) { @@ -231,7 +215,7 @@ static int walk_tree(int path_len, watch_node* parent, bool recursive, array* mo for (int j=0; jd_type == DT_UNKNOWN) { struct stat st; if (stat(path_buf, &st) != 0) { - userlog(LOG_DEBUG, "(DT_UNKNOWN) stat(%s): %d", path_buf, errno); + userlog(LOG_INFO, "(DT_UNKNOWN) stat(%s): %d", path_buf, errno); continue; } if (!S_ISDIR(st.st_mode)) { @@ -351,7 +335,7 @@ static bool process_inotify_event(struct inotify_event* event) { } bool is_dir = (event->mask & IN_ISDIR) == IN_ISDIR; - userlog(LOG_DEBUG, "inotify: wd=%d mask=%d dir=%d name=%s", event->wd, event->mask & (~IN_ISDIR), is_dir, node->path); + 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; memcpy(path_buf, node->path, path_len + 1); diff --git a/native/fsNotifier/linux/main.c b/native/fsNotifier/linux/main.c index faa6b6ae8424..2f421ff7c782 100644 --- a/native/fsNotifier/linux/main.c +++ b/native/fsNotifier/linux/main.c @@ -1,9 +1,9 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. #include "fsnotifier.h" #include -#include +#include #include #include #include @@ -12,23 +12,12 @@ #include #include #include -#include #include -#define LOG_ENV "FSNOTIFIER_LOG_LEVEL" -#define LOG_ENV_DEBUG "debug" -#define LOG_ENV_INFO "info" -#define LOG_ENV_WARNING "warning" -#define LOG_ENV_ERROR "error" -#define LOG_ENV_OFF "off" - #define USAGE_MSG \ - "fsnotifier - IntelliJ IDEA companion program for watching and reporting file and directory structure modifications.\n\n" \ - "fsnotifier utilizes \"user\" facility of syslog(3) - messages usually can be found in /var/log/user.log.\n" \ - "Verbosity is regulated via " LOG_ENV " environment variable, possible values are: " \ - LOG_ENV_DEBUG ", " LOG_ENV_INFO ", " LOG_ENV_WARNING ", " LOG_ENV_ERROR ", " LOG_ENV_OFF "; default is " LOG_ENV_WARNING ".\n\n" \ - "Use 'fsnotifier --selftest' to perform some self-diagnostics (output will be logged and printed to console).\n" + "fsnotifier - IntelliJ Platform companion program for watching and reporting file and directory structure modifications.\n\n" \ + "Use 'fsnotifier --selftest' to perform some self-diagnostics (output will be printed to console).\n" #define HELP_MSG \ "Try 'fsnotifier --help' for more information.\n" @@ -44,10 +33,8 @@ typedef struct { static array* roots = NULL; -static int log_level = 0; static bool self_test = false; -static void init_log(); static void run_self_test(); static bool main_loop(); static int read_input(); @@ -82,13 +69,7 @@ int main(int argc, char** argv) { } } - init_log(); - if (!self_test) { - userlog(LOG_INFO, "started (v." VERSION ")"); - } - else { - userlog(LOG_INFO, "started (self-test mode) (v." VERSION ")"); - } + userlog(LOG_INFO, "fsnotifier self-test mode (v." VERSION ")"); setvbuf(stdin, NULL, _IONBF, 0); @@ -116,63 +97,29 @@ int main(int argc, char** argv) { array_delete(roots); userlog(LOG_INFO, "finished (%d)", rv); - closelog(); - return rv; } -static void init_log() { - int level = LOG_WARNING; - - char* env_level = getenv(LOG_ENV); - if (env_level != NULL) { - if (strcmp(env_level, LOG_ENV_DEBUG) == 0) level = LOG_DEBUG; - else if (strcmp(env_level, LOG_ENV_INFO) == 0) level = LOG_INFO; - else if (strcmp(env_level, LOG_ENV_WARNING) == 0) level = LOG_WARNING; - else if (strcmp(env_level, LOG_ENV_ERROR) == 0) level = LOG_ERR; - } - - if (self_test) { - level = LOG_DEBUG; - } - - char ident[32]; - snprintf(ident, sizeof(ident), "fsnotifier[%d]", getpid()); - openlog(ident, 0, LOG_USER); - log_level = level; -} - - void message(const char *text) { output("MESSAGE\n%s\n", text); } -void userlog(int priority, const char* format, ...) { - if (priority > log_level) { - return; - } - +void userlog(int level, const char* format, ...) { va_list ap; - va_start(ap, format); - vsyslog(priority, format, ap); - va_end(ap); - if (self_test) { - const char* level = "debug"; - switch (priority) { - case LOG_ERR: level = "error"; break; - case LOG_WARNING: level = " warn"; break; - case LOG_INFO: level = " info"; break; - } - printf("fsnotifier[%d] %s: ", getpid(), level); - + fputs(level == LOG_ERR ? "[E] " : level == LOG_WARNING ? "[W] " : "[I] ", stdout); va_start(ap, format); - vprintf(format, ap); + vfprintf(stdout, format, ap); va_end(ap); - - printf("\n"); + fputc('\n', stdout); + } + else if (level <= LOG_WARNING) { + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fputc('\n', stderr); } } @@ -225,10 +172,8 @@ static bool main_loop() { static int read_input() { char* line = read_line(stdin); - userlog(LOG_DEBUG, "input: %s", (line ? line : "")); if (line == NULL || strcmp(line, "EXIT") == 0) { - userlog(LOG_INFO, "exiting: %s", line); return 0; } @@ -236,9 +181,8 @@ static int read_input() { array* new_roots = array_create(20); CHECK_NULL(new_roots, ERR_ABORT); - while (1) { + while (true) { line = read_line(stdin); - userlog(LOG_DEBUG, "input: %s", (line ? line : "")); if (line == NULL || strlen(line) == 0) { return 0; } @@ -270,7 +214,7 @@ static bool update_roots(array* new_roots) { array_delete(new_roots); return true; } - else if (array_size(new_roots) == 1 && strcmp(array_get(new_roots, 0), "/") == 0) { // refuse to watch entire tree + 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: /"); array_delete_vs_data(new_roots); @@ -394,7 +338,7 @@ static array* unwatchable_mounts() { struct mntent* ent; while ((ent = getmntent(mtab)) != NULL) { - userlog(LOG_DEBUG, "mtab: %s : %s", ent->mnt_dir, ent->mnt_type); + 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); } @@ -424,13 +368,10 @@ static void inotify_callback(const char* path, int event) { } else if (event & IN_UNMOUNT) { output("RESET\n"); - userlog(LOG_DEBUG, "RESET"); } } static void report_event(const char* event, const char* path) { - userlog(LOG_DEBUG, "%s: %s", event, path); - #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wincompatible-pointer-types" char* copy = path, *p; diff --git a/native/fsNotifier/linux/make.sh b/native/fsNotifier/linux/make.sh index ac005e449084..2f8182078c11 100755 --- a/native/fsNotifier/linux/make.sh +++ b/native/fsNotifier/linux/make.sh @@ -1,7 +1,8 @@ #!/bin/sh -compile_clang() { clang -O2 -Wall -Wextra -Wpedantic -std=c11 -D_DEFAULT_SOURCE "$@"; } -compile_cc() { cc -O2 -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -std=c11 -D_DEFAULT_SOURCE "$@"; } +# Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +compile_clang() { clang -O2 -Wall -Wextra -Wpedantic -std=c11 "$@"; } +compile_cc() { cc -O2 -Wall -Wextra -Wpedantic -Wno-unknown-pragmas -std=c11 "$@"; } VER=$(date "+%Y%m%d.%H%M") sed -i.bak "s/#define VERSION .*/#define VERSION \"${VER}\"/" fsnotifier.h && rm fsnotifier.h.bak @@ -12,7 +13,7 @@ if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "amd64" ]; then compile_clang -o fsnotifier64 main.c inotify.c util.c && \ chmod 755 fsnotifier64 - # dependencies: libc6-dev:i386 libgcc-9-dev:i386 + # dependencies: libc6-dev-i386 libgcc-9-dev-i386-cross printf "\n\n*** Compiling i386 version (fsnotifier) ...\n" compile_clang -target i686-linux-elf -o fsnotifier main.c inotify.c util.c && \ chmod 755 fsnotifier @@ -20,4 +21,4 @@ else echo "*** Compiling platform-specific version (fsnotifier-$ARCH)..." compile_cc -o fsnotifier-"$ARCH" main.c inotify.c util.c && \ chmod 755 fsnotifier-"$ARCH" -fi \ No newline at end of file +fi diff --git a/native/fsNotifier/linux/util.c b/native/fsNotifier/linux/util.c index 0f07080f1dc7..433bda3d3d2b 100644 --- a/native/fsNotifier/linux/util.c +++ b/native/fsNotifier/linux/util.c @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. #include "fsnotifier.h"