diff options
author | Nikias Bassen | 2009-05-08 08:16:58 -0700 |
---|---|---|
committer | Matt Colyer | 2009-05-08 08:17:32 -0700 |
commit | d30ef14da1ca630c1842f1d47bd89abdc023585d (patch) | |
tree | 277ccbf1d2c84679d462ef20ce0a79fe80162b1b | |
parent | c6f501b8a576ee7be19dd595f1b073e107ee9769 (diff) | |
download | ifuse-d30ef14da1ca630c1842f1d47bd89abdc023585d.tar.gz ifuse-d30ef14da1ca630c1842f1d47bd89abdc023585d.tar.bz2 |
afc error handling in ifuse_open and ifuse_getattr
[#37 state:resolved]
Signed-off-by: Matt Colyer <matt@colyer.name>
-rw-r--r-- | src/ifuse.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/ifuse.c b/src/ifuse.c index bdbacfd..68fcd5d 100644 --- a/src/ifuse.c +++ b/src/ifuse.c @@ -50,8 +50,16 @@ static int ifuse_getattr(const char *path, struct stat *stbuf) iphone_afc_client_t afc = fuse_get_context()->private_data; iphone_error_t ret = iphone_afc_get_file_attr(afc, path, stbuf); - if (ret != IPHONE_E_SUCCESS) - res = -ENOENT; + if (ret == IPHONE_E_AFC_ERROR) { + int e = iphone_afc_get_errno(afc); + if (e < 0) { + res = -EACCES; + } else { + res = -e; + } + } else if (ret != IPHONE_E_SUCCESS) { + res = -EACCES; + } return res; } @@ -109,6 +117,7 @@ static int ifuse_open(const char *path, struct fuse_file_info *fi) uint32 *argh_filehandle = (uint32 *) malloc(sizeof(uint32)); iphone_afc_client_t afc = fuse_get_context()->private_data; uint32_t mode = 0; + iphone_error_t err; if ((fi->flags & 3) == O_RDWR) { mode = IPHONE_AFC_FILE_RW; @@ -120,7 +129,18 @@ static int ifuse_open(const char *path, struct fuse_file_info *fi) mode = IPHONE_AFC_FILE_READ; } - iphone_afc_open_file(afc, path, mode, &file); + err = iphone_afc_open_file(afc, path, mode, &file); + if (err == IPHONE_E_AFC_ERROR) { + int res = iphone_afc_get_errno(afc); + if (res < 0) { + return -EACCES; + } else { + return res; + } + } else if (err != IPHONE_E_SUCCESS) { + return -EINVAL; + } + *argh_filehandle = iphone_afc_get_file_handle(file); fi->fh = *argh_filehandle; |