[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