=head1 EXPORTED SYMBOLS
-By default your system's F_* and O_* constants (eg, F_DUPFD and O_CREAT)
-are exported into your namespace. You can request that the flock()
-constants (LOCK_SH, LOCK_EX, LOCK_NB and LOCK_UN) be provided by using
-the tag C<:flock>. See L<Exporter>.
+By default your system's F_* and O_* constants (eg, F_DUPFD and
+O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
+
+You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
+and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
+
+You can request that the old constants (FAPPEND, FASYNC, FCREAT,
+FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
+compatibility reasons by using the tag C<:Fcompat>. For new
+applications the newer versions of these constants are suggested
+(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
+O_SYNC, O_TRUNC).
Please refer to your native fcntl() and open() documentation to see
what constants are implemented in your system.
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
require Exporter;
-require DynaLoader;
-@ISA = qw(Exporter DynaLoader);
+use XSLoader ();
+@ISA = qw(Exporter);
$VERSION = "1.03";
# Items to export into callers namespace by default
# (move infrequently used names to @EXPORT_OK below)
@EXPORT =
qw(
- F_DUPFD F_GETFD F_GETLK F_SETFD F_GETFL F_SETFL F_SETLK F_SETLKW
- FD_CLOEXEC F_RDLCK F_UNLCK F_WRLCK
- O_CREAT O_EXCL O_NOCTTY O_TRUNC
- O_APPEND O_NONBLOCK
- O_NDELAY O_DEFER
- O_RDONLY O_RDWR O_WRONLY
- O_EXLOCK O_SHLOCK O_ASYNC O_DSYNC O_RSYNC O_SYNC
- F_SETOWN F_GETOWN
+ FD_CLOEXEC
+ F_ALLOCSP
+ F_ALLOCSP64
+ F_COMPAT
+ F_DUP2FD
+ F_DUPFD
+ F_EXLCK
+ F_FREESP
+ F_FREESP64
+ F_FSYNC
+ F_FSYNC64
+ F_GETFD
+ F_GETFL
+ F_GETLK
+ F_GETLK64
+ F_GETOWN
+ F_NODNY
+ F_POSIX
+ F_RDACC
+ F_RDDNY
+ F_RDLCK
+ F_RWACC
+ F_RWDNY
+ F_SETFD
+ F_SETFL
+ F_SETLK
+ F_SETLK64
+ F_SETLKW
+ F_SETLKW64
+ F_SETOWN
+ F_SHARE
+ F_SHLCK
+ F_UNLCK
+ F_UNSHARE
+ F_WRACC
+ F_WRDNY
+ F_WRLCK
+ O_ACCMODE
+ O_APPEND
+ O_ASYNC
+ O_BINARY
+ O_CREAT
+ O_DEFER
+ O_DSYNC
+ O_EXCL
+ O_EXLOCK
+ O_LARGEFILE
+ O_NDELAY
+ O_NOCTTY
+ O_NONBLOCK
+ O_RDONLY
+ O_RDWR
+ O_RSYNC
+ O_SHLOCK
+ O_SYNC
+ O_TEXT
+ O_TRUNC
+ O_WRONLY
+ O_ALIAS
+ O_RSRC
+ SEEK_SET
+ SEEK_CUR
+ SEEK_END
);
# Other items we are prepared to export if requested
@EXPORT_OK = qw(
- LOCK_SH LOCK_EX LOCK_NB LOCK_UN
+ FAPPEND
+ FASYNC
+ FCREAT
+ FDEFER
+ FDSYNC
+ FEXCL
+ FLARGEFILE
+ FNDELAY
+ FNONBLOCK
+ FRSYNC
+ FSYNC
+ FTRUNC
+ LOCK_EX
+ LOCK_NB
+ LOCK_SH
+ LOCK_UN
);
# Named groups of exports
%EXPORT_TAGS = (
- 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
+ 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
+ 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
+ FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
);
sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
+ (my $constname = $AUTOLOAD) =~ s/.*:://;
+ my $val = constant($constname, 0);
if ($! != 0) {
- if ($! =~ /Invalid/) {
+ if ($! =~ /Invalid/ || $!{EINVAL}) {
$AutoLoader::AUTOLOAD = $AUTOLOAD;
goto &AutoLoader::AUTOLOAD;
}
";
}
}
- eval "sub $AUTOLOAD { $val }";
+ *$AUTOLOAD = sub { $val };
goto &$AUTOLOAD;
}
-bootstrap Fcntl $VERSION;
+XSLoader::load 'Fcntl', $VERSION;
1;