Better error handling for getdir and read.

This commit is contained in:
braga
2006-05-20 18:35:12 +00:00
parent 5e2331df34
commit 5efe1c3028

18
ftpfs.c
View File

@@ -302,6 +302,7 @@ static size_t read_data(void *ptr, size_t size, size_t nmemb, void *data) {
static int ftpfs_getdir(const char* path, fuse_cache_dirh_t h, static int ftpfs_getdir(const char* path, fuse_cache_dirh_t h,
fuse_cache_dirfil_t filler) { fuse_cache_dirfil_t filler) {
int err = 0;
CURLcode curl_res; CURLcode curl_res;
char* dir_path = get_dir_path(path, 0); char* dir_path = get_dir_path(path, 0);
@@ -318,14 +319,15 @@ static int ftpfs_getdir(const char* path, fuse_cache_dirh_t h,
if (curl_res != 0) { if (curl_res != 0) {
DEBUG("%s\n", error_buf); DEBUG("%s\n", error_buf);
err = -EIO;
} else {
buf_add_mem(&buf, "\0", 1);
parse_dir(buf.p, dir_path + strlen(ftpfs.host) - 1, NULL, NULL, NULL, 0, h, filler);
} }
buf_add_mem(&buf, "\0", 1);
parse_dir(buf.p, dir_path + strlen(ftpfs.host) - 1, NULL, NULL, NULL, 0, h, filler);
free(dir_path); free(dir_path);
buf_free(&buf); buf_free(&buf);
return 0; return err;
} }
static char* get_dir_path(const char* path, int strip) { static char* get_dir_path(const char* path, int strip) {
@@ -561,9 +563,15 @@ static int ftpfs_open(const char* path, struct fuse_file_info* fi) {
static int ftpfs_read(const char* path, char* rbuf, size_t size, off_t offset, static int ftpfs_read(const char* path, char* rbuf, size_t size, off_t offset,
struct fuse_file_info* fi) { struct fuse_file_info* fi) {
int ret;
char *full_path = g_strdup_printf("%s%s", ftpfs.host, path + 1); char *full_path = g_strdup_printf("%s%s", ftpfs.host, path + 1);
int ret = ftpfs_read_chunk(full_path, rbuf, size, offset, fi, 1); size_t size_read = ftpfs_read_chunk(full_path, rbuf, size, offset, fi, 1);
free(full_path); free(full_path);
if (size_read == CURLFTPFS_BAD_READ) {
ret = -EIO;
} else {
ret = size_read;
}
return ret; return ret;
} }