ports/sysutils/curlftpfs/patches/patch-ftpfs_c

57 lines
2.1 KiB
Text

- Fix input/output errors; from RedHat #671204
- Workaround for a working create.
--- ftpfs.c.orig Wed Apr 30 01:05:47 2008
+++ ftpfs.c Tue Dec 17 16:23:06 2013
@@ -503,7 +519,7 @@ static void *ftpfs_write_thread(void *data) {
curl_easy_setopt_or_die(fh->write_conn, CURLOPT_URL, fh->full_path);
curl_easy_setopt_or_die(fh->write_conn, CURLOPT_UPLOAD, 1);
- curl_easy_setopt_or_die(fh->write_conn, CURLOPT_INFILESIZE, -1);
+ curl_easy_setopt_or_die(fh->write_conn, CURLOPT_INFILESIZE, (curl_off_t)-1);
curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READFUNCTION, write_data_bg);
curl_easy_setopt_or_die(fh->write_conn, CURLOPT_READDATA, fh);
curl_easy_setopt_or_die(fh->write_conn, CURLOPT_LOW_SPEED_LIMIT, 1);
@@ -611,10 +627,12 @@ static void free_ftpfs_file(struct ftpfs_file *fh) {
curl_easy_cleanup(fh->write_conn);
g_free(fh->full_path);
g_free(fh->open_path);
- sem_destroy(&fh->data_avail);
- sem_destroy(&fh->data_need);
- sem_destroy(&fh->data_written);
- sem_destroy(&fh->ready);
+ if (fh->data_avail) {
+ sem_destroy(&fh->data_avail);
+ sem_destroy(&fh->data_need);
+ sem_destroy(&fh->data_written);
+ sem_destroy(&fh->ready);
+ }
free(fh);
}
@@ -813,12 +849,12 @@ static int ftpfs_open(const char* path, struct fuse_fi
return ftpfs_open_common(path, 0, fi);
}
-#if FUSE_VERSION >= 25
static int ftpfs_create(const char* path, mode_t mode,
struct fuse_file_info* fi) {
- return ftpfs_open_common(path, mode, fi);
+ fi->flags &= ~O_ACCMODE;
+ fi->flags |= O_RDONLY;
+ return ftpfs_open_common(path, (mode & ~O_ACCMODE) | O_RDONLY, fi);
}
-#endif
static int ftpfs_read(const char* path, char* rbuf, size_t size, off_t offset,
struct fuse_file_info* fi) {
@@ -1380,8 +1420,8 @@ static struct fuse_cache_operations ftpfs_oper = {
.read = ftpfs_read,
.write = ftpfs_write,
.statfs = ftpfs_statfs,
-#if FUSE_VERSION >= 25
.create = ftpfs_create,
+#if FUSE_VERSION >= 25
.ftruncate = ftpfs_ftruncate,
// .fgetattr = ftpfs_fgetattr,
#endif