Resync with mainline
[p5sagit/p5-mst-13.2.git] / ext / Fcntl / Fcntl.pm
CommitLineData
a0d0e21e 1package Fcntl;
2
3b35bae3 3=head1 NAME
4
5Fcntl - load the C Fcntl.h defines
6
7=head1 SYNOPSIS
8
9 use Fcntl;
7e1af8bc 10 use Fcntl qw(:DEFAULT :flock);
3b35bae3 11
12=head1 DESCRIPTION
13
14This module is just a translation of the C F<fnctl.h> file.
15Unlike the old mechanism of requiring a translated F<fnctl.ph>
16file, this uses the B<h2xs> program (see the Perl source distribution)
17and your native C compiler. This means that it has a
18far more likely chance of getting the numbers right.
19
20=head1 NOTE
21
22Only C<#define> symbols get translated; you must still correctly
23pack up your own arguments to pass as args for locking functions, etc.
24
7e1af8bc 25=head1 EXPORTED SYMBOLS
26
3e3baf6d 27By default your system's F_* and O_* constants (eg, F_DUPFD and
28O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
29
30You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
31and LOCK_UN) be provided by using the tag C<:flock>. See L<Exporter>.
32
33You can request that the old constants (FAPPEND, FASYNC, FCREAT,
34FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
35compatibility reasons by using the tag C<:Fcompat>. For new
36applications the newer versions of these constants are suggested
37(O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
38O_SYNC, O_TRUNC).
7e1af8bc 39
705af498 40Please refer to your native fcntl() and open() documentation to see
41what constants are implemented in your system.
42
3b35bae3 43=cut
44
cb50131a 45our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
73c78b0a 46
a0d0e21e 47require Exporter;
146174a9 48use XSLoader ();
49@ISA = qw(Exporter);
5f832ef3 50$VERSION = "1.03";
a0d0e21e 51# Items to export into callers namespace by default
52# (move infrequently used names to @EXPORT_OK below)
53@EXPORT =
54 qw(
0fd60c2a 55 FD_CLOEXEC
ac88732c 56 F_ALLOCSP
57 F_ALLOCSP64
58 F_COMPAT
59 F_DUP2FD
0fd60c2a 60 F_DUPFD
61 F_EXLCK
ac88732c 62 F_FREESP
63 F_FREESP64
64 F_FSYNC
65 F_FSYNC64
0fd60c2a 66 F_GETFD
67 F_GETFL
68 F_GETLK
5ff3f7a4 69 F_GETLK64
0fd60c2a 70 F_GETOWN
ac88732c 71 F_NODNY
0fd60c2a 72 F_POSIX
ac88732c 73 F_RDACC
74 F_RDDNY
0fd60c2a 75 F_RDLCK
ac88732c 76 F_RWACC
77 F_RWDNY
0fd60c2a 78 F_SETFD
79 F_SETFL
80 F_SETLK
5ff3f7a4 81 F_SETLK64
0fd60c2a 82 F_SETLKW
5ff3f7a4 83 F_SETLKW64
0fd60c2a 84 F_SETOWN
ac88732c 85 F_SHARE
0fd60c2a 86 F_SHLCK
87 F_UNLCK
ac88732c 88 F_UNSHARE
89 F_WRACC
90 F_WRDNY
0fd60c2a 91 F_WRLCK
92 O_ACCMODE
93 O_APPEND
94 O_ASYNC
95 O_BINARY
96 O_CREAT
97 O_DEFER
98 O_DSYNC
99 O_EXCL
100 O_EXLOCK
5ff3f7a4 101 O_LARGEFILE
0fd60c2a 102 O_NDELAY
103 O_NOCTTY
104 O_NONBLOCK
105 O_RDONLY
106 O_RDWR
107 O_RSYNC
108 O_SHLOCK
109 O_SYNC
110 O_TEXT
111 O_TRUNC
112 O_WRONLY
146174a9 113 O_ALIAS
114 O_RSRC
ac88732c 115 SEEK_SET
116 SEEK_CUR
117 SEEK_END
a0d0e21e 118 );
705af498 119
a0d0e21e 120# Other items we are prepared to export if requested
121@EXPORT_OK = qw(
0fd60c2a 122 FAPPEND
123 FASYNC
124 FCREAT
125 FDEFER
ac88732c 126 FDSYNC
0fd60c2a 127 FEXCL
ac88732c 128 FLARGEFILE
0fd60c2a 129 FNDELAY
130 FNONBLOCK
ac88732c 131 FRSYNC
0fd60c2a 132 FSYNC
133 FTRUNC
134 LOCK_EX
135 LOCK_NB
136 LOCK_SH
137 LOCK_UN
7e1af8bc 138);
139# Named groups of exports
140%EXPORT_TAGS = (
3e3baf6d 141 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 142 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
143 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
a0d0e21e 144);
145
146sub AUTOLOAD {
36c2d165 147 (my $constname = $AUTOLOAD) =~ s/.*:://;
148 my $val = constant($constname, 0);
a0d0e21e 149 if ($! != 0) {
265f5c4a 150 if ($! =~ /Invalid/ || $!{EINVAL}) {
a0d0e21e 151 $AutoLoader::AUTOLOAD = $AUTOLOAD;
152 goto &AutoLoader::AUTOLOAD;
153 }
154 else {
73c78b0a 155 my ($pack,$file,$line) = caller;
a0d0e21e 156 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
157";
158 }
159 }
36c2d165 160 *$AUTOLOAD = sub { $val };
a0d0e21e 161 goto &$AUTOLOAD;
162}
163
146174a9 164XSLoader::load 'Fcntl', $VERSION;
a0d0e21e 165
a0d0e21e 1661;