This fixes "sshfs -o idmap=user". The "if (o->off != ULONG_MAX)" logic is basically "if (!FUSE_OPT_IS_OPT_KEY(o))" from above, so I stuck it into an else.
Ideas from Helg: https://marc.info/?l=openbsd-tech&m=142451814811631&w=2 Ray Index: fuse_opt.c =================================================================== RCS file: /home/cvs/src/lib/libfuse/fuse_opt.c,v retrieving revision 1.15 diff -u -p -r1.15 fuse_opt.c --- fuse_opt.c 19 Oct 2015 17:24:07 -0000 1.15 +++ fuse_opt.c 21 May 2016 12:53:57 -0000 @@ -247,13 +247,14 @@ parse_opt(const struct fuse_opt *o, cons ret = f(data, &val[idx], o->val, arg); else ret = f(data, val, o->val, arg); - } - - if (o->off != ULONG_MAX && data && o->val >= 0) { - ret = f(data, val, o->val, arg); - int *addr = (int *)(data + o->off); - *addr = o->val; - ret = 0; + /* exact match, e.g. "idmap=user" (instead of "idmap=%s") */ + } else if (keyval && strcmp(val, o->templ) == 0) { + if (data && o->val >= 0) { + ret = f(data, val, o->val, arg); + int *addr = (int *)(data + o->off); + *addr = o->val; + ret = 0; + } } if (ret == -1)
