X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FFcntl%2FFcntl.pm;h=067c0612efd8d6a2201386be291021a96a903476;hb=2a5d9b1d41e4bafaa26126c5dea2f6ff0b72b6a7;hp=8ce761c50b4047b17786245a3acfa55ac568d7fb;hpb=0c634585ef35014b7459d1eb5dff6f0b3ef8f646;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/Fcntl/Fcntl.pm b/ext/Fcntl/Fcntl.pm index 8ce761c..067c061 100644 --- a/ext/Fcntl/Fcntl.pm +++ b/ext/Fcntl/Fcntl.pm @@ -11,8 +11,8 @@ Fcntl - load the C Fcntl.h defines =head1 DESCRIPTION -This module is just a translation of the C F file. -Unlike the old mechanism of requiring a translated F +This module is just a translation of the C F file. +Unlike the old mechanism of requiring a translated F file, this uses the B 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. @@ -60,7 +60,10 @@ our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD); require Exporter; use XSLoader (); @ISA = qw(Exporter); -$VERSION = "1.03"; +BEGIN { + $VERSION = "1.05"; +} + # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = @@ -118,11 +121,15 @@ $VERSION = "1.03"; O_NDELAY O_NOCTTY O_NOFOLLOW + O_NOINHERIT O_NONBLOCK + O_RANDOM + O_RAW O_RDONLY O_RDWR O_RSRC O_RSYNC + O_SEQUENTIAL O_SHLOCK O_SYNC O_TEMPORARY @@ -133,6 +140,13 @@ $VERSION = "1.03"; # Other items we are prepared to export if requested @EXPORT_OK = qw( + DN_ACCESS + DN_ATTRIB + DN_CREATE + DN_DELETE + DN_MODIFY + DN_MULTISHOT + DN_RENAME FAPPEND FASYNC FCREAT @@ -145,22 +159,35 @@ $VERSION = "1.03"; FRSYNC FSYNC FTRUNC + F_GETLEASE + F_GETSIG + F_NOTIFY + F_SETLEASE + F_SETSIG LOCK_EX + LOCK_MAND LOCK_NB + LOCK_READ + LOCK_RW LOCK_SH LOCK_UN - S_ISUID S_ISGID S_ISVTX S_ISTXT - _S_IFMT S_IFREG S_IFDIR S_IFLNK + LOCK_WRITE + O_IGNORE_CTTY + O_NOATIME + O_NOLINK + O_NOTRANS + SEEK_CUR + SEEK_END + SEEK_SET S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT - S_IRUSR S_IWUSR S_IXUSR S_IRWXU + S_IREAD S_IWRITE S_IEXEC S_IRGRP S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO - S_IREAD S_IWRITE S_IEXEC + S_IRUSR S_IWUSR S_IXUSR S_IRWXU + S_ISUID S_ISGID S_ISVTX S_ISTXT + _S_IFMT S_IFREG S_IFDIR S_IFLNK &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE - SEEK_SET - SEEK_CUR - SEEK_END ); # Named groups of exports %EXPORT_TAGS = ( @@ -182,37 +209,34 @@ $VERSION = "1.03"; )], ); -sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() } +# Force the constants to become inlined +BEGIN { + XSLoader::load 'Fcntl', $VERSION; +} + +sub S_IFMT { @_ ? ( $_[0] & _S_IFMT ) : _S_IFMT } sub S_IMODE { $_[0] & 07777 } -sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() } -sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() } -sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() } -sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() } -sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() } -sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() } -sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() } -sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_ISWHT() } -sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_ISENFMT() } +sub S_ISREG { ( $_[0] & _S_IFMT ) == S_IFREG } +sub S_ISDIR { ( $_[0] & _S_IFMT ) == S_IFDIR } +sub S_ISLNK { ( $_[0] & _S_IFMT ) == S_IFLNK } +sub S_ISSOCK { ( $_[0] & _S_IFMT ) == S_IFSOCK } +sub S_ISBLK { ( $_[0] & _S_IFMT ) == S_IFBLK } +sub S_ISCHR { ( $_[0] & _S_IFMT ) == S_IFCHR } +sub S_ISFIFO { ( $_[0] & _S_IFMT ) == S_IFIFO } +sub S_ISWHT { ( $_[0] & _S_IFMT ) == S_IFWHT } +sub S_ISENFMT { ( $_[0] & _S_IFMT ) == S_IFENFMT } sub AUTOLOAD { (my $constname = $AUTOLOAD) =~ s/.*:://; - my $val = constant($constname, 0); - if ($! != 0) { - if ($! =~ /Invalid/ || $!{EINVAL}) { - $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. -"; - } + die "&Fcntl::constant not defined" if $constname eq 'constant'; + my ($error, $val) = constant($constname); + if ($error) { + my (undef,$file,$line) = caller; + die "$error at $file line $line.\n"; } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } -XSLoader::load 'Fcntl', $VERSION; - 1;