Mark new regex glob test as a TODO on VMS.
[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
554ad1fc 14This module is just a translation of the C F<fcntl.h> file.
15Unlike the old mechanism of requiring a translated F<fcntl.ph>
3b35bae3 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
ca6e1c26 40For ease of use also the SEEK_* constants (for seek() and sysseek(),
41e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
42available for import. They can be imported either separately or using
43the tags C<:seek> and C<:mode>.
44
45Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
46(equal to Perl's seek() and sysseek(), respectively), and chmod(2)
47documentation to see what constants are implemented in your system.
48
49See L<perlopentut> to learn about the uses of the O_* constants
50with sysopen().
51
52See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
53
54See L<perlfunc/stat> about the S_I* constants.
705af498 55
3b35bae3 56=cut
57
17f410f9 58our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
73c78b0a 59
a0d0e21e 60require Exporter;
9426adcd 61use XSLoader ();
62@ISA = qw(Exporter);
0e6f150f 63BEGIN {
64 $VERSION = "1.05";
65}
66
a0d0e21e 67# Items to export into callers namespace by default
68# (move infrequently used names to @EXPORT_OK below)
69@EXPORT =
70 qw(
0fd60c2a 71 FD_CLOEXEC
ac88732c 72 F_ALLOCSP
73 F_ALLOCSP64
74 F_COMPAT
75 F_DUP2FD
0fd60c2a 76 F_DUPFD
77 F_EXLCK
ac88732c 78 F_FREESP
79 F_FREESP64
80 F_FSYNC
81 F_FSYNC64
0fd60c2a 82 F_GETFD
83 F_GETFL
84 F_GETLK
5ff3f7a4 85 F_GETLK64
0fd60c2a 86 F_GETOWN
ac88732c 87 F_NODNY
0fd60c2a 88 F_POSIX
ac88732c 89 F_RDACC
90 F_RDDNY
0fd60c2a 91 F_RDLCK
ac88732c 92 F_RWACC
93 F_RWDNY
0fd60c2a 94 F_SETFD
95 F_SETFL
96 F_SETLK
5ff3f7a4 97 F_SETLK64
0fd60c2a 98 F_SETLKW
5ff3f7a4 99 F_SETLKW64
0fd60c2a 100 F_SETOWN
ac88732c 101 F_SHARE
0fd60c2a 102 F_SHLCK
103 F_UNLCK
ac88732c 104 F_UNSHARE
105 F_WRACC
106 F_WRDNY
0fd60c2a 107 F_WRLCK
108 O_ACCMODE
ca6e1c26 109 O_ALIAS
0fd60c2a 110 O_APPEND
111 O_ASYNC
112 O_BINARY
113 O_CREAT
114 O_DEFER
ca6e1c26 115 O_DIRECT
116 O_DIRECTORY
0fd60c2a 117 O_DSYNC
118 O_EXCL
119 O_EXLOCK
5ff3f7a4 120 O_LARGEFILE
0fd60c2a 121 O_NDELAY
122 O_NOCTTY
ca6e1c26 123 O_NOFOLLOW
8c99d73e 124 O_NOINHERIT
0fd60c2a 125 O_NONBLOCK
8c99d73e 126 O_RANDOM
127 O_RAW
0fd60c2a 128 O_RDONLY
129 O_RDWR
ca6e1c26 130 O_RSRC
0fd60c2a 131 O_RSYNC
8c99d73e 132 O_SEQUENTIAL
0fd60c2a 133 O_SHLOCK
134 O_SYNC
ca6e1c26 135 O_TEMPORARY
0fd60c2a 136 O_TEXT
137 O_TRUNC
138 O_WRONLY
a0d0e21e 139 );
705af498 140
a0d0e21e 141# Other items we are prepared to export if requested
142@EXPORT_OK = qw(
5bb8c70c 143 DN_ACCESS
144 DN_ATTRIB
145 DN_CREATE
146 DN_DELETE
147 DN_MODIFY
148 DN_MULTISHOT
149 DN_RENAME
0fd60c2a 150 FAPPEND
151 FASYNC
152 FCREAT
153 FDEFER
ac88732c 154 FDSYNC
0fd60c2a 155 FEXCL
ac88732c 156 FLARGEFILE
0fd60c2a 157 FNDELAY
158 FNONBLOCK
ac88732c 159 FRSYNC
0fd60c2a 160 FSYNC
161 FTRUNC
5bb8c70c 162 F_GETLEASE
163 F_GETSIG
164 F_NOTIFY
165 F_SETLEASE
166 F_SETSIG
0fd60c2a 167 LOCK_EX
5bb8c70c 168 LOCK_MAND
0fd60c2a 169 LOCK_NB
5bb8c70c 170 LOCK_READ
171 LOCK_RW
0fd60c2a 172 LOCK_SH
173 LOCK_UN
5bb8c70c 174 LOCK_WRITE
175 O_IGNORE_CTTY
176 O_NOATIME
177 O_NOLINK
178 O_NOTRANS
179 SEEK_CUR
180 SEEK_END
181 SEEK_SET
ca6e1c26 182 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
5bb8c70c 183 S_IREAD S_IWRITE S_IEXEC
ca6e1c26 184 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
185 S_IROTH S_IWOTH S_IXOTH S_IRWXO
5bb8c70c 186 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
187 S_ISUID S_ISGID S_ISVTX S_ISTXT
188 _S_IFMT S_IFREG S_IFDIR S_IFLNK
ca6e1c26 189 &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
190 &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
7e1af8bc 191);
192# Named groups of exports
193%EXPORT_TAGS = (
3e3baf6d 194 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
ac88732c 195 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
ca6e1c26 196 FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
197 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)],
198 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
199 _S_IFMT S_IFREG S_IFDIR S_IFLNK
200 S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
201 S_IRUSR S_IWUSR S_IXUSR S_IRWXU
202 S_IRGRP S_IWGRP S_IXGRP S_IRWXG
203 S_IROTH S_IWOTH S_IXOTH S_IRWXO
204 S_IREAD S_IWRITE S_IEXEC
0c634585 205 S_ISREG S_ISDIR S_ISLNK S_ISSOCK
206 S_ISBLK S_ISCHR S_ISFIFO
207 S_ISWHT S_ISENFMT
208 S_IFMT S_IMODE
ca6e1c26 209 )],
a0d0e21e 210);
211
0e6f150f 212# Force the constants to become inlined
213BEGIN {
214 XSLoader::load 'Fcntl', $VERSION;
215}
216
217sub S_IFMT { @_ ? ( $_[0] & _S_IFMT ) : _S_IFMT }
0c634585 218sub S_IMODE { $_[0] & 07777 }
ca6e1c26 219
0e6f150f 220sub S_ISREG { ( $_[0] & _S_IFMT ) == S_IFREG }
221sub S_ISDIR { ( $_[0] & _S_IFMT ) == S_IFDIR }
222sub S_ISLNK { ( $_[0] & _S_IFMT ) == S_IFLNK }
223sub S_ISSOCK { ( $_[0] & _S_IFMT ) == S_IFSOCK }
224sub S_ISBLK { ( $_[0] & _S_IFMT ) == S_IFBLK }
225sub S_ISCHR { ( $_[0] & _S_IFMT ) == S_IFCHR }
226sub S_ISFIFO { ( $_[0] & _S_IFMT ) == S_IFIFO }
227sub S_ISWHT { ( $_[0] & _S_IFMT ) == S_IFWHT }
228sub S_ISENFMT { ( $_[0] & _S_IFMT ) == S_IFENFMT }
ca6e1c26 229
a0d0e21e 230sub AUTOLOAD {
36c2d165 231 (my $constname = $AUTOLOAD) =~ s/.*:://;
b903fcff 232 die "&Fcntl::constant not defined" if $constname eq 'constant';
233 my ($error, $val) = constant($constname);
234 if ($error) {
235 my (undef,$file,$line) = caller;
236 die "$error at $file line $line.\n";
a0d0e21e 237 }
0c634585 238 *$AUTOLOAD = sub { $val };
a0d0e21e 239 goto &$AUTOLOAD;
240}
241
a0d0e21e 2421;