Portability fix
authorMiklos Szeredi <miklos@szeredi.hu>
Mon, 28 Oct 2002 08:49:39 +0000 (08:49 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Mon, 28 Oct 2002 08:49:39 +0000 (08:49 +0000)
ChangeLog
include/linux/fuse.h
lib/fuse.c

index e9a14af42e0e43bb85bfd4a0d1f20968574dfc09..62a859a1bfc5bade68a3259e17eb945299316370 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2002-10-28  Miklos Szeredi <mszeredi@inf.bme.hu>
+
+       * Portablility fix (bug reported by C. Chris Erway)
+
 2002-10-25  Miklos Szeredi <mszeredi@inf.bme.hu>
 
        * Use Mark Glines' fd passing method for default operation instead
index b6f41db925eb96525dd0d645192084e230396ed2..24905c44b0b2efa0215e73d7a712dc01b780d5fa 100644 (file)
@@ -119,7 +119,6 @@ struct fuse_getdir_out {
 struct fuse_mknod_in {
        unsigned short mode;
        unsigned short rdev;
-       char name[0];
 };
 
 struct fuse_mknod_out {
@@ -129,17 +128,14 @@ struct fuse_mknod_out {
 
 struct fuse_mkdir_in {
        unsigned short mode;
-       char name[0];
 };
 
 struct fuse_rename_in {
        unsigned long newdir;
-       char names[0];
 };
 
 struct fuse_link_in {
        unsigned long newdir;
-       char name[0];
 };
 
 struct fuse_setattr_in {
@@ -163,7 +159,6 @@ struct fuse_read_in {
 struct fuse_write_in {
        unsigned long long offset;
        unsigned int size;
-       char buf[0];
 };
 
 struct fuse_statfs_out {
index b809374630ea9cb02e084e23c9c4daf0f7658a2e..42ab52aedfbf6d1fcdc4ff43f9985cc8896ac0df 100644 (file)
@@ -17,6 +17,7 @@
 #include <sys/param.h>
 
 #define FUSE_MAX_PATH 4096
+#define PARAM(inarg) (((char *)(inarg)) + sizeof(*inarg))
 
 static inline void inc_avail(struct fuse *f)
 {
@@ -572,7 +573,7 @@ static void do_mknod(struct fuse *f, struct fuse_in_header *in,
     struct stat buf;
 
     res = -ENOENT;
-    path = get_path_name(f, in->ino, inarg->name);
+    path = get_path_name(f, in->ino, PARAM(inarg));
     if(path != NULL) {
         res = -ENOSYS;
         if(f->op.mknod && f->op.getattr) {
@@ -584,7 +585,7 @@ static void do_mknod(struct fuse *f, struct fuse_in_header *in,
     }
     if(res == 0) {
         convert_stat(&buf, &outarg.attr);
-        outarg.ino = find_node(f, in->ino, inarg->name, &outarg.attr,
+        outarg.ino = find_node(f, in->ino, PARAM(inarg), &outarg.attr,
                                in->unique);
     }
 
@@ -598,7 +599,7 @@ static void do_mkdir(struct fuse *f, struct fuse_in_header *in,
     char *path;
 
     res = -ENOENT;
-    path = get_path_name(f, in->ino, inarg->name);
+    path = get_path_name(f, in->ino, PARAM(inarg));
     if(path != NULL) {
         res = -ENOSYS;
         if(f->op.mkdir)
@@ -655,8 +656,8 @@ static void do_rename(struct fuse *f, struct fuse_in_header *in,
     int res;
     fino_t olddir = in->ino;
     fino_t newdir = inarg->newdir;
-    char *oldname = inarg->names;
-    char *newname = inarg->names + strlen(oldname) + 1;
+    char *oldname = PARAM(inarg);
+    char *newname = oldname + strlen(oldname) + 1;
     char *oldpath;
     char *newpath;
 
@@ -687,7 +688,7 @@ static void do_link(struct fuse *f, struct fuse_in_header *in,
     res = -ENOENT;
     oldpath = get_path(f, in->ino);
     if(oldpath != NULL) {
-        newpath =  get_path_name(f, arg->newdir, arg->name);
+        newpath =  get_path_name(f, arg->newdir, PARAM(arg));
         if(newpath != NULL) {
             res = -ENOSYS;
             if(f->op.link)
@@ -774,7 +775,7 @@ static void do_write(struct fuse *f, struct fuse_in_header *in,
 
         res = -ENOSYS;
         if(f->op.write)
-            res = f->op.write(path, arg->buf, arg->size, arg->offset);
+            res = f->op.write(path, PARAM(arg), arg->size, arg->offset);
         free(path);
     }