[prev in list] [next in list] [prev in thread] [next in thread] 

List:       klik-devel
Subject:    [klik-devel] [klikclient commit] r1671 -
From:       codesite-noreply () google ! com
Date:       2008-08-24 21:14:35
Message-ID: 001485f3be6262494404553b28e9 () google ! com
[Download RAW message or body]

Author: lionel.tricon
Date: Sun Aug 24 14:14:00 2008
New Revision: 1671

Modified:
    branches/cristian/fusioniso/fusioniso/src/fs.c

Log:
When a glibc function is called in our code (from inside a fuse callback  
function), most of the time we return a value to the fuse layer which is  
totaly wr
ong. In fact, we need to return directly error code (and not -1). The  
modification consist to return -errno when an error occurs.

For example :
if (chmod(value) == 0) return 0;
return -errno;

Instead of :
return chmod(value);

Amazing since part of the job was already done. It appears that i have  
started the job a long time ago and forgot to finish it ...
However that may be, that should improve the behaviour of fusioniso a lot.


Modified: branches/cristian/fusioniso/fusioniso/src/fs.c
==============================================================================
--- branches/cristian/fusioniso/fusioniso/src/fs.c	(original)
+++ branches/cristian/fusioniso/fusioniso/src/fs.c	Sun Aug 24 14:14:00 2008
@@ -1105,7 +1105,8 @@
      }

      fs_home(path, &newpath);
-    return statfs(newpath, stbuf);
+    if (statfs(newpath,stbuf) == 0) return 0;
+    return -errno;
  }

  //
@@ -1161,8 +1162,13 @@
      isofs_inode *inode = fs_lookup(path);
      if (inode) return 0;
      if (extern_sandbox_mounting==sandbox_data && (amode&W_OK)) return 0;
-    if (fs_home_stat(path,&newpath,&v_stbuf) == 0) return  
access(newpath,amode);
-    return access(path,amode);
+    if (fs_home_stat(path,&newpath,&v_stbuf) == 0)
+    {
+        if (access(newpath,amode) == 0) return 0;
+        return -errno;
+    }
+    if (access(path,amode) == 0) return 0;
+    return -errno;
  }

  int fs_real_mknod(const char *path, mode_t mode, dev_t dev)
@@ -1179,7 +1185,8 @@
      }
      if (fs_home(path,&newpath) == 0) fs_path_mkdir(newpath,1);
      if (mode == 32768) mode2=33188; /* temporary fix */
-    return mknod(newpath, mode2, dev);
+    if (mknod(newpath,mode2,dev) == 0) return 0;
+    return -errno;
  }

  int fs_real_unlink(const char *path)
@@ -1222,7 +1229,8 @@
              }
      }
      FSDEBUG("#3 unlink(%s)",newpath);
-    return unlink(newpath);
+    if (unlink(newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_rmdir(const char *path)
@@ -1264,7 +1272,8 @@
              }
      }
      FSDEBUG("#2 rmdir(%s)",newpath);
-    return rmdir(newpath);
+    if (rmdir(newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_mkdir(const char *path, mode_t mode)
@@ -1282,7 +1291,8 @@
      if (fs_home(path,&newpath) == 0) fs_path_mkdir(newpath,1);
      FSDEBUG("newpath=%s mode=%d", newpath, mode);

-    return mkdir(newpath, mode);
+    if (mkdir(newpath,mode) == 0) return 0;
+    return -errno;
  }

  int fs_real_symlink(const char *path1, const char *path2)
@@ -1302,11 +1312,13 @@
      {
          fs_path_mkdir(spath2, 1);
          FSDEBUG("#1 path1=%s -> spath2=%s",path1,spath2);
-        return symlink(path1, spath2);
+        if (symlink(path1,spath2) == 0) return 0;
+        return -errno;
      }

      FSDEBUG("#2 path1=%s -> path2=%s",path1,path2);
-    return symlink(path1, path2);
+    if (symlink(path1,path2) == 0) return 0;
+    return -errno;
  }

  int fs_real_rename(const char *oldpath, const char *newpath)
@@ -1342,10 +1354,12 @@
          fs_path_mkdir(path2, 1);

          FSDEBUG("#1 path1=%s -> path2=%s",path1,path2);
-        return rename(path1, path2);
+        if (rename(path1,path2) == 0) return 0;
+        return -errno;
      }
      FSDEBUG("#2 oldpath=%s -> newpath=%s",oldpath,newpath);
-    return rename(oldpath, newpath);
+    if (rename(oldpath,newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_link(const char *oldpath, const char *newpath)
@@ -1364,10 +1378,12 @@
      {
          fs_path_mkdir(path2, 1);
          FSDEBUG("#1: oldpath=%s -> path2=%s",oldpath,path2);
-        return link(oldpath, path2);
+        if (link(oldpath,path2) == 0) return 0;
+        return -errno;
      }
      FSDEBUG("#2: oldpath=%s -> newpath=%s",oldpath,newpath);
-    return link(oldpath, newpath);
+    if (link(oldpath,newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_chmod(const char *path, mode_t mode)
@@ -1384,7 +1400,8 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return chmod(newpath, mode);
+    if (chmod(newpath,mode) == 0) return 0;
+    return -errno;
  }

  int fs_real_chown(const char *path, uid_t owner, gid_t group)
@@ -1401,7 +1418,8 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return chown(newpath, owner, group);
+    if (chown(newpath,owner,group) == 0) return 0;
+    return -errno;
  }

  int fs_real_truncate(const char *path, off_t length)
@@ -1418,7 +1436,8 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return truncate(newpath, length);
+    if (truncate(newpath,length) == 0) return 0;
+    return -errno;
  }

  int fs_real_utime(const char *path, struct utimbuf *times)
@@ -1435,7 +1454,8 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return utime(newpath, times);
+    if (utime(newpath,times) == 0) return 0;
+    return -errno;
  }

  #ifdef HAVE_SETXATTR
@@ -1454,7 +1474,8 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return setxattr(newpath, name, value, size, options);
+    if (setxattr(newpath,name,value,size,options) == 0) return 0;
+    return -errno;
  }

  int fs_real_getxattr(const char *path, const char *name, void *value,  
size_t size)
@@ -1474,12 +1495,12 @@
      if (fs_home_stat(path,&newpath,&v_stbuf) == 0)
      {
          retval = getxattr(newpath, name, value, size);
-        if (retval == -1) return -ENOTSUP;
+        if (retval == -1) return -errno;
          return retval;
      }

      retval = getxattr(path, name, value, size);
-    if (retval == -1) return -ENOTSUP;
+    if (retval == -1) return -errno;
      return retval;
  }

@@ -1496,8 +1517,13 @@
          return -ENOTSUP;
      }

-    if (fs_home_stat(path,&newpath,&v_stbuf) == 0) return  
listxattr(newpath,list,size);
-    return listxattr(path,list,size);
+    if (fs_home_stat(path,&newpath,&v_stbuf) == 0)
+    {
+        if (listxattr(newpath,list,size) == 0) return 0;
+        return -errno;
+    }
+    if (listxattr(path,list,size) == 0) return 0;
+    return -errno;
  }

  int fs_real_removexattr(const char *path, const char *name)
@@ -1514,6 +1540,7 @@
      }

      if (fs_home_stat(path,&newpath,&v_stbuf) == -1)  
fs_file_dup(path,newpath);
-    return removexattr(newpath, name);
+    if (removexattr(newpath,name) == 0) return 0;
+    return -errno;
  }
  #endif /* HAVE_SETXATTR */
_______________________________________________
klik-devel mailing list
klik-devel@kde.org
https://mail.kde.org/mailman/listinfo/klik-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic