[gamin] Fix for inotify-0.23



Inotify 0.23 introduces a ONE_SHOT mechanism analogous to the dnotify
behaviour. This messed up the event bitmasks. Attached is a patch that
fixes the behaviour.

John
Index: server/local_inotify.h
===================================================================
RCS file: /cvs/gnome/gamin/server/local_inotify.h,v
retrieving revision 1.6
diff -u -r1.6 local_inotify.h
--- server/local_inotify.h	16 Mar 2005 22:04:15 -0000	1.6
+++ server/local_inotify.h	29 Apr 2005 17:34:22 -0000
@@ -8,7 +8,6 @@
 #define _LINUX_INOTIFY_H
 
 #include <linux/types.h>
-#include <linux/limits.h>
 
 /*
  * struct inotify_event - structure read from the inotify device for each event
@@ -20,7 +19,7 @@
 	__s32		wd;		/* watch descriptor */
 	__u32		mask;		/* watch mask */
 	__u32		cookie;		/* cookie to synchronize two events */
-	size_t		len;		/* length (including nulls) of name */
+	__u32		len;		/* length (including nulls) of name */
 	char		name[0];	/* stub for possible name */
 };
 
@@ -34,27 +33,42 @@
 	__u32		mask;		/* event mask */
 };
 
-/* the following are legal, implemented events */
+/* the following are legal, implemented events that user-space can watch for */
 #define IN_ACCESS		0x00000001	/* File was accessed */
 #define IN_MODIFY		0x00000002	/* File was modified */
-#define IN_ATTRIB		0x00000004	/* File changed attributes */
+#define IN_ATTRIB		0x00000004	/* Metadata changed */
 #define IN_CLOSE_WRITE		0x00000008	/* Writtable file was closed */
 #define IN_CLOSE_NOWRITE	0x00000010	/* Unwrittable file closed */
 #define IN_OPEN			0x00000020	/* File was opened */
 #define IN_MOVED_FROM		0x00000040	/* File was moved from X */
 #define IN_MOVED_TO		0x00000080	/* File was moved to Y */
-#define IN_DELETE_SUBDIR	0x00000100	/* Subdir was deleted */ 
+#define IN_DELETE_SUBDIR	0x00000100	/* Subdir was deleted */
 #define IN_DELETE_FILE		0x00000200	/* Subfile was deleted */
 #define IN_CREATE_SUBDIR	0x00000400	/* Subdir was created */
 #define IN_CREATE_FILE		0x00000800	/* Subfile was created */
 #define IN_DELETE_SELF		0x00001000	/* Self was deleted */
+
+/* the following are legal events.  they are sent as needed to any watch */
 #define IN_UNMOUNT		0x00002000	/* Backing fs was unmounted */
 #define IN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */
 #define IN_IGNORED		0x00008000	/* File was ignored */
 
+/* helper events */
+#define IN_CLOSE		(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
+#define IN_MOVE			(IN_MOVED_FROM | IN_MOVED_TO) /* moves */
+
 /* special flags */
-#define IN_ALL_EVENTS		0xffffffff	/* All the events */
-#define IN_CLOSE		(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
+#define IN_ONESHOT		0x80000000	/* only send event once */
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define IN_ALL_EVENTS	(IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
+			 IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
+			 IN_MOVED_TO | IN_DELETE_SUBDIR | IN_DELETE_FILE | \
+			 IN_CREATE_SUBDIR | IN_CREATE_FILE | IN_DELETE_SELF)
 
 #define INOTIFY_IOCTL_MAGIC	'Q'
 #define INOTIFY_IOCTL_MAXNR	2
@@ -67,7 +81,6 @@
 #include <linux/dcache.h>
 #include <linux/fs.h>
 #include <linux/config.h>
-#include <asm/atomic.h>
 
 #ifdef CONFIG_INOTIFY
 
@@ -75,7 +88,7 @@
 				      const char *);
 extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32,
 					      const char *);
-extern void inotify_super_block_umount(struct super_block *);
+extern void inotify_unmount_inodes(struct list_head *);
 extern void inotify_inode_is_dead(struct inode *);
 extern u32 inotify_get_cookie(void);
 
@@ -93,7 +106,7 @@
 {
 }
 
-static inline void inotify_super_block_umount(struct super_block *sb)
+static inline void inotify_unmount_inodes(struct list_head *list)
 {
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]