From 40393a4b0b1a5c8598743e02144d14a26009c2a1 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Mon, 30 Jan 2006 09:47:02 +0000 Subject: fix --- sshfs.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'sshfs.c') 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