our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = ();
-our $VERSION = '0.14';
+our $VERSION = '0.15';
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
sub main {
my @names = qw(getattr readlink getdir mknod mkdir unlink rmdir symlink
rename link chmod chown truncate utime open read write statfs
- flush release fsync setxattr getxattr listxattr removexattr);
+ flush release fsync setxattr getxattr listxattr removexattr
+ opendir readdir releasedir fsyncdir init destroy access
+ create ftruncate fgetattr lock utimens bmap);
my $fuse_version = fuse_version();
- if ($fuse_version >= 2.3) {
- push(@names, qw/opendir readdir releasedir fsyncdir init destroy/);
- }
- if ($fuse_version >= 2.5) {
- push(@names, qw/access create ftruncate fgetattr/);
- }
- if ($fuse_version >= 2.6) {
- push(@names, qw/lock utimens bmap/);
- }
if ($fuse_version >= 2.8) {
# junk doesn't contain a function pointer, and hopefully
# never will; it's a "dead" zone in the struct
The fileinfo hash reference contains flags from the Fuse open call which may be modified by the module. The only fields presently supported are:
direct_io (version 2.4 onwards)
keep_cache (version 2.4 onwards)
- nonseekable (version 2.9 onwards)
+ nonseekable (version 2.8 onwards)
Your open() method needs only check if the operation is permitted for the given flags, and return 0 for success.
Optionally a file handle may be returned, which will be passed to subsequent read, write, flush, fsync and release calls.
=head3 release
Arguments: Pathname, numeric flags passed to open, file handle
+
Returns an errno or 0 on success.
Called to indicate that there are no more references to the file. Called once
Returns an errno or 0 on success.
+Removes the named extended attribute (if present) from a file.
+
=head3 opendir
Arguments: Pathname of a directory
Returns errno or 0 on success
-Like utime(), but allows time resolution down to the nanosecond. Currently
-times are passed as "numeric" (internally I believe these are represented
-typically as "long double"), so the sub-second portion is represented as
-fractions of a second.
-
-Note that if this call is implemented, it overrides utime() ALWAYS.
-
-Also note that if you want times passed as arrays instead of floating point
+Like utime(), but allows time resolution down to the nanosecond. By default,
+times are passed as "numeric" (internally these are typically represented
+as "double"), so the sub-second portion is represented as fractions of a
+second. If you want times passed as arrays instead of floating point
values, for higher precision, you should pass the C<utimens_as_array> option
to C<Fuse::main>.
+Note that if this call is implemented, it overrides utime() ALWAYS.
+
=head3 bmap
Arguments: Pathname, numeric blocksize, numeric block number
=head3 ioctl
-Arguments: Pathname, (signed) ioctl command code, flags, data if ioctl op is a write, (optional) file handle
+Arguments: Pathname, ioctl command code, flags, data if ioctl op is a write, (optional) file handle
Returns errno or 0 on success, and data if ioctl op is a read