diff options
Diffstat (limited to 'contrib/perl5/ext/Fcntl/Fcntl.pm')
-rw-r--r-- | contrib/perl5/ext/Fcntl/Fcntl.pm | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/contrib/perl5/ext/Fcntl/Fcntl.pm b/contrib/perl5/ext/Fcntl/Fcntl.pm new file mode 100644 index 0000000..f1edb8e --- /dev/null +++ b/contrib/perl5/ext/Fcntl/Fcntl.pm @@ -0,0 +1,137 @@ +package Fcntl; + +=head1 NAME + +Fcntl - load the C Fcntl.h defines + +=head1 SYNOPSIS + + use Fcntl; + use Fcntl qw(:DEFAULT :flock); + +=head1 DESCRIPTION + +This module is just a translation of the C F<fnctl.h> file. +Unlike the old mechanism of requiring a translated F<fnctl.ph> +file, this uses the B<h2xs> program (see the Perl source distribution) +and your native C compiler. This means that it has a +far more likely chance of getting the numbers right. + +=head1 NOTE + +Only C<#define> symbols get translated; you must still correctly +pack up your own arguments to pass as args for locking functions, etc. + +=head1 EXPORTED SYMBOLS + +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. + +=cut + +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD); + +require Exporter; +require DynaLoader; +@ISA = qw(Exporter DynaLoader); +$VERSION = "1.03"; +# Items to export into callers namespace by default +# (move infrequently used names to @EXPORT_OK below) +@EXPORT = + qw( + FD_CLOEXEC + F_DUPFD + F_EXLCK + F_GETFD + F_GETFL + F_GETLK + F_GETOWN + F_POSIX + F_RDLCK + F_SETFD + F_SETFL + F_SETLK + F_SETLKW + F_SETOWN + F_SHLCK + F_UNLCK + F_WRLCK + O_ACCMODE + O_APPEND + O_ASYNC + O_BINARY + O_CREAT + O_DEFER + O_DSYNC + O_EXCL + O_EXLOCK + O_NDELAY + O_NOCTTY + O_NONBLOCK + O_RDONLY + O_RDWR + O_RSYNC + O_SHLOCK + O_SYNC + O_TEXT + O_TRUNC + O_WRONLY + ); + +# Other items we are prepared to export if requested +@EXPORT_OK = qw( + FAPPEND + FASYNC + FCREAT + FDEFER + FEXCL + FNDELAY + FNONBLOCK + 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)], + 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FEXCL + FNDELAY FNONBLOCK FSYNC FTRUNC)], +); + +sub AUTOLOAD { + (my $constname = $AUTOLOAD) =~ s/.*:://; + my $val = constant($constname, 0); + if ($! != 0) { + if ($! =~ /Invalid/) { + $AutoLoader::AUTOLOAD = $AUTOLOAD; + goto &AutoLoader::AUTOLOAD; + } + else { + my ($pack,$file,$line) = caller; + die "Your vendor has not defined Fcntl macro $constname, used at $file line $line. +"; + } + } + *$AUTOLOAD = sub { $val }; + goto &$AUTOLOAD; +} + +bootstrap Fcntl $VERSION; + +1; |