The CHECKOP macro was not invoked on some newly created ops
[p5sagit/p5-mst-13.2.git] / ext / POSIX / POSIX.pm
index 92a3182..74a014f 100644 (file)
@@ -20,6 +20,8 @@ sub import {
 }
 
 sub croak { require Carp;  goto &Carp::croak }
+# declare usage to assist AutoLoad
+sub usage;
 
 XSLoader::load 'POSIX', $VERSION;
 
@@ -49,24 +51,27 @@ sub AUTOLOAD {
     goto &$AUTOLOAD;
 }
 
-sub POSIX::SigAction::new {
-    bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0];
-}
+package POSIX::SigAction;
+
+use AutoLoader 'AUTOLOAD';
+sub new { bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3] || 0}, $_[0] }
+
+package POSIX;
 
 1;
 __END__
 
-sub usage { 
+sub usage {
     my ($mess) = @_;
     croak "Usage: POSIX::$mess";
 }
 
-sub redef { 
+sub redef {
     my ($mess) = @_;
     croak "Use method $mess instead";
 }
 
-sub unimpl { 
+sub unimpl {
     my ($mess) = @_;
     $mess =~ s/xxx//;
     croak "Unimplemented: POSIX::$mess";
@@ -277,6 +282,10 @@ sub fseek {
     redef "IO::Seekable::seek()";
 }
 
+sub fsync {
+    redef "IO::Handle::sync()";
+}
+
 sub ferror {
     redef "IO::Handle::error()";
 }
@@ -718,7 +727,7 @@ sub setvbuf {
 
 sub sleep {
     usage "sleep(seconds)" if @_ != 1;
-    CORE::sleep($_[0]);
+    $_[0] - CORE::sleep($_[0]);
 }
 
 sub unlink {
@@ -869,11 +878,11 @@ sub load_imports {
                _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS
                _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX
                _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
-               _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_SAVED_IDS
+               _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
                _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
                _exit access ctermid cuserid
                dup2 dup execl execle execlp execv execve execvp
-               fpathconf getcwd getegid geteuid getgid getgroups
+               fpathconf fsync getcwd getegid geteuid getgid getgroups
                getpid getuid isatty lseek pathconf pause setgid setpgid
                setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)],
 
@@ -887,23 +896,68 @@ for (values %EXPORT_TAGS) {
 }
 
 @EXPORT_OK = qw(
-    closedir opendir readdir rewinddir
-    fcntl open
-    getgrgid getgrnam
-    atan2 cos exp log sin sqrt
-    getpwnam getpwuid
-    kill
-    fileno getc printf rename sprintf
-    abs exit rand srand system
-    chmod mkdir stat umask
-    times
-    wait waitpid
-    gmtime localtime time 
-    alarm chdir chown close fork getlogin getppid getpgrp link
-       pipe read rmdir sleep unlink write
-    utime
-    nice
+               abs
+               alarm
+               atan2
+               chdir
+               chmod
+               chown
+               close
+               closedir
+               cos
+               exit
+               exp
+               fcntl
+               fileno
+               fork
+               getc
+               getgrgid
+               getgrnam
+               getlogin
+               getpgrp
+               getppid
+               getpwnam
+               getpwuid
+               gmtime
+               isatty
+               kill
+               link
+               localtime
+               log
+               mkdir
+               nice
+               open
+               opendir
+               pipe
+               printf
+               rand
+               read
+               readdir
+               rename
+               rewinddir
+               rmdir
+               sin
+               sleep
+               sprintf
+               sqrt
+               srand
+               stat
+               system
+               time
+               times
+               umask
+               unlink
+               utime
+               wait
+               waitpid
+               write
 );
 
 require Exporter;
 }
+
+package POSIX::SigAction;
+
+sub handler { $_[0]->{HANDLER} = $_[1] if @_ > 1; $_[0]->{HANDLER} };
+sub mask    { $_[0]->{MASK}    = $_[1] if @_ > 1; $_[0]->{MASK} };
+sub flags   { $_[0]->{FLAGS}   = $_[1] if @_ > 1; $_[0]->{FLAGS} };