svn commit: trunk/busybox: include miscutils
vda at busybox.net
vda at busybox.net
Mon Nov 17 22:19:18 UTC 2008
Author: vda
Date: 2008-11-17 14:19:18 -0800 (Mon, 17 Nov 2008)
New Revision: 24083
Log:
inotify: add x, o, and u events
Modified:
trunk/busybox/include/usage.h
trunk/busybox/miscutils/inotifyd.c
Changeset:
Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h 2008-11-17 18:03:46 UTC (rev 24082)
+++ trunk/busybox/include/usage.h 2008-11-17 22:19:18 UTC (rev 24083)
@@ -1846,7 +1846,7 @@
"\nwith the parameters:" \
"\n1. actual event(s)" \
"\n2. file name" \
- "\n3. name of subfile (if any), in case of watching a directory" \
+ "\n3. name of subfile (if any)" \
"\ninotifyd waits for agent to exit." \
"\nEvents:" \
"\n a File is accessed" \
@@ -1855,12 +1855,16 @@
"\n w Writtable file is closed" \
"\n 0 Unwrittable file is closed" \
"\n r File is opened" \
- "\n m File is moved from X" \
- "\n y File is moved to Y" \
+ "\n D File is deleted" \
+ "\n M File is moved" \
+ "\n u Backing fs is unmounted" \
+ "\n o Event queue overflowed" \
+ "\n x File can't be watched anymore" \
+ "\nIf watching a directory:" \
+ "\n m Subfile is moved into dir" \
+ "\n y Subfile is moved out of dir" \
"\n n Subfile is created" \
"\n d Subfile is deleted" \
- "\n D Self is deleted" \
- "\n M Self is moved" \
#define insmod_trivial_usage \
USE_FEATURE_2_4_MODULES("[OPTION]... ") "MODULE [symbol=value]..."
Modified: trunk/busybox/miscutils/inotifyd.c
===================================================================
--- trunk/busybox/miscutils/inotifyd.c 2008-11-17 18:03:46 UTC (rev 24082)
+++ trunk/busybox/miscutils/inotifyd.c 2008-11-17 22:19:18 UTC (rev 24083)
@@ -43,7 +43,14 @@
"d" // 0x00000200 Subfile was deleted
"D" // 0x00000400 Self was deleted
"M" // 0x00000800 Self was moved
+ "\0" // 0x00001000 (unused)
+ "u" // 0x00002000 Backing fs was unmounted
+ "o" // 0x00004000 Event queued overflowed
+ "x" // 0x00008000 File is no longer watched (usually deleted)
;
+enum {
+ MASK_BITS = sizeof(mask_names) - 1
+};
extern int inotify_init(void);
extern int inotify_add_watch(int fd, const char *path, uint32_t mask);
@@ -76,10 +83,10 @@
// convert mask names to mask bitset
mask = 0;
while (*++masks) {
- int i = strchr(mask_names, *masks) - mask_names;
- if (i >= 0) {
- mask |= (1 << i);
- }
+ const char *found;
+ found = memchr(mask_names, *masks, MASK_BITS);
+ if (found)
+ mask |= (1 << (found - mask_names));
}
}
// add watch
@@ -124,21 +131,23 @@
// process events. N.B. events may vary in length
while (len > 0) {
int i;
- char events[sizeof(mask_names)];
- char *s = events;
- unsigned m = ie->mask;
-
- for (i = 0; i < sizeof(mask_names)-1; ++i, m >>= 1) {
- if (m & 1)
- *s++ = mask_names[i];
+ // cache relevant events mask
+ unsigned m = ie->mask & ((1 << MASK_BITS) - 1);
+ if (m) {
+ char events[MASK_BITS + 1];
+ char *s = events;
+ for (i = 0; i < MASK_BITS; ++i, m >>= 1) {
+ if ((m & 1) && (mask_names[i] != '\0'))
+ *s++ = mask_names[i];
+ }
+ *s = '\0';
+// bb_error_msg("exec %s %08X\t%s\t%s\t%s", args[0],
+// ie->mask, events, watched[ie->wd], ie->len ? ie->name : "");
+ args[1] = events;
+ args[2] = watched[ie->wd];
+ args[3] = ie->len ? ie->name : NULL;
+ wait4pid(xspawn((char **)args));
}
- *s = '\0';
- //bb_error_msg("exec %s %08X\t%s\t%s\t%s", agent,
- // ie->mask, events, watched[ie->wd], ie->len ? ie->name : "");
- args[1] = events;
- args[2] = watched[ie->wd];
- args[3] = ie->len ? ie->name : NULL;
- wait4pid(xspawn((char **)args));
// next event
i = sizeof(struct inotify_event) + ie->len;
len -= i;
More information about the busybox-cvs
mailing list