From 40393a4b0b1a5c8598743e02144d14a26009c2a1 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Mon, 30 Jan 2006 09:47:02 +0000 Subject: fix --- ChangeLog | 5 +++++ sshfs.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/ChangeLog b/ChangeLog index 39471f1..a7793fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-01-29 Miklos Szeredi + + * Add '-olarge_read' option for Linux-2.4.*. This should + generally improve download performance + 2006-01-27 Miklos Szeredi * Add workaround (enabled by default) for ssh clients not setting diff --git a/sshfs.c b/sshfs.c index afe4311..af9edf4 100644 --- a/sshfs.c +++ b/sshfs.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -2168,6 +2169,33 @@ int parse_workarounds(void) return res; } +#if FUSE_VERSION == 25 +static int fuse_opt_insert_arg(struct fuse_args *args, int pos, + const char *arg) +{ + assert(pos <= args->argc); + if (fuse_opt_add_arg(args, arg) == -1) + return -1; + + if (pos != args->argc - 1) { + char *newarg = args->argv[args->argc - 1]; + memmove(&args->argv[pos + 1], &args->argv[pos], + sizeof(char *) * (args->argc - pos - 1)); + args->argv[pos] = newarg; + } + return 0; +} +#endif + +void check_large_read(struct fuse_args *args) +{ + struct utsname buf; + int err = uname(&buf); + if (!err && strcmp(buf.sysname, "Linux") == 0 && + strncmp(buf.release, "2.4.", 4) == 0) + fuse_opt_insert_arg(args, 1, "-olarge_read"); +} + int main(int argc, char *argv[]) { int res; @@ -2253,6 +2281,7 @@ int main(int argc, char *argv[]) g_free(tmp); tmp = g_strdup_printf("-ofsname=sshfs#%s", fsname); fuse_opt_insert_arg(&args, 1, tmp); + check_large_read(&args); g_free(tmp); g_free(fsname); res = fuse_main(args.argc, args.argv, cache_init(&sshfs_oper)); -- cgit v1.2.3