package POSIX;
+our(@ISA, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD) = ();
+
use Carp;
use AutoLoader;
require Config;
use Symbol;
require Exporter;
-require DynaLoader;
-@ISA = qw(Exporter DynaLoader);
+use XSLoader ();
+@ISA = qw(Exporter);
-$VERSION = $VERSION = "1.00" ;
+our $VERSION = "1.03" ;
%EXPORT_TAGS = (
dirent_h => [qw()],
- errno_h => [qw(E2BIG EACCES EAGAIN EBADF EBUSY ECHILD EDEADLK EDOM
- EEXIST EFAULT EFBIG EINTR EINVAL EIO EISDIR EMFILE
- EMLINK ENAMETOOLONG ENFILE ENODEV ENOENT ENOEXEC ENOLCK
- ENOMEM ENOSPC ENOSYS ENOTDIR ENOTEMPTY ENOTTY ENXIO
- EPERM EPIPE ERANGE EROFS ESPIPE ESRCH EXDEV errno)],
+ errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT
+ EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED
+ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
+ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS
+ EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
+ ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM
+ ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR
+ ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE
+ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT
+ ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY
+ EUSERS EWOULDBLOCK EXDEV errno)],
fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK
F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK
_POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
_POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX
_POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
- _POSIX_STREADM_MAX _POSIX_TZNAME_MAX)],
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)],
locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC
LC_TIME NULL localeconv setlocale)],
setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)],
- signal_h => [qw(SA_NOCLDSTOP SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE
- SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV
- SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2
- SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK
- raise sigaction signal sigpending sigprocmask
- sigsuspend)],
+ signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM
+ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL
+ SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN
+ SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal
+ sigpending sigprocmask sigsuspend)],
stdarg_h => [qw()],
stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
abort atexit atof atoi atol bsearch calloc div
free getenv labs ldiv malloc mblen mbstowcs mbtowc
- qsort realloc strtod strtol stroul wcstombs wctomb)],
+ qsort realloc strtod strtol strtoul wcstombs wctomb)],
string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
strchr strcmp strcoll strcpy strcspn strerror strlen
);
-Exporter::export_tags();
+# Exporter::export_tags();
+for (values %EXPORT_TAGS) {
+ push @EXPORT, @$_;
+}
@EXPORT_OK = qw(
closedir opendir readdir rewinddir
alarm chdir chown close fork getlogin getppid getpgrp link
pipe read rmdir sleep unlink write
utime
+ nice
);
# Grandfather old foo_h form to new :foo_h form
}
-bootstrap POSIX;
+XSLoader::load 'POSIX', $VERSION;
my $EINVAL = constant("EINVAL", 0);
my $EAGAIN = constant("EAGAIN", 0);
local $! = 0;
my $constname = $AUTOLOAD;
$constname =~ s/.*:://;
- my $val = constant($constname, $_[0]);
+ my $val = constant($constname, @_ ? $_[0] : 0);
if ($! == 0) {
*$AUTOLOAD = sub { $val };
}
package POSIX::SigAction;
sub new {
- bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3]};
+ bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0];
}
############################
sub closedir {
usage "closedir(dirhandle)" if @_ != 1;
- closedir($_[0]);
+ CORE::closedir($_[0]);
}
sub opendir {
usage "opendir(directory)" if @_ != 1;
my $dirhandle = gensym;
- opendir($dirhandle, $_[0])
+ CORE::opendir($dirhandle, $_[0])
? $dirhandle
: undef;
}
sub readdir {
usage "readdir(dirhandle)" if @_ != 1;
- readdir($_[0]);
+ CORE::readdir($_[0]);
}
sub rewinddir {
usage "rewinddir(dirhandle)" if @_ != 1;
- rewinddir($_[0]);
+ CORE::rewinddir($_[0]);
}
sub errno {
sub fcntl {
usage "fcntl(filehandle, cmd, arg)" if @_ != 3;
- fcntl($_[0], $_[1], $_[2]);
+ CORE::fcntl($_[0], $_[1], $_[2]);
}
sub getgrgid {
usage "getgrgid(gid)" if @_ != 1;
- getgrgid($_[0]);
+ CORE::getgrgid($_[0]);
}
sub getgrnam {
usage "getgrnam(name)" if @_ != 1;
- getgrnam($_[0]);
+ CORE::getgrnam($_[0]);
}
sub atan2 {
usage "atan2(x,y)" if @_ != 2;
- atan2($_[0], $_[1]);
+ CORE::atan2($_[0], $_[1]);
}
sub cos {
usage "cos(x)" if @_ != 1;
- cos($_[0]);
+ CORE::cos($_[0]);
}
sub exp {
usage "exp(x)" if @_ != 1;
- exp($_[0]);
+ CORE::exp($_[0]);
}
sub fabs {
usage "fabs(x)" if @_ != 1;
- abs($_[0]);
+ CORE::abs($_[0]);
}
sub log {
usage "log(x)" if @_ != 1;
- log($_[0]);
+ CORE::log($_[0]);
}
sub pow {
sub sin {
usage "sin(x)" if @_ != 1;
- sin($_[0]);
+ CORE::sin($_[0]);
}
sub sqrt {
usage "sqrt(x)" if @_ != 1;
- sqrt($_[0]);
+ CORE::sqrt($_[0]);
}
sub getpwnam {
usage "getpwnam(name)" if @_ != 1;
- getpwnam($_[0]);
+ CORE::getpwnam($_[0]);
}
sub getpwuid {
usage "getpwuid(uid)" if @_ != 1;
- getpwuid($_[0]);
+ CORE::getpwuid($_[0]);
}
sub longjmp {
sub kill {
usage "kill(pid, sig)" if @_ != 2;
- kill $_[1], $_[0];
+ CORE::kill $_[1], $_[0];
}
sub raise {
usage "raise(sig)" if @_ != 1;
- kill $$, $_[0]; # Is this good enough?
+ CORE::kill $_[0], $$; # Is this good enough?
}
sub offsetof {
}
sub clearerr {
- redef "FileHandle::clearerr()";
+ redef "IO::Handle::clearerr()";
}
sub fclose {
- redef "FileHandle::close()";
+ redef "IO::Handle::close()";
}
sub fdopen {
- redef "FileHandle::new_from_fd()";
+ redef "IO::Handle::new_from_fd()";
}
sub feof {
- redef "FileHandle::eof()";
+ redef "IO::Handle::eof()";
}
sub fgetc {
- redef "FileHandle::getc()";
+ redef "IO::Handle::getc()";
}
sub fgets {
- redef "FileHandle::gets()";
+ redef "IO::Handle::gets()";
}
sub fileno {
- redef "FileHandle::fileno()";
+ redef "IO::Handle::fileno()";
}
sub fopen {
- redef "FileHandle::open()";
+ redef "IO::File::open()";
}
sub fprintf {
}
sub fseek {
- redef "FileHandle::seek()";
+ redef "IO::Seekable::seek()";
}
sub ferror {
- redef "FileHandle::error()";
+ redef "IO::Handle::error()";
}
sub fflush {
- redef "FileHandle::flush()";
+ redef "IO::Handle::flush()";
}
sub fgetpos {
- redef "FileHandle::getpos()";
+ redef "IO::Seekable::getpos()";
}
sub fsetpos {
- redef "FileHandle::setpos()";
+ redef "IO::Seekable::setpos()";
}
sub ftell {
- redef "FileHandle::tell()";
+ redef "IO::Seekable::tell()";
}
sub fwrite {
sub getc {
usage "getc(handle)" if @_ != 1;
- getc($_[0]);
+ CORE::getc($_[0]);
}
sub getchar {
usage "getchar()" if @_ != 0;
- getc(STDIN);
+ CORE::getc(STDIN);
}
sub gets {
sub printf {
usage "printf(pattern, args...)" if @_ < 1;
- printf STDOUT @_;
+ CORE::printf STDOUT @_;
}
sub putc {
sub remove {
usage "remove(filename)" if @_ != 1;
- unlink($_[0]);
+ CORE::unlink($_[0]);
}
sub rename {
usage "rename(oldfilename, newfilename)" if @_ != 2;
- rename($_[0], $_[1]);
+ CORE::rename($_[0], $_[1]);
}
sub rewind {
usage "rewind(filehandle)" if @_ != 1;
- seek($_[0],0,0);
+ CORE::seek($_[0],0,0);
}
sub scanf {
sub sprintf {
usage "sprintf(pattern,args)" if @_ == 0;
- sprintf(shift,@_);
+ CORE::sprintf(shift,@_);
}
sub sscanf {
}
sub tmpfile {
- redef "FileHandle::new_tmpfile()";
+ redef "IO::File::new_tmpfile()";
}
sub ungetc {
- redef "FileHandle::ungetc()";
+ redef "IO::Handle::ungetc()";
}
sub vfprintf {
sub abs {
usage "abs(x)" if @_ != 1;
- abs($_[0]);
+ CORE::abs($_[0]);
}
sub atexit {
sub exit {
usage "exit(status)" if @_ != 1;
- exit($_[0]);
+ CORE::exit($_[0]);
}
sub free {
unimpl "srand()";
}
-sub strtod {
- unimpl "strtod() is C-specific, stopped";
-}
-
-sub strtol {
- unimpl "strtol() is C-specific, stopped";
-}
-
-sub stroul {
- unimpl "stroul() is C-specific, stopped";
-}
-
sub system {
usage "system(command)" if @_ != 1;
- system($_[0]);
+ CORE::system($_[0]);
}
sub memchr {
sub strstr {
usage "strstr(big, little)" if @_ != 2;
- index($_[0], $_[1]);
+ CORE::index($_[0], $_[1]);
}
sub strtok {
sub chmod {
usage "chmod(mode, filename)" if @_ != 2;
- chmod($_[0], $_[1]);
+ CORE::chmod($_[0], $_[1]);
}
sub fstat {
usage "fstat(fd)" if @_ != 1;
local *TMP;
open(TMP, "<&$_[0]"); # Gross.
- my @l = stat(TMP);
+ my @l = CORE::stat(TMP);
close(TMP);
@l;
}
sub mkdir {
usage "mkdir(directoryname, mode)" if @_ != 2;
- mkdir($_[0], $_[1]);
+ CORE::mkdir($_[0], $_[1]);
}
sub stat {
usage "stat(filename)" if @_ != 1;
- stat($_[0]);
+ CORE::stat($_[0]);
}
sub umask {
usage "umask(mask)" if @_ != 1;
- umask($_[0]);
+ CORE::umask($_[0]);
}
sub wait {
usage "wait()" if @_ != 0;
- wait();
+ CORE::wait();
}
sub waitpid {
usage "waitpid(pid, options)" if @_ != 2;
- waitpid($_[0], $_[1]);
+ CORE::waitpid($_[0], $_[1]);
}
sub gmtime {
usage "gmtime(time)" if @_ != 1;
- gmtime($_[0]);
+ CORE::gmtime($_[0]);
}
sub localtime {
usage "localtime(time)" if @_ != 1;
- localtime($_[0]);
+ CORE::localtime($_[0]);
}
sub time {
usage "time()" if @_ != 0;
- time;
+ CORE::time;
}
sub alarm {
usage "alarm(seconds)" if @_ != 1;
- alarm($_[0]);
+ CORE::alarm($_[0]);
}
sub chdir {
usage "chdir(directory)" if @_ != 1;
- chdir($_[0]);
+ CORE::chdir($_[0]);
}
sub chown {
usage "chown(filename, uid, gid)" if @_ != 3;
- chown($_[0], $_[1], $_[2]);
+ CORE::chown($_[0], $_[1], $_[2]);
}
sub execl {
sub fork {
usage "fork()" if @_ != 0;
- fork;
+ CORE::fork;
}
sub getcwd
{
usage "getcwd()" if @_ != 0;
- chop($cwd = `pwd`);
+ if ($^O eq 'MSWin32') {
+ # this perhaps applies to everyone else also?
+ require Cwd;
+ $cwd = &Cwd::cwd;
+ }
+ else {
+ chop($cwd = `pwd`);
+ }
$cwd;
}
sub getlogin {
usage "getlogin()" if @_ != 0;
- getlogin();
+ CORE::getlogin();
}
sub getpgrp {
usage "getpgrp()" if @_ != 0;
- getpgrp($_[0]);
+ CORE::getpgrp;
}
sub getpid {
sub getppid {
usage "getppid()" if @_ != 0;
- getppid;
+ CORE::getppid;
}
sub getuid {
sub link {
usage "link(oldfilename, newfilename)" if @_ != 2;
- link($_[0], $_[1]);
+ CORE::link($_[0], $_[1]);
}
sub rmdir {
usage "rmdir(directoryname)" if @_ != 1;
- rmdir($_[0]);
+ CORE::rmdir($_[0]);
+}
+
+sub setbuf {
+ redef "IO::Handle::setbuf()";
}
sub setgid {
$< = $_[0];
}
+sub setvbuf {
+ redef "IO::Handle::setvbuf()";
+}
+
sub sleep {
usage "sleep(seconds)" if @_ != 1;
- sleep($_[0]);
+ CORE::sleep($_[0]);
}
sub unlink {
usage "unlink(filename)" if @_ != 1;
- unlink($_[0]);
+ CORE::unlink($_[0]);
}
sub utime {
usage "utime(filename, atime, mtime)" if @_ != 3;
- utime($_[1], $_[2], $_[0]);
+ CORE::utime($_[1], $_[2], $_[0]);
}