X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doio.c;h=399cadf3eb38aae17691a06239da23b3fc133cc0;hb=f723aae17a68ca8118a1c2a16d411e8eb3ac4bb0;hp=8a04766f09586060a890a010cfa85801bfe596ee;hpb=46147bce9215db8642f2bdc9a2e9e60e27f046e3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doio.c b/doio.c index 8a04766..399cadf 100644 --- a/doio.c +++ b/doio.c @@ -258,17 +258,10 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw, } mode[0] = 'w'; writing = 1; -#ifdef HAS_STRLCAT if (out_raw) - strlcat(mode, "b", PERL_MODE_MAX - 1); + my_strlcat(mode, "b", PERL_MODE_MAX - 1); else if (out_crlf) - strlcat(mode, "t", PERL_MODE_MAX - 1); -#else - if (out_raw) - strcat(mode, "b"); - else if (out_crlf) - strcat(mode, "t"); -#endif + my_strlcat(mode, "t", PERL_MODE_MAX - 1); if (num_svs > 1) { fp = PerlProc_popen_list(mode, num_svs, svp); } @@ -296,17 +289,10 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw, } writing = 1; -#ifdef HAS_STRLCAT if (out_raw) - strlcat(mode, "b", PERL_MODE_MAX - 1); + my_strlcat(mode, "b", PERL_MODE_MAX - 1); else if (out_crlf) - strlcat(mode, "t", PERL_MODE_MAX - 1); -#else - if (out_raw) - strcat(mode, "b"); - else if (out_crlf) - strcat(mode, "t"); -#endif + my_strlcat(mode, "t", PERL_MODE_MAX - 1); if (*type == '&') { duplicity: dodup = PERLIO_DUP_FD; @@ -429,17 +415,10 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw, type++; } while (isSPACE(*type)); mode[0] = 'r'; -#ifdef HAS_STRLCAT if (in_raw) - strlcat(mode, "b", PERL_MODE_MAX - 1); + my_strlcat(mode, "b", PERL_MODE_MAX - 1); else if (in_crlf) - strlcat(mode, "t", PERL_MODE_MAX - 1); -#else - if (in_raw) - strcat(mode, "b"); - else if (in_crlf) - strcat(mode, "t"); -#endif + my_strlcat(mode, "t", PERL_MODE_MAX - 1); if (*type == '&') { goto duplicity; } @@ -490,17 +469,10 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw, TAINT_PROPER("piped open"); mode[0] = 'r'; -#ifdef HAS_STRLCAT if (in_raw) - strlcat(mode, "b", PERL_MODE_MAX - 1); + my_strlcat(mode, "b", PERL_MODE_MAX - 1); else if (in_crlf) - strlcat(mode, "t", PERL_MODE_MAX - 1); -#else - if (in_raw) - strcat(mode, "b"); - else if (in_crlf) - strcat(mode, "t"); -#endif + my_strlcat(mode, "t", PERL_MODE_MAX - 1); if (num_svs > 1) { fp = PerlProc_popen_list(mode,num_svs,svp); @@ -528,17 +500,10 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw, ; mode[0] = 'r'; -#ifdef HAS_STRLCAT if (in_raw) - strlcat(mode, "b", PERL_MODE_MAX - 1); + my_strlcat(mode, "b", PERL_MODE_MAX - 1); else if (in_crlf) - strlcat(mode, "t", PERL_MODE_MAX - 1); -#else - if (in_raw) - strcat(mode, "b"); - else if (in_crlf) - strcat(mode, "t"); -#endif + my_strlcat(mode, "t", PERL_MODE_MAX - 1); if (*name == '-' && name[1] == '\0') { fp = PerlIO_stdin(); @@ -1311,6 +1276,7 @@ Perl_my_stat(pTHX) if (gv == PL_defgv) return PL_laststatval; io = GvIO(gv); + do_fstat_have_io: PL_laststype = OP_STAT; PL_statgv = gv; sv_setpvn(PL_statname, "", 0); @@ -1322,6 +1288,7 @@ Perl_my_stat(pTHX) return (PL_laststatval = PerlLIO_fstat(dirfd(IoDIRP(io)), &PL_statcache)); #else Perl_die(aTHX_ PL_no_func, "dirfd"); + NORETURN_FUNCTION_END; #endif } else { if (ckWARN2(WARN_UNOPENED,WARN_CLOSED)) @@ -1350,6 +1317,10 @@ Perl_my_stat(pTHX) gv = (GV*)SvRV(sv); goto do_fstat; } + else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) { + io = (IO*)SvRV(sv); + goto do_fstat_have_io; + } s = SvPV_const(sv, len); PL_statgv = NULL; @@ -1478,10 +1449,9 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report) char *cmd; /* Make a copy so we can change it */ - const int cmdlen = strlen(incmd); - Newx(cmd, cmdlen+1, char); - strncpy(cmd, incmd, cmdlen); - cmd[cmdlen] = 0; + const Size_t cmdlen = strlen(incmd) + 1; + Newx(cmd, cmdlen, char); + my_strlcpy(cmd, incmd, cmdlen); while (*cmd && isSPACE(*cmd)) cmd++; @@ -1493,19 +1463,11 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report) char flags[PERL_FLAGS_MAX]; if (strnEQ(cmd,PL_cshname,PL_cshlen) && strnEQ(cmd+PL_cshlen," -c",3)) { -#ifdef HAS_STRLCPY - strlcpy(flags, "-c", PERL_FLAGS_MAX); -#else - strcpy(flags,"-c"); -#endif + my_strlcpy(flags, "-c", PERL_FLAGS_MAX); s = cmd+PL_cshlen+3; if (*s == 'f') { s++; -#ifdef HAS_STRLCPY - strlcat(flags, "f", PERL_FLAGS_MAX - 2); -#else - strcat(flags,"f"); -#endif + my_strlcat(flags, "f", PERL_FLAGS_MAX - 2); } if (*s == ' ') s++;