update Changes, patchlevel etc.
[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
7e1af8bc 45use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
73c78b0a 46
a0d0e21e 47require Exporter;
a0d0e21e 48require DynaLoader;
fec02dd3 49@ISA = qw(Exporter DynaLoader);
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
ac88732c 113 SEEK_SET
114 SEEK_CUR
115 SEEK_END
a0d0e21e 116 );
705af498 117
a0d0e21e 118# Other items we are prepared to export if requested
119@EXPORT_OK = qw(
0fd60c2a 120 FAPPEND
121 FASYNC
122 FCREAT
123 FDEFER
ac88732c 124 FDSYNC
0fd60c2a 125 FEXCL
ac88732c 126 FLARGEFILE
0fd60c2a 127 FNDELAY
128 FNONBLOCK
ac88732c 129 FRSYNC
0fd60c2a 130 FSYNC
131 FTRUNC
132 LOCK_EX
133 LOCK_NB
134 LOCK_SH
135 LOCK_UN
7e1af8bc 136);
137# Named groups of exports
138%EXPORT_TAGS = (
3e3baf6d 139 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 140 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
141 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
a0d0e21e 142);
143
144sub AUTOLOAD {
36c2d165 145 (my $constname = $AUTOLOAD) =~ s/.*:://;
146 my $val = constant($constname, 0);
a0d0e21e 147 if ($! != 0) {
265f5c4a 148 if ($! =~ /Invalid/ || $!{EINVAL}) {
a0d0e21e 149 $AutoLoader::AUTOLOAD = $AUTOLOAD;
150 goto &AutoLoader::AUTOLOAD;
151 }
152 else {
73c78b0a 153 my ($pack,$file,$line) = caller;
a0d0e21e 154 die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
155";
156 }
157 }
36c2d165 158 *$AUTOLOAD = sub { $val };
a0d0e21e 159 goto &$AUTOLOAD;
160}
161
73c78b0a 162bootstrap Fcntl $VERSION;
a0d0e21e 163
a0d0e21e 1641;