From 6c73addbb325091170164d78150677b412494b7e Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 15 Jul 2013 14:27:27 +0200 Subject: [PATCH] fsnotifier: reported path corruption fixed --- bin/linux/fsnotifier | Bin 22791 -> 22791 bytes bin/linux/fsnotifier64 | Bin 29155 -> 29155 bytes native/fsNotifier/linux/fsnotifier.h | 2 +- native/fsNotifier/linux/inotify.c | 16 +++++++------- native/fsNotifier/linux/main.c | 31 ++++++++++++++++++--------- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/bin/linux/fsnotifier b/bin/linux/fsnotifier index 37430c7dc6754bac9969c0af98ce032784394756..f79a688a18bdd7e22dfad319c782bb470892fba3 100755 GIT binary patch delta 2672 zcmZ8je^6A{6@HgI<;4OIaVxv*!tSz9s}XQfOu?Z_yNXG~8H_(-jD~icGSh_qN_VTB zE~2x%#OHIX&245nlcvF@Z6?z=0k+XP84Vf8lB61;<7ivcsU=3=x-n6zKq|2P&fNuU z{loX(x#xW6JKs6yF3)wd=ek+vFPZIB!}vcpc?01CRi|eq{&DQgGh0vO#9n7V%$s{S zSCVR3Xm`J?HNGG#R*F~T?_%ru^ZBb-OKdRzyDTd&H&$1$ixs_=FG+9TCrMI!kE(|! zQmMqx@L?n@4?i_8$X<*svz=!w9?PD8KWp2v>9MVmPhG|Z+(d&-G-}6FYm4q$?;h&K)hIv^ZW_fO6v$<>xmFo!RZM>t%8? zLB*U+Z?|rNewAh=@SH}e6)5^h=r|#ro-0XuPjDN(cjG-W#zJmXB4?886Zm+TK9X>6EGG0oV~>B{x`k=V#0^GEES2=_BYW%((etP z=U8IfbQiQk3P@7I@@~L%@C^>9V-3Rf9<}|Mlqi8ttLe0b?{^eBHs4I2eq-h|K&Q35 z%i(4p@j=JDA|>skk4#P@Y$2bUpYut_O1FlJrfS)vidr<|F6P8e?Be{fq6O@mytSyj zeCUf*YG13gRMo4|M8wRZ`p5IA8TyFYeiK&2xv2JfezC~wyFz&VndVyyAvlff7{ZJ& z2BJ)}3b@nhUh^oBDe41Ig+I=qmPTs*73fs{lY~t%=we^S_6Tfd7^>E40qbSH*XdogAhml7xG zNY>WU*q9K(Y(d!|u#|u1Dr!5Aw3zdtCc~!#(UuS@m?pmI9^%^phq!gtzj7q0raycN z0m}*0OUeT9Z-APbz_SGF(vm(nY2-AH8i?S7_aG{xsoA0@9Xwj>U>EqS#U9_gBWcHZ z=}HEUBba@L3=lgQqTYPWuNS*__QLi`)u5~-j!>~Se42hbo^wM8D}?X)x_Oqr5;#~`H$-q zwiKNnTPW}Og?D!5D5vCzf;v0@$+F+j&~ngJZfE9qZ!HKT#q0L>bN4%7a{+^_lD ze)Y+e?t2uyXYaDg_mexU6X2e%;usJ}S(>^5wG9H;4GcDRl>1n%0AXD@q2I8VP=;?|Y8I(l9bMsUCVkSgD5Q*Xpu@ zyEA>XpmpU4+S1&7WJXr&=a^IR!(3_xa;ThWARmvZ#j?JRrqLcP%XCB5>aCXmRTB@N zOgdHfK4g>nS0kb_-BOH;WPM844t5K*Evk7(J>)`k7gLYF6X`1xf1Naoe-)~`o#Lg~ z<%Q8~<*St|Dk_(+Sk6NgzUhxxN5$n?GhYX)-m|fDeB;AQ*k#`OaNFF=zmb)v(Y!1v zSNay7ow3|U4l~xsUs~V9I{C!<)yyCJTEp9n4a6oks99gGds$Y9WB~%o(ErBY%F6zj IxACg-U)-QD-v9sr delta 2678 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 & 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); - memcpy(path_buf, node->path, node->path_len + 1); int path_len = node->path_len; + memcpy(path_buf, node->path, path_len + 1); if (event->len > 0) { - path_buf[node->path_len] = '/'; + path_buf[path_len] = '/'; int name_len = strlen(event->name); memcpy(path_buf + path_len + 1, event->name, name_len + 1); path_len += name_len + 1; } + if (callback != NULL) { + (*callback)(path_buf, event->mask); + } + if (is_dir && event->mask & (IN_CREATE | IN_MOVED_TO)) { int result = walk_tree(path_len, node, true, NULL); if (result < 0 && result != ERR_IGNORE && result != ERR_CONTINUE) { @@ -373,10 +377,6 @@ static bool process_inotify_event(struct inotify_event* event) { } } - if (callback != NULL) { - (*callback)(path_buf, event->mask); - } - return true; } diff --git a/native/fsNotifier/linux/main.c b/native/fsNotifier/linux/main.c index 3cd65e28fc54..95a22b415683 100644 --- a/native/fsNotifier/linux/main.c +++ b/native/fsNotifier/linux/main.c @@ -36,7 +36,7 @@ #define LOG_ENV_ERROR "error" #define LOG_ENV_OFF "off" -#define VERSION "20130617.1935" +#define VERSION "20130715.1353" #define VERSION_MSG "fsnotifier " VERSION "\n" #define USAGE_MSG \ @@ -79,11 +79,11 @@ 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(char* path, int event); -static void report_event(char* event, char* path); +static void inotify_callback(const char* path, int event); +static void report_event(const char* event, const char* path); static void output(const char* format, ...); static void check_missing_roots(); -static void check_root_removal(char*); +static void check_root_removal(const char*); int main(int argc, char** argv) { @@ -434,7 +434,7 @@ static array* unwatchable_mounts() { } -static void inotify_callback(char* path, int event) { +static void inotify_callback(const char* path, int event) { if (event & (IN_CREATE | IN_MOVED_TO)) { report_event("CREATE", path); report_event("CHANGE", path); @@ -457,21 +457,32 @@ static void inotify_callback(char* path, int event) { } } -static void report_event(char* event, char* path) { +static void report_event(const char* event, const char* path) { userlog(LOG_DEBUG, "%s: %s", event, path); - int len = strlen(path); - for (char* p = path; *p != '\0'; p++) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wincompatible-pointer-types" + char* copy = path, *p; + for (p = copy; *p != '\0'; ++p) { if (*p == '\n') { + if (copy == path) { + copy = strdup(path); + p = copy + (p - path); + } *p = '\0'; } } +#pragma clang diagnostic pop fputs(event, stdout); fputc('\n', stdout); - fwrite(path, len, 1, stdout); + fwrite(copy, (p - copy), 1, stdout); fputc('\n', stdout); + if (copy != path) { + free(copy); + } + fflush(stdout); } @@ -506,7 +517,7 @@ static void check_missing_roots() { } } -static void check_root_removal(char* path) { +static void check_root_removal(const char* path) { for (int i=0; iid >= 0 && strcmp(path, UNFLATTEN(root->path)) == 0) {