From klik-devel Sun Aug 24 21:04:34 2008 From: codesite-noreply () google ! com Date: Sun, 24 Aug 2008 21:04:34 +0000 To: klik-devel Subject: [klik-devel] [klikclient commit] r1669 - Message-Id: <000e0cd22ee68de52204553b04a5 () google ! com> X-MARC-Message: https://marc.info/?l=klik-devel&m=121961191514272 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