SV *sv;
PerlLIO_dup2(PerlIO_fileno(fp), fd);
+ MUTEX_LOCK(&PL_fdpid_mutex);
sv = *av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE);
(void)SvUPGRADE(sv, SVt_IV);
pid = SvIVX(sv);
SvIVX(sv) = 0;
sv = *av_fetch(PL_fdpid,fd,TRUE);
+ MUTEX_UNLOCK(&PL_fdpid_mutex);
(void)SvUPGRADE(sv, SVt_IV);
SvIVX(sv) = pid;
if (!was_fdopen)
IoFLAGS(io) &= ~IOf_NOLINE;
if (writing) {
dTHR;
- if (IoTYPE(io) == 's'
- || (IoTYPE(io) == '>' && S_ISCHR(PL_statbuf.st_mode)) )
+ bool is_reg = IoTYPE(io) == '>' && S_ISCHR(PL_statbuf.st_mode);
+ if (IoTYPE(io) == 's' || is_reg)
{
char *mode;
if (out_raw)
IoIFP(io) = Nullfp;
goto say_false;
}
+ else {
+ if (is_reg)
+ IoIFP(io) = IoOFP(io); /* avoid double close() */
+ }
}
else
IoOFP(io) = fp;
{
struct semid_ds semds;
union semun semun;
-
+#ifdef EXTRA_F_IN_SEMUN_BUF
+ semun.buff = &semds;
+#else
semun.buf = &semds;
+#endif
getinfo = (cmd == GETALL);
if (Semctl(id, 0, IPC_STAT, semun) == -1)
return -1;
#ifdef Semctl
union semun unsemds;
+#ifdef EXTRA_F_IN_SEMUN_BUF
+ unsemds.buff = (struct semid_ds *)a;
+#else
unsemds.buf = (struct semid_ds *)a;
+#endif
ret = Semctl(id, n, cmd, unsemds);
#else
Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
if (ret >= 0) {
SvCUR_set(mstr, sizeof(long)+ret);
*SvEND(mstr) = '\0';
+#ifndef INCOMPLETE_TAINTS
+ /* who knows who has been playing with this message? */
+ SvTAINTED_on(mstr);
+#endif
}
return ret;
#else
SvCUR_set(mstr, msize);
*SvEND(mstr) = '\0';
SvSETMAGIC(mstr);
+#ifndef INCOMPLETE_TAINTS
+ /* who knows who has been playing with this shared memory? */
+ SvTAINTED_on(mstr);
+#endif
}
else {
I32 n;