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

List:       klik-devel
Subject:    [klik-devel] [klikclient commit] r1669 -
From:       codesite-noreply () google ! com
Date:       2008-08-24 21:04:34
Message-ID: 000e0cd22ee68de52204553b04a5 () google ! com
[Download RAW message or body]

Author: lionel.tricon
Date: Sun Aug 24 14:03:46 2008
New Revision: 1669

Modified:
    trunk/virtualization/unionfuse/trunk/fusioniso/src/fusioniso-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 wrong. 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: trunk/virtualization/unionfuse/trunk/fusioniso/src/fusioniso-fs.c
==============================================================================
--- trunk/virtualization/unionfuse/trunk/fusioniso/src/fusioniso-fs.c	 
(original)
+++ trunk/virtualization/unionfuse/trunk/fusioniso/src/fusioniso-fs.c	Sun  
Aug 24 14:03:46 2008
@@ -864,12 +864,12 @@
              if (retval == -1) return -errno;
              target[retval] = '\0';
              strcpy(newpath, extern_sandbox_path);
-             strcat(newpath, target);
-             if (extern_sandbox_mounting!=sandbox_none &&  
stat(newpath,&v_stbuf)==0)
-             {
-                 strcpy(target, newpath);
-                 return 0;
-             }
+            strcat(newpath, target);
+            if (extern_sandbox_mounting!=sandbox_none &&  
stat(newpath,&v_stbuf)==0)
+            {
+                strcpy(target, newpath);
+                return 0;
+            }
              return 0;
          }

@@ -1091,7 +1091,11 @@
      char *newpath=ppath;
      if (extern_debug) printf("****** STATFS: (%s)\n", path);
      isofs_inode *inode=NULL;
-    if (extern_glibc && strcmp(path,"/lib/ld-linux.so.2")==0) return  
statfs("/lib/ld-klik2.so.2", stbuf);
+    if (extern_glibc && strcmp(path,"/lib/ld-linux.so.2")==0)
+    {
+        if (statfs("/lib/ld-klik2.so.2",stbuf) == 0) return 0;
+        return -errno;
+    }
      if (extern_union_mounting) inode=fs_lookup(path);
      if (!extern_union_mounting || inode)
      {
@@ -1107,7 +1111,8 @@
      }

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

  //
@@ -1163,8 +1168,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)
@@ -1181,7 +1191,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)
@@ -1224,7 +1235,8 @@
              }
      }
      if (extern_debug) printf("****** #3 unlink(%s)\n", newpath);
-    return unlink(newpath);
+    if (unlink(newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_rmdir(const char *path)
@@ -1266,7 +1278,8 @@
              }
      }
      if (extern_debug) printf("****** #2 rmdir(%s)\n", newpath);
-    return rmdir(newpath);
+    if (rmdir(newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_mkdir(const char *path, mode_t mode)
@@ -1284,7 +1297,8 @@
      if (fs_home(path,&newpath) == 0) fs_path_mkdir(newpath,1);
      if (extern_debug) printf("****** mkdir: %s %d\n", 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)
@@ -1304,11 +1318,13 @@
      {
          fs_path_mkdir(spath2, 1);
          if (extern_debug) printf("****** symlink #1 %s -> %s\n", path1,  
spath2);
-        return symlink(path1, spath2);
+        if (symlink(path1,spath2) == 0) return 0;
+        return -errno;
      }

      if (extern_debug) printf("****** symlink #2 %s -> %s\n", 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)
@@ -1343,10 +1359,12 @@
          fs_path_mkdir(path2, 1);

          if (extern_debug) printf("****** rename #1 %s -> %s\n", path1,  
path2);
-        return rename(path1, path2);
+        if (rename(path1,path2) == 0) return 0;
+        return -errno;
      }
      if (extern_debug) printf("****** rename #2 %s -> %s\n", 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)
@@ -1365,10 +1383,12 @@
      {
          fs_path_mkdir(path2, 1);
          if (extern_debug) printf("****** link #1: %s -> %s\n", oldpath,  
path2);
-        return link(oldpath, path2);
+        if (link(oldpath,path2) == 0) return 0;
+        return -errno;
      }
      if (extern_debug) printf("****** link #2: %s -> %s\n", oldpath,  
oldpath);
-    return link(oldpath, newpath);
+    if (link(oldpath,newpath) == 0) return 0;
+    return -errno;
  }

  int fs_real_chmod(const char *path, mode_t mode)
@@ -1385,7 +1405,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)
@@ -1402,7 +1423,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)
@@ -1419,7 +1441,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)
@@ -1436,7 +1459,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;
  }

  int fs_real_setxattr(const char *path, const char *name, const void *value,
@@ -1454,7 +1478,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 +1499,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 +1521,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,5 +1544,6 @@
      }

      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;
  }
_______________________________________________
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