s/use vars/our/g modules that aren't independently maintained on CPAN
[p5sagit/p5-mst-13.2.git] / ext / POSIX / POSIX.pm
index ab309cc..59c753c 100644 (file)
@@ -1,15 +1,17 @@
 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 = (
 
@@ -20,11 +22,19 @@ $VERSION = $VERSION = "1.00" ;
 
     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
@@ -58,7 +68,7 @@ $VERSION = $VERSION = "1.00" ;
                _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)],
@@ -70,12 +80,13 @@ $VERSION = $VERSION = "1.00" ;
 
     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()],
 
@@ -94,7 +105,7 @@ $VERSION = $VERSION = "1.00" ;
     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
@@ -150,7 +161,10 @@ $VERSION = $VERSION = "1.00" ;
 
 );
 
-Exporter::export_tags();
+# Exporter::export_tags();
+for (values %EXPORT_TAGS) {
+  push @EXPORT, @$_;
+}
 
 @EXPORT_OK = qw(
     closedir opendir readdir rewinddir
@@ -168,6 +182,7 @@ Exporter::export_tags();
     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
@@ -179,7 +194,7 @@ sub import {
 }
 
 
-bootstrap POSIX;
+XSLoader::load 'POSIX', $VERSION;
 
 my $EINVAL = constant("EINVAL", 0);
 my $EAGAIN = constant("EAGAIN", 0);
@@ -192,7 +207,7 @@ sub AUTOLOAD {
     local $! = 0;
     my $constname = $AUTOLOAD;
     $constname =~ s/.*:://;
-    my $val = constant($constname, $_[0]);
+    my $val = constant($constname, @_ ? $_[0] : 0);
     if ($! == 0) {
        *$AUTOLOAD = sub { $val };
     }
@@ -229,7 +244,7 @@ sub unimpl {
 package POSIX::SigAction;
 
 sub new {
-    bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3]};
+    bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0];
 }
 
 ############################
@@ -256,25 +271,25 @@ sub toupper {
 
 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 {
@@ -289,42 +304,42 @@ sub creat {
 
 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 {
@@ -334,22 +349,22 @@ 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 {
@@ -370,12 +385,12 @@ sub sigsetjmp {
 
 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 {
@@ -383,35 +398,35 @@ 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 {
@@ -439,27 +454,27 @@ sub fscanf {
 }
 
 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 {
@@ -468,12 +483,12 @@ 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 {
@@ -488,7 +503,7 @@ sub perror {
 
 sub printf {
     usage "printf(pattern, args...)" if @_ < 1;
-    printf STDOUT @_;
+    CORE::printf STDOUT @_;
 }
 
 sub putc {
@@ -505,17 +520,17 @@ sub puts {
 
 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 {
@@ -524,7 +539,7 @@ sub scanf {
 
 sub sprintf {
     usage "sprintf(pattern,args)" if @_ == 0;
-    sprintf(shift,@_);
+    CORE::sprintf(shift,@_);
 }
 
 sub sscanf {
@@ -532,11 +547,11 @@ sub sscanf {
 }
 
 sub tmpfile {
-    redef "FileHandle::new_tmpfile()";
+    redef "IO::File::new_tmpfile()";
 }
 
 sub ungetc {
-    redef "FileHandle::ungetc()";
+    redef "IO::Handle::ungetc()";
 }
 
 sub vfprintf {
@@ -553,7 +568,7 @@ sub vsprintf {
 
 sub abs {
     usage "abs(x)" if @_ != 1;
-    abs($_[0]);
+    CORE::abs($_[0]);
 }
 
 sub atexit {
@@ -586,7 +601,7 @@ sub div {
 
 sub exit {
     usage "exit(status)" if @_ != 1;
-    exit($_[0]);
+    CORE::exit($_[0]);
 }
 
 sub free {
@@ -626,21 +641,9 @@ sub srand {
     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 {
@@ -719,7 +722,7 @@ sub strspn {
 
 sub strstr {
     usage "strstr(big, little)" if @_ != 2;
-    index($_[0], $_[1]);
+    CORE::index($_[0], $_[1]);
 }
 
 sub strtok {
@@ -728,71 +731,71 @@ 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 {
@@ -821,13 +824,20 @@ sub execvp {
 
 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;
 }
 
@@ -854,12 +864,12 @@ sub getgroups {
 
 sub getlogin {
     usage "getlogin()" if @_ != 0;
-    getlogin();
+    CORE::getlogin();
 }
 
 sub getpgrp {
     usage "getpgrp()" if @_ != 0;
-    getpgrp($_[0]);
+    CORE::getpgrp;
 }
 
 sub getpid {
@@ -869,7 +879,7 @@ sub getpid {
 
 sub getppid {
     usage "getppid()" if @_ != 0;
-    getppid;
+    CORE::getppid;
 }
 
 sub getuid {
@@ -884,12 +894,16 @@ sub isatty {
 
 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 {
@@ -902,18 +916,22 @@ sub setuid {
     $< = $_[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]);
 }