[inseparable changes from patch from perl-5.003_97d to perl-5.003_97e]
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 3b06b9c..4eca776 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -89,11 +89,13 @@ extern int h_errno;
 #   define vfork fork
 #endif
 
-/* Put this after #includes because <unistd.h> defines _XOPEN_VERSION. */
-#if _XOPEN_VERSION >= 4
-#   define Sock_size_t Size_t
-#else
-#   define Sock_size_t int
+/* Put this after #includes because <unistd.h> defines _XOPEN_*. */
+#ifndef Sock_size_t
+#  if _XOPEN_VERSION >= 5 || defined(_XOPEN_SOURCE_EXTENDED) || defined(__GLIBC__)
+#    define Sock_size_t Size_t
+#  else
+#    define Sock_size_t int
+#  endif
 #endif
 
 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
@@ -1153,14 +1155,16 @@ PP(pp_sysread)
     GV *gv;
     IO *io;
     char *buffer;
-    int length;
+    SSize_t length;
     Sock_size_t bufsize;
     SV *bufsv;
     STRLEN blen;
     MAGIC *mg;
 
     gv = (GV*)*++MARK;
-    if (SvMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q'))) {
+    if (op->op_type == OP_READ &&
+       SvMAGICAL(gv) && (mg = mg_find((SV*)gv, 'q')))
+    {
        SV *sv;
        
        PUSHMARK(MARK-1);
@@ -1366,6 +1370,11 @@ PP(pp_tell)
 
 PP(pp_seek)
 {
+    return pp_sysseek(ARGS);
+}
+
+PP(pp_sysseek)
+{
     dSP;
     GV *gv;
     int whence = POPi;
@@ -2726,7 +2735,7 @@ PP(pp_mkdir)
 
     TAINT_PROPER("mkdir");
 #ifdef HAS_MKDIR
-    SETi( mkdir(tmps, mode) >= 0 );
+    SETi( Mkdir(tmps, mode) >= 0 );
 #else
     SETi( dooneliner("mkdir", tmps) );
     oldumask = umask(0);
@@ -3989,7 +3998,7 @@ PP(pp_gpwent)
 PP(pp_spwent)
 {
     dSP;
-#ifdef HAS_PASSWD
+#if defined(HAS_PASSWD) && !defined(CYGWIN32)
     setpwent();
     RETPUSHYES;
 #else