Fix up read_buf docs. Change order of arguments for write_buf, to make it more consistent with read_buf. Fix up loopback.pl to use the new argument order for write_buf.
If a handler function with a name that isn't known is supplied to Fuse::main(), instead of croak, use carp. There are legitimate situations where a function (like one of the FUSE 2.8/2.9 specific ops) is passed, but isn't available due to the underlying libfuse being too old to use them, so they're just not available, and it's better to whine but not die over them.
Added accessors for the FUSE_BUF_* constants, and exported them under the 'zerocopy' and 'all' tags. Removed unnecessary detritus from the read_buf() wrapper.
Exported UTIME_NOW and UTIME_OMIT under 'ALL' and 'utime' tags. Implemented read_buf() operation, and added an implementation in example/loopback.pl. Only tested with memory, not with FD based mode. Fixed fallocate() wrapper to use the correct callback number. Altered testing infrastructure to pass logfile name to loopback.pl, and have it open the logfile, instead of trying to open it in test/s/mount.t, as since loopback.pl's daemonize() reopens stdout/stderr only /dev/null normally, the logfile is worthless. This makes it functional again.
Since the FUSE includes don't have a define for the micro version number, and the 'fallocate' operation is new as of FUSE 2.9.1, add a bit to the Makefile.PL to split up the version number into major, minor and micro numbers and add -D defines for the build to pass them in. Altered fuse_version() to provide separate major/minor/micro version numbers if called in array context. Added support for fallocate() and flock(). Also stubbed out read_buf() and write_buf(). Added support for the 'nopath' and 'utime_omit_ok' flags. Also, added implementations to access the UTIME_NOW and UTIME_OMIT constants. Added basic docs for fallocate() and flock(). Added change note to Changes file.
This reverts commit 53d7a8b.
Correct docs for open(), utimens() and ioctl() ops to match up with code changes. Add a blurb explaining what removexattr() does. Add an extra newline in the release() doc section to fully separate two things that should be actually separate.
Added an option to Fuse::main(), specifically "utimens_as_array", that causes timestamps to be passed as arrays containing the UNIX timestamp (seconds since the epoch), followed by the number of nanoseconds, instead of as a floating-point value, for better precision. However, I've noticed that when (on Linux, at least) you "touch" a file, which ends up with utimensat() getting passed a NULL value for the timestamp array, the resulting timestamp that utimens() gets always has a "0" for the nanosecond field. I think that's a FUSE misfunction.
This is my current-state support for poll() (my three-quarter-assed implementation of it anyway). I attempted to implement the poll handle as an object, but ran into threading problems with that, so it evolved in a slightly different direction. Also had to add a small hack in S_fh_store_handle(), as when it tried to use mg->mg_ptr to make the filehandle, the fsel.pl example file ended up with all the file descriptors lost but the one. I'm not currently sure why that's so; I've never seen that happen before, but it seems to be threading related, as if I disable the 'threaded' flag to Fuse::main(), it works. I think it may be an undiagnosed threading interaction...
Not sure if this will actually work yet, but it builds cleanly, and from my reading of docs and examples, this *seems* like the right way to implement the ioctl() call wrapper. (I'd already had this mostly implemented and disabled, but wasn't sure it was ready for prime time. We'll find out.)
…ation for readdir().
definitions of the constants from sys/xattr.h instead of setting them to arbitrary platform-specific constant values.