x
diff --git a/include/fuse.h b/include/fuse.h
index e18f606..bdc96a6 100644
--- a/include/fuse.h
+++ b/include/fuse.h
@@ -10,24 +10,30 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <utime.h>
 
 struct fuse;
 struct fuse_dh;
 
 typedef int (*dirfiller_t) (struct fuse_dh *, const char *, int type);
 
-
 struct fuse_operations {
-    int (*getattr) (const char *path, struct stat *stbuf);
+    int (*getattr)  (const char *path, struct stat *stbuf);
     int (*readlink) (const char *path, char *buf, size_t size);
-    int (*getdir) (const char *path, struct fuse_dh *h, dirfiller_t filler);
-    int (*mknod) (const char *path, int mode, int rdev);
-    int (*mkdir) (const char *path, int mode);
-    int (*unlink) (const char *path);
-    int (*rmdir) (const char *path);
-    int (*rename) (const char *from, const char *to);
-    int (*symlink) (const char *from, const char *to);
-    int (*link) (const char *from, const char *to);
+    int (*getdir)   (const char *path, struct fuse_dh *h, dirfiller_t filler);
+    int (*mknod)    (const char *path, mode_t mode, dev_t rdev);
+    int (*mkdir)    (const char *path, mode_t mode);
+    int (*unlink)   (const char *path);
+    int (*rmdir)    (const char *path);
+    int (*symlink)  (const char *from, const char *to);
+    int (*rename)   (const char *from, const char *to);
+    int (*link)     (const char *from, const char *to);
+    int (*chmod)    (const char *path, mode_t mode);
+    int (*chown)    (const char *path, uid_t uid, gid_t gid);
+    int (*truncate) (const char *path, off_t size);
+    int (*utime)    (const char *path, struct utimbuf *buf);
+    int (*open)     (const char *path, int flags);
+    int (*pread)    (const char *path, char *buf, size_t size, off_t offset);
 };
 
 struct fuse *fuse_new();
diff --git a/include/linux/fuse.h b/include/linux/fuse.h
index 64a4af3..5fe008c 100644
--- a/include/linux/fuse.h
+++ b/include/linux/fuse.h
@@ -19,11 +19,11 @@
 #define FUSE_ROOT_INO 1
 
 struct fuse_attr {
-	unsigned short      mode;
-	unsigned short      nlink;
-	unsigned short      uid;
-	unsigned short      gid;
-	unsigned short      rdev;
+	unsigned int        mode;
+	unsigned int        nlink;
+	unsigned int        uid;
+	unsigned int        gid;
+	unsigned int        rdev;
 	unsigned long long  size;
 	unsigned long       blksize;
 	unsigned long       blocks;
@@ -32,19 +32,28 @@
 	unsigned long       ctime;
 };
 
+#define FATTR_MODE	(1 << 0)
+#define FATTR_UID	(1 << 1)
+#define FATTR_GID	(1 << 2)
+#define FATTR_SIZE	(1 << 3)
+#define FATTR_UTIME	(1 << 4)
+
 enum fuse_opcode {
 	FUSE_LOOKUP     = 1,
 	FUSE_FORGET,
 	FUSE_GETATTR,
+	FUSE_SETATTR,
 	FUSE_READLINK,
+	FUSE_SYMLINK,
 	FUSE_GETDIR,
 	FUSE_MKNOD,
 	FUSE_MKDIR,
-	FUSE_SYMLINK,
 	FUSE_UNLINK,
 	FUSE_RMDIR,
 	FUSE_RENAME,
 	FUSE_LINK,
+	FUSE_OPEN,
+	FUSE_READ,
 };
 
 /* Conservative buffer size for the client */
@@ -90,6 +99,20 @@
 	char name[1];
 };
 
+struct fuse_setattr_in {
+	struct fuse_attr attr;
+	unsigned int valid;
+};
+
+struct fuse_open_in {
+	unsigned int flags;
+};
+
+struct fuse_read_in {
+	unsigned long long offset;
+	unsigned int size;
+};
+
 struct fuse_in_header {
 	int unique;
 	enum fuse_opcode opcode;