Add newly moved perl/ext/Thread/... files to MANIFEST.
[p5sagit/p5-mst-13.2.git] / doio.c
diff --git a/doio.c b/doio.c
index 62b7de9..54b6d56 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -283,6 +283,7 @@ PerlIO *supplied_fp;
     }
     if (IoTYPE(io) &&
       IoTYPE(io) != '|' && IoTYPE(io) != '-') {
+       dTHR;
        if (Fstat(PerlIO_fileno(fp),&statbuf) < 0) {
            (void)PerlIO_close(fp);
            goto say_false;
@@ -297,8 +298,9 @@ PerlIO *supplied_fp;
            !statbuf.st_mode
 #endif
        ) {
-           Sock_size_t buflen = sizeof tokenbuf;
-           if (getsockname(PerlIO_fileno(fp), (struct sockaddr *)tokenbuf,
+           char tmpbuf[256];
+           Sock_size_t buflen = sizeof tmpbuf;
+           if (getsockname(PerlIO_fileno(fp), (struct sockaddr *)tmpbuf,
                            &buflen) >= 0
                  || errno != ENOTSOCK)
                IoTYPE(io) = 's'; /* some OS's return 0 on fstat()ed socket */
@@ -340,6 +342,7 @@ PerlIO *supplied_fp;
 #endif
     IoIFP(io) = fp;
     if (writing) {
+       dTHR;
        if (IoTYPE(io) == 's'
          || (IoTYPE(io) == '>' && S_ISCHR(statbuf.st_mode)) ) {
            if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),"w"))) {
@@ -384,6 +387,7 @@ register GV *gv;
     }
     filemode = 0;
     while (av_len(GvAV(gv)) >= 0) {
+       dTHR;
        STRLEN len;
        sv = av_shift(GvAV(gv));
        SAVEFREESV(sv);
@@ -624,6 +628,7 @@ bool
 do_eof(gv)
 GV *gv;
 {
+    dTHR;
     register IO *io;
     int ch;
 
@@ -907,6 +912,7 @@ register SV **sp;
     char *tmps;
 
     if (sp > mark) {
+       dTHR;
        New(401,Argv, sp - mark + 1, char*);
        a = Argv;
        while (++mark <= sp) {
@@ -942,7 +948,7 @@ do_execfree()
     }
 }
 
-#ifndef OS2
+#if !defined(OS2) && !defined(WIN32)
 
 bool
 do_exec(cmd)
@@ -1033,7 +1039,7 @@ char *cmd;
     return FALSE;
 }
 
-#endif /* OS2 */
+#endif /* OS2 || WIN32 */
 
 I32
 apply(type,mark,sp)
@@ -1041,6 +1047,7 @@ I32 type;
 register SV **mark;
 register SV **sp;
 {
+    dTHR;
     register I32 val;
     register I32 val2;
     register I32 tot = 0;
@@ -1294,6 +1301,7 @@ I32 optype;
 SV **mark;
 SV **sp;
 {
+    dTHR;
     key_t key;
     I32 n, flags;
 
@@ -1329,6 +1337,7 @@ I32 optype;
 SV **mark;
 SV **sp;
 {
+    dTHR;
     SV *astr;
     char *a;
     I32 id, n, cmd, infosize, getinfo;
@@ -1364,29 +1373,25 @@ SV **sp;
            infosize = sizeof(struct semid_ds);
        else if (cmd == GETALL || cmd == SETALL)
        {
+           struct semid_ds semds;
 #ifdef __linux__       /* XXX Need metaconfig test */
-/* linux uses :
-   int semctl (int semid, int semnun, int cmd, union semun arg)
-
+/* linux (and Solaris2?) uses :
+   int semctl (int semid, int semnum, int cmd, union semun arg)
        union semun {
             int val;
             struct semid_ds *buf;
             ushort *array;
        };
 */
-            union semun semds;
-           if (semctl(id, 0, IPC_STAT, semds) == -1)
+            union semun semun;
+            semun.buf = &semds;
+           if (semctl(id, 0, IPC_STAT, semun) == -1)
 #else
-           struct semid_ds semds;
            if (semctl(id, 0, IPC_STAT, &semds) == -1)
 #endif
                return -1;
            getinfo = (cmd == GETALL);
-#ifdef __linux__       /* XXX Need metaconfig test */
-           infosize = semds.buf->sem_nsems * sizeof(short);
-#else
            infosize = semds.sem_nsems * sizeof(short);
-#endif
                /* "short" is technically wrong but much more portable
                   than guessing about u_?short(_t)? */
        }
@@ -1457,6 +1462,7 @@ SV **mark;
 SV **sp;
 {
 #ifdef HAS_MSG
+    dTHR;
     SV *mstr;
     char *mbuf;
     I32 id, msize, flags;
@@ -1481,6 +1487,7 @@ SV **mark;
 SV **sp;
 {
 #ifdef HAS_MSG
+    dTHR;
     SV *mstr;
     char *mbuf;
     long mtype;
@@ -1519,6 +1526,7 @@ SV **mark;
 SV **sp;
 {
 #ifdef HAS_SEM
+    dTHR;
     SV *opstr;
     char *opbuf;
     I32 id;
@@ -1546,6 +1554,7 @@ SV **mark;
 SV **sp;
 {
 #ifdef HAS_SHM
+    dTHR;
     SV *mstr;
     char *mbuf, *shm;
     I32 id, mpos, msize;