- make sure that the args array is NULL terminated.
- make sure argc is initialized and argv is set to NULL after freeing.
- make the deep copy function an opt interface function.
up.
- Use malloc and free instead of macros, delete macros.
- Merge the two copies of deep copy and free args that were slightly buggy
into one and use that one.
XXX: Lots of ints should be size_t.
XXX: Bailing on error is not a good thing for a library.
XXX: Defs.h should be eliminated completely. Not all files need all the headers.
determines the API.
Provide a default for FUSE_USE_VERSION if it's not set, and use this
value to determine the number of arguments given to fuse_main().
Refuse doessn't have a fuse_common.h, so include fuse_opt.h explicitly
from fuse.h. To avoid circular dependencies, don't include fuse.h
from fuse_opt.h.
This means that we no longer have to modify packages which use the argument
and option parsing routines to include fuse_opt.h.
shell in the fuse_opt functions
+ add new debugging functions:
+ __fuse_debug(), which is used to set and retrieve the
debugging level, so that debugging information can be turned
on and off from the user-level filesystem, and
+ __fuse_pargs(), which prints out an argv vector
+ put the comment about pu_privdata back with the code it references
+ put the code to place the refuse name back into the fuse_new()
function - we have access to all the arguments there.
+ specifically include <fuse_opt.h> in <fuse.h> - this would seem to
be what FUSE itself does, judging by the number of fuse-based
filesystems I've patched to include <fuse_opt.h> specifically
+ do away with the forward reference to struct fuse_args in fuse.h,
since it is defined just after the forward reference without being
referenced in between
+ fill in the missing refuse_opt args functionality - add an arg to the
args structure in fuse_opt_add_arg() and fuse_opt_insert_arg(), and
free allocated memory in fuse_opt_free_args().
+ get rid of spurious forward declarations and prototypes.
+ if REFUSE_INHERIT_FS_CHARACTERISTICS is defined when refuse is built,
file systems inherit the vfs characteristics of their mountpoints. The
default value is NOT to inherit the vfs characteristics.
+ perform a deep copy of the fuse_args structure in fuse_mount() -
this is so that existing FUSE filesystems still DTRT when arguments
are zeroed out.
* Move fuse_opt* funcs from refuse.c into refuse_opt.c.
Implement fuse_opt_parse() and fuse_opt_match(). And make the other
functions just dummy, always returning 0 (I added debugging printfs
to see what the application is trying to do).
For now there are two things that do not work in fuse_opt:
* options accepting arguments, i.e -otimeout=%u or -ofile=%s.
* options without arguments are not enabled, just parsed.
At least now curlftpfs works, even with verbose mode! :-)
Ok'ed by pooka.
is implemented as a very dummy version (i.e. totally unimplemented),
so some effort is still needed there.
After this change it is possible to compile and run ntfs-3g. It
works read/write for ntfs images and shows no faults at least with
superficial testing. I did not test it against a block device,
only an image.
Thanks to Tracy and Jason for help with the test image.
fuse does it: read directory completely into refuse buffers if starting
from read offset 0 and for later calls trickle results from the buffers
to the kernel without consulting the fuse file system.
based on top of libpuffs. This version is still barebones and
incomplete, but will benefit from others working on it, rather than
just me.
The option code has still to be implemented, but this gets far enough
to run hellofs (from the fuse web page):
% priv ./hellofs ~/hellofs/mnt &
% l ~/hellofs/mnt
total 2
drwxr-xr-x 2 root wheel 0 Jan 1 1970 .
drwxr-xr-x 4 agc agc 512 Feb 9 18:05 ..
-r--r--r-- 1 root wheel 13 Jan 1 1970 hello
% cat ~/hellofs/mnt/hello
Hello World!
% df ~/hellofs/mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/dk0 28101396 18946682 7749646 70% /
kernfs 1 1 0 100% /kern
procfs 4 4 0 100% /proc
ptyfs 1 1 0 100% /dev/pts
puffs:refuse:hellofs 28101396 18946682 7749646 70% /home/agc/hellofs/mnt
% mount -v -v
...
mount: mount_puffs not found for /home/agc/hellofs/mnt
puffs:refuse:hellofs on /home/agc/hellofs/mnt type puffs (nosuid, nodev, fsid: 0xcb01/0x6acb, reads: sync 0 async 0, writes: sync 0 async 0)
%
This code is not enabled by default. Yet.