From 19cb995c2353f920a893057f54e02be772f42843 Mon Sep 17 00:00:00 2001 From: Percy Jahn Date: Wed, 24 Aug 2011 13:22:36 +0200 Subject: sshfs: fstat workaround Add "-oworkaround=fstat" for SFTP servers which don't support the FSTAT message. --- ChangeLog | 5 +++++ sshfs.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 30a7cbf..fb3088f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-08-24 Miklos Szeredi + + * Add "-oworkaround=fstat" for SFTP servers which don't support + the FSTAT message. Patch by: Percy Jahn + 2011-07-01 Miklos Szeredi * Released 2.3 diff --git a/sshfs.c b/sshfs.c index 22bda6b..64a5eb6 100644 --- a/sshfs.c +++ b/sshfs.c @@ -180,6 +180,7 @@ struct sshfs { int nodelaysrv_workaround; int truncate_workaround; int buflimit_workaround; + int fstat_workaround; int transform_symlinks; int follow_symlinks; int no_check_root; @@ -334,11 +335,13 @@ static struct fuse_opt workaround_opts[] = { SSHFS_OPT("none", nodelaysrv_workaround, 0), SSHFS_OPT("none", truncate_workaround, 0), SSHFS_OPT("none", buflimit_workaround, 0), + SSHFS_OPT("none", fstat_workaround, 0), SSHFS_OPT("all", rename_workaround, 1), SSHFS_OPT("all", nodelay_workaround, 1), SSHFS_OPT("all", nodelaysrv_workaround, 1), SSHFS_OPT("all", truncate_workaround, 1), SSHFS_OPT("all", buflimit_workaround, 1), + SSHFS_OPT("all", fstat_workaround, 1), SSHFS_OPT("rename", rename_workaround, 1), SSHFS_OPT("norename", rename_workaround, 0), SSHFS_OPT("nodelay", nodelay_workaround, 1), @@ -349,6 +352,8 @@ static struct fuse_opt workaround_opts[] = { SSHFS_OPT("notruncate", truncate_workaround, 0), SSHFS_OPT("buflimit", buflimit_workaround, 1), SSHFS_OPT("nobuflimit", buflimit_workaround, 0), + SSHFS_OPT("fstat", fstat_workaround, 1), + SSHFS_OPT("nofstat", fstat_workaround, 0), FUSE_OPT_END }; @@ -2693,6 +2698,9 @@ static int sshfs_fgetattr(const char *path, struct stat *stbuf, if (!sshfs_file_is_conn(sf)) return -EIO; + if (sshfs.fstat_workaround) + return sshfs_getattr(path, stbuf); + buf_init(&buf, 0); buf_add_buf(&buf, &sf->handle); err = sftp_request(SSH_FXP_FSTAT, &buf, SSH_FXP_ATTRS, &outbuf); -- cgit v1.2.3