3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Far below them they saw the white waters pour into a foaming bowl, and
13 * then swirl darkly about a deep oval basin in the rocks, until they found
14 * their way out again through a narrow gate, and flowed away, fuming and
15 * chattering, into calmer and more level reaches.
17 * [p.684 of _The Lord of the Rings_, IV/vi: "The Forbidden Pool"]
20 /* This file contains functions that do the actual I/O on behalf of ops.
21 * For example, pp_print() calls the do_print() function in this file for
22 * each argument needing printing.
26 #define PERL_IN_DOIO_C
29 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
38 # ifndef HAS_SHMAT_PROTOTYPE
39 extern Shmat_t shmat (int, char *, int);
45 # if defined(_MSC_VER) || defined(__MINGW32__)
46 # include <sys/utime.h>
53 # define OPEN_EXCL O_EXCL
58 #define PERL_MODE_MAX 8
59 #define PERL_FLAGS_MAX 10
64 Perl_setfd_cloexec(int fd)
67 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
68 (void) fcntl(fd, F_SETFD, FD_CLOEXEC);
73 Perl_setfd_inhexec(int fd)
76 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
77 (void) fcntl(fd, F_SETFD, 0);
82 Perl_setfd_cloexec_for_nonsysfd(pTHX_ int fd)
90 Perl_setfd_inhexec_for_sysfd(pTHX_ int fd)
97 Perl_setfd_cloexec_or_inhexec_by_sysfdness(pTHX_ int fd)
100 if(fd <= PL_maxsysfd)
107 #define DO_GENOPEN_THEN_CLOEXEC(GENOPEN_NORMAL, GENSETFD_CLOEXEC) \
109 int res = (GENOPEN_NORMAL); \
110 if(LIKELY(res != -1)) GENSETFD_CLOEXEC; \
113 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC) && \
115 enum { CLOEXEC_EXPERIMENT = 0, CLOEXEC_AT_OPEN, CLOEXEC_AFTER_OPEN };
116 # define DO_GENOPEN_EXPERIMENTING_CLOEXEC(strategy, TESTFD, GENOPEN_CLOEXEC, \
117 GENOPEN_NORMAL, GENSETFD_CLOEXEC) \
119 switch (strategy) { \
120 case CLOEXEC_EXPERIMENT: default: { \
121 int res = (GENOPEN_CLOEXEC), eno; \
122 if (LIKELY(res != -1)) { \
123 int fdflags = fcntl((TESTFD), F_GETFD); \
124 if (LIKELY(fdflags != -1) && \
125 LIKELY(fdflags & FD_CLOEXEC)) { \
126 strategy = CLOEXEC_AT_OPEN; \
128 strategy = CLOEXEC_AFTER_OPEN; \
131 } else if (UNLIKELY((eno = errno) == EINVAL || \
133 res = (GENOPEN_NORMAL); \
134 if (LIKELY(res != -1)) { \
135 strategy = CLOEXEC_AFTER_OPEN; \
137 } else if (!LIKELY((eno = errno) == EINVAL || \
139 strategy = CLOEXEC_AFTER_OPEN; \
144 case CLOEXEC_AT_OPEN: \
145 return (GENOPEN_CLOEXEC); \
146 case CLOEXEC_AFTER_OPEN: \
147 DO_GENOPEN_THEN_CLOEXEC(GENOPEN_NORMAL, GENSETFD_CLOEXEC); \
151 # define DO_GENOPEN_EXPERIMENTING_CLOEXEC(strategy, TESTFD, GENOPEN_CLOEXEC, \
152 GENOPEN_NORMAL, GENSETFD_CLOEXEC) \
153 DO_GENOPEN_THEN_CLOEXEC(GENOPEN_NORMAL, GENSETFD_CLOEXEC)
156 #define DO_ONEOPEN_THEN_CLOEXEC(ONEOPEN_NORMAL) \
159 DO_GENOPEN_THEN_CLOEXEC(fd = (ONEOPEN_NORMAL), \
160 setfd_cloexec(fd)); \
162 #define DO_ONEOPEN_EXPERIMENTING_CLOEXEC(strategy, \
163 ONEOPEN_CLOEXEC, ONEOPEN_NORMAL) \
166 DO_GENOPEN_EXPERIMENTING_CLOEXEC(strategy, \
168 fd = (ONEOPEN_CLOEXEC), \
169 fd = (ONEOPEN_NORMAL), setfd_cloexec(fd)); \
172 #define DO_PIPESETFD_CLOEXEC(PIPEFD) \
174 setfd_cloexec((PIPEFD)[0]); \
175 setfd_cloexec((PIPEFD)[1]); \
177 #define DO_PIPEOPEN_THEN_CLOEXEC(PIPEFD, PIPEOPEN_NORMAL) \
178 DO_GENOPEN_THEN_CLOEXEC(PIPEOPEN_NORMAL, DO_PIPESETFD_CLOEXEC(PIPEFD))
179 #define DO_PIPEOPEN_EXPERIMENTING_CLOEXEC(strategy, PIPEFD, PIPEOPEN_CLOEXEC, \
181 DO_GENOPEN_EXPERIMENTING_CLOEXEC(strategy, \
182 (PIPEFD)[0], PIPEOPEN_CLOEXEC, \
183 PIPEOPEN_NORMAL, DO_PIPESETFD_CLOEXEC(PIPEFD))
186 Perl_PerlLIO_dup_cloexec(pTHX_ int oldfd)
188 #if !defined(PERL_IMPLICIT_SYS) && defined(F_DUPFD_CLOEXEC)
190 * struct IPerlLIO doesn't cover fcntl(), and there's no clear way
191 * to extend it, so for the time being this just isn't available on
192 * PERL_IMPLICIT_SYS builds.
194 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
196 fcntl(oldfd, F_DUPFD_CLOEXEC, 0),
199 DO_ONEOPEN_THEN_CLOEXEC(PerlLIO_dup(oldfd));
204 Perl_PerlLIO_dup2_cloexec(pTHX_ int oldfd, int newfd)
206 #if !defined(PERL_IMPLICIT_SYS) && defined(HAS_DUP3) && defined(O_CLOEXEC)
208 * struct IPerlLIO doesn't cover dup3(), and there's no clear way
209 * to extend it, so for the time being this just isn't available on
210 * PERL_IMPLICIT_SYS builds.
212 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
214 dup3(oldfd, newfd, O_CLOEXEC),
215 PerlLIO_dup2(oldfd, newfd));
217 DO_ONEOPEN_THEN_CLOEXEC(PerlLIO_dup2(oldfd, newfd));
222 #if (__CHARSET_LIB == 1)
226 static int setccsid(int fd, int ccsid)
231 memset(&attr, 0, sizeof(attr));
232 attr.att_filetagchg = 1;
233 attr.att_filetag.ft_ccsid = ccsid;
234 attr.att_filetag.ft_txtflag = 1;
236 rc = __fchattr(fd, &attr, sizeof(attr));
240 static void updateccsid(int fd, const char* path, int oflag, int perm)
243 if (oflag & O_CREAT) {
244 rc = setccsid(fd, 819);
248 int asciiopen(const char* path, int oflag)
251 int fd = open(path, oflag);
255 updateccsid(fd, path, oflag, -1);
259 int asciiopen3(const char* path, int oflag, int perm)
262 int fd = open(path, oflag, perm);
266 updateccsid(fd, path, oflag, perm);
273 Perl_PerlLIO_open_cloexec(pTHX_ const char *file, int flag)
275 PERL_ARGS_ASSERT_PERLLIO_OPEN_CLOEXEC;
276 #if defined(O_CLOEXEC)
277 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
279 PerlLIO_open(file, flag | O_CLOEXEC),
280 PerlLIO_open(file, flag));
282 DO_ONEOPEN_THEN_CLOEXEC(PerlLIO_open(file, flag));
287 Perl_PerlLIO_open3_cloexec(pTHX_ const char *file, int flag, int perm)
289 PERL_ARGS_ASSERT_PERLLIO_OPEN3_CLOEXEC;
290 #if defined(O_CLOEXEC)
291 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
293 PerlLIO_open3(file, flag | O_CLOEXEC, perm),
294 PerlLIO_open3(file, flag, perm));
296 DO_ONEOPEN_THEN_CLOEXEC(PerlLIO_open3(file, flag, perm));
301 #if (__CHARSET_LIB == 1)
302 #define TEMP_CCSID 819
304 static int Internal_Perl_my_mkstemp_cloexec(char *templte)
306 PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC;
307 # if defined(O_CLOEXEC)
308 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
310 Perl_my_mkostemp(templte, O_CLOEXEC),
311 Perl_my_mkstemp(templte));
313 DO_ONEOPEN_THEN_CLOEXEC(Perl_my_mkstemp(templte));
317 Perl_my_mkstemp_cloexec(char *templte)
319 int tempfd = Internal_Perl_my_mkstemp_cloexec(templte);
320 # if defined(TEMP_CCSID)
321 setccsid(tempfd, TEMP_CCSID);
326 # else /* Below is ! OEMVS */
328 Perl_my_mkstemp_cloexec(char *templte)
330 PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC;
331 # if defined(O_CLOEXEC)
332 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
334 Perl_my_mkostemp(templte, O_CLOEXEC),
335 Perl_my_mkstemp(templte));
337 DO_ONEOPEN_THEN_CLOEXEC(Perl_my_mkstemp(templte));
343 Perl_my_mkostemp_cloexec(char *templte, int flags)
345 PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC;
346 #if defined(O_CLOEXEC)
347 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
349 Perl_my_mkostemp(templte, flags | O_CLOEXEC),
350 Perl_my_mkostemp(templte, flags));
352 DO_ONEOPEN_THEN_CLOEXEC(Perl_my_mkostemp(templte, flags));
358 Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd)
360 PERL_ARGS_ASSERT_PERLPROC_PIPE_CLOEXEC;
362 * struct IPerlProc doesn't cover pipe2(), and there's no clear way
363 * to extend it, so for the time being this just isn't available on
364 * PERL_IMPLICIT_SYS builds.
366 # if !defined(PERL_IMPLICIT_SYS) && defined(HAS_PIPE2) && defined(O_CLOEXEC)
367 DO_PIPEOPEN_EXPERIMENTING_CLOEXEC(PL_strategy_pipe, pipefd,
368 pipe2(pipefd, O_CLOEXEC),
369 PerlProc_pipe(pipefd));
371 DO_PIPEOPEN_THEN_CLOEXEC(pipefd, PerlProc_pipe(pipefd));
379 Perl_PerlSock_socket_cloexec(pTHX_ int domain, int type, int protocol)
381 # if defined(SOCK_CLOEXEC)
382 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
384 PerlSock_socket(domain, type | SOCK_CLOEXEC, protocol),
385 PerlSock_socket(domain, type, protocol));
387 DO_ONEOPEN_THEN_CLOEXEC(PerlSock_socket(domain, type, protocol));
392 Perl_PerlSock_accept_cloexec(pTHX_ int listenfd, struct sockaddr *addr,
393 Sock_size_t *addrlen)
395 # if !defined(PERL_IMPLICIT_SYS) && \
396 defined(HAS_ACCEPT4) && defined(SOCK_CLOEXEC)
398 * struct IPerlSock doesn't cover accept4(), and there's no clear
399 * way to extend it, so for the time being this just isn't available
400 * on PERL_IMPLICIT_SYS builds.
402 DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
404 accept4(listenfd, addr, addrlen, SOCK_CLOEXEC),
405 PerlSock_accept(listenfd, addr, addrlen));
407 DO_ONEOPEN_THEN_CLOEXEC(PerlSock_accept(listenfd, addr, addrlen));
413 #if defined (HAS_SOCKETPAIR) || \
414 (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && \
415 defined(AF_INET) && defined(PF_INET))
417 Perl_PerlSock_socketpair_cloexec(pTHX_ int domain, int type, int protocol,
420 PERL_ARGS_ASSERT_PERLSOCK_SOCKETPAIR_CLOEXEC;
422 DO_PIPEOPEN_EXPERIMENTING_CLOEXEC(PL_strategy_socketpair, pairfd,
423 PerlSock_socketpair(domain, type | SOCK_CLOEXEC, protocol, pairfd),
424 PerlSock_socketpair(domain, type, protocol, pairfd));
426 DO_PIPEOPEN_THEN_CLOEXEC(pairfd,
427 PerlSock_socketpair(domain, type, protocol, pairfd));
433 S_openn_setup(pTHX_ GV *gv, char *mode, PerlIO **saveifp, PerlIO **saveofp,
434 int *savefd, char *savetype)
436 IO * const io = GvIOn(gv);
438 PERL_ARGS_ASSERT_OPENN_SETUP;
443 *savetype = IoTYPE_CLOSED;
445 Zero(mode,sizeof(mode),char);
446 PL_forkprocess = 1; /* assume true if no fork */
448 /* If currently open - close before we re-open */
450 if (IoTYPE(io) == IoTYPE_STD) {
451 /* This is a clone of one of STD* handles */
454 const int old_fd = PerlIO_fileno(IoIFP(io));
456 if (inRANGE(old_fd, 0, PL_maxsysfd)) {
457 /* This is one of the original STD* handles */
458 *saveifp = IoIFP(io);
459 *saveofp = IoOFP(io);
460 *savetype = IoTYPE(io);
466 if (IoTYPE(io) == IoTYPE_PIPE)
467 result = PerlProc_pclose(IoIFP(io));
468 else if (IoIFP(io) != IoOFP(io)) {
470 result = PerlIO_close(IoOFP(io));
471 PerlIO_close(IoIFP(io)); /* clear stdio, fd already closed */
474 result = PerlIO_close(IoIFP(io));
477 result = PerlIO_close(IoIFP(io));
479 if (result == EOF && old_fd > PL_maxsysfd) {
480 /* Why is this not Perl_warn*() call ? */
481 PerlIO_printf(Perl_error_log,
482 "Warning: unable to close filehandle %" HEKf
484 HEKfARG(GvENAME_HEK(gv))
489 IoOFP(io) = IoIFP(io) = NULL;
495 Perl_do_openn(pTHX_ GV *gv, const char *oname, I32 len, int as_raw,
496 int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp,
499 PERL_ARGS_ASSERT_DO_OPENN;
502 /* sysopen style args, i.e. integer mode and permissions */
505 Perl_croak(aTHX_ "panic: sysopen with multiple args, num_svs=%ld",
508 return do_open_raw(gv, oname, len, rawmode, rawperm, NULL);
510 return do_open6(gv, oname, len, supplied_fp, svp, num_svs);
514 Perl_do_open_raw(pTHX_ GV *gv, const char *oname, STRLEN len,
515 int rawmode, int rawperm, Stat_t *statbufp)
521 char mode[PERL_MODE_MAX]; /* file mode ("r\0", "rb\0", "ab\0" etc.) */
522 IO * const io = openn_setup(gv, mode, &saveifp, &saveofp, &savefd, &savetype);
526 PERL_ARGS_ASSERT_DO_OPEN_RAW;
528 /* For ease of blame back to 5.000, keep the existing indenting. */
530 /* sysopen style args, i.e. integer mode and permissions */
532 const int appendtrunc =
534 #ifdef O_APPEND /* Not fully portable. */
537 #ifdef O_TRUNC /* Not fully portable. */
541 const int modifyingmode = O_WRONLY|O_RDWR|O_CREAT|appendtrunc;
551 It might be (in OS/390 and Mac OS Classic it is)
557 This means that simple & with O_RDWR would look
558 like O_RDONLY is present. Therefore we have to
561 if ((ismodifying = (rawmode & modifyingmode))) {
562 if ((ismodifying & O_WRONLY) == O_WRONLY ||
563 (ismodifying & O_RDWR) == O_RDWR ||
564 (ismodifying & (O_CREAT|appendtrunc)))
565 TAINT_PROPER("sysopen");
567 mode[ix++] = IoTYPE_NUMERIC; /* Marker to openn to use numeric "sysopen" */
569 #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
570 rawmode |= O_LARGEFILE; /* Transparently largefiley. */
573 IoTYPE(io) = PerlIO_intmode2str(rawmode, &mode[ix], &writing);
575 namesv = newSVpvn_flags(oname, len, SVs_TEMP);
576 fp = PerlIO_openn(aTHX_ NULL, mode, -1, rawmode, rawperm, NULL, 1, &namesv);
578 return openn_cleanup(gv, io, fp, mode, oname, saveifp, saveofp, savefd,
579 savetype, writing, 0, NULL, statbufp);
583 Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN len,
584 PerlIO *supplied_fp, SV **svp, U32 num_svs)
590 char mode[PERL_MODE_MAX]; /* file mode ("r\0", "rb\0", "ab\0" etc.) */
591 IO * const io = openn_setup(gv, mode, &saveifp, &saveofp, &savefd, &savetype);
594 bool was_fdopen = FALSE;
597 PERL_ARGS_ASSERT_DO_OPEN6;
599 /* For ease of blame back to 5.000, keep the existing indenting. */
601 /* Regular (non-sys) open */
606 bool in_raw = 0, in_crlf = 0, out_raw = 0, out_crlf = 0;
608 /* Collect default raw/crlf info from the op */
609 if (PL_op && PL_op->op_type == OP_OPEN) {
610 /* set up IO layers */
611 const U8 flags = PL_op->op_private;
612 in_raw = (flags & OPpOPEN_IN_RAW);
613 in_crlf = (flags & OPpOPEN_IN_CRLF);
614 out_raw = (flags & OPpOPEN_OUT_RAW);
615 out_crlf = (flags & OPpOPEN_OUT_CRLF);
618 type = savepvn(oname, len);
622 /* Lose leading and trailing white space */
623 while (isSPACE(*type))
625 while (tend > type && isSPACE(tend[-1]))
631 /* New style explicit name, type is just mode and layer info */
633 if (SvROK(*svp) && !memchr(oname, '&', len)) {
635 Perl_warner(aTHX_ packWARN(WARN_IO),
636 "Can't open a reference");
637 SETERRNO(EINVAL, LIB_INVARG);
641 #endif /* USE_STDIO */
642 p = (SvOK(*svp) || SvGMAGICAL(*svp)) ? SvPV(*svp, nlen) : NULL;
644 if (p && !IS_SAFE_PATHNAME(p, nlen, "open")) {
649 name = p ? savepvn(p, nlen) : savepvs("");
658 if ((*type == IoTYPE_RDWR) && /* scary */
659 (*(type+1) == IoTYPE_RDONLY || *(type+1) == IoTYPE_WRONLY) &&
660 ((!num_svs || (tend > type+1 && tend[-1] != IoTYPE_PIPE)))) {
661 TAINT_PROPER("open");
666 if (*type == IoTYPE_PIPE) {
668 if (type[1] != IoTYPE_STD) {
670 Perl_croak(aTHX_ "Unknown open() mode '%.*s'", (int)olen, oname);
676 } while (isSPACE(*type));
682 /* command is missing 19990114 */
683 if (ckWARN(WARN_PIPE))
684 Perl_warner(aTHX_ packWARN(WARN_PIPE), "Missing command in piped open");
689 if (!(*name == '-' && name[1] == '\0') || num_svs)
691 TAINT_PROPER("piped open");
692 if (!num_svs && name[len-1] == '|') {
694 if (ckWARN(WARN_PIPE))
695 Perl_warner(aTHX_ packWARN(WARN_PIPE), "Can't open bidirectional pipe");
704 fp = PerlProc_popen_list(mode, num_svs, svp);
707 fp = PerlProc_popen(name,mode);
711 if (PerlIO_apply_layers(aTHX_ fp, mode, type) != 0) {
718 else if (*type == IoTYPE_WRONLY) {
719 TAINT_PROPER("open");
721 if (*type == IoTYPE_WRONLY) {
722 /* Two IoTYPE_WRONLYs in a row make for an IoTYPE_APPEND. */
723 mode[0] = IoTYPE(io) = IoTYPE_APPEND;
737 dodup = PERLIO_DUP_FD;
743 if (!num_svs && !*type && supplied_fp) {
744 /* "<+&" etc. is used by typemaps */
748 PerlIO *that_fp = NULL;
752 /* diag_listed_as: More than one argument to '%s' open */
753 Perl_croak(aTHX_ "More than one argument to '%c&' open",IoTYPE(io));
755 while (isSPACE(*type))
759 || (SvPOKp(*svp) && looks_like_number(*svp))
761 wanted_fd = SvUV(*svp);
764 else if (isDIGIT(*type)
765 && grok_atoUV(type, &uv, NULL)
773 thatio = sv_2io(*svp);
776 GV * const thatgv = gv_fetchpvn_flags(type, tend - type,
778 thatio = GvIO(thatgv);
782 SETERRNO(EINVAL,SS_IVCHAN);
787 if ((that_fp = IoIFP(thatio))) {
788 /* Flush stdio buffer before dup. --mjd
789 * Unfortunately SEEK_CURing 0 seems to
790 * be optimized away on most platforms;
791 * only Solaris and Linux seem to flush
793 /* On the other hand, do all platforms
794 * take gracefully to flushing a read-only
795 * filehandle? Perhaps we should do
796 * fsetpos(src)+fgetpos(dst)? --nik */
797 PerlIO_flush(that_fp);
798 wanted_fd = PerlIO_fileno(that_fp);
799 /* When dup()ing STDIN, STDOUT or STDERR
800 * explicitly set appropriate access mode */
801 if (that_fp == PerlIO_stdout()
802 || that_fp == PerlIO_stderr())
803 IoTYPE(io) = IoTYPE_WRONLY;
804 else if (that_fp == PerlIO_stdin())
805 IoTYPE(io) = IoTYPE_RDONLY;
806 /* When dup()ing a socket, say result is
808 else if (IoTYPE(thatio) == IoTYPE_SOCKET)
809 IoTYPE(io) = IoTYPE_SOCKET;
812 SETERRNO(EBADF, RMS_IFI);
820 fp = PerlIO_fdupopen(aTHX_ that_fp, NULL, dodup);
824 wanted_fd = PerlLIO_dup_cloexec(wanted_fd);
827 if (!(fp = PerlIO_openn(aTHX_ type,mode,wanted_fd,0,0,NULL,num_svs,svp))) {
828 if (dodup && wanted_fd >= 0)
829 PerlLIO_close(wanted_fd);
835 while (isSPACE(*type))
837 if (*type == IoTYPE_STD && (!type[1] || isSPACE(type[1]) || type[1] == ':')) {
839 fp = PerlIO_stdout();
840 IoTYPE(io) = IoTYPE_STD;
842 /* diag_listed_as: More than one argument to '%s' open */
843 Perl_croak(aTHX_ "More than one argument to '>%c' open",IoTYPE_STD);
848 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
851 SV *namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
853 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,1,&namesv);
857 if (!fp && type && *type && *type != ':' && !isIDFIRST(*type))
858 goto unknown_open_mode;
859 } /* IoTYPE_WRONLY */
860 else if (*type == IoTYPE_RDONLY) {
863 } while (isSPACE(*type));
872 if (*type == IoTYPE_STD && (!type[1] || isSPACE(type[1]) || type[1] == ':')) {
875 IoTYPE(io) = IoTYPE_STD;
877 /* diag_listed_as: More than one argument to '%s' open */
878 Perl_croak(aTHX_ "More than one argument to '<%c' open",IoTYPE_STD);
883 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
886 SV *namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
888 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,1,&namesv);
891 if (!fp && type && *type && *type != ':' && !isIDFIRST(*type))
892 goto unknown_open_mode;
893 } /* IoTYPE_RDONLY */
894 else if ((num_svs && /* '-|...' or '...|' */
895 type[0] == IoTYPE_STD && type[1] == IoTYPE_PIPE) ||
896 (!num_svs && tend > type+1 && tend[-1] == IoTYPE_PIPE)) {
898 type += 2; /* skip over '-|' */
902 while (tend > type && isSPACE(tend[-1]))
904 for (; isSPACE(*type); type++)
910 /* command is missing 19990114 */
911 if (ckWARN(WARN_PIPE))
912 Perl_warner(aTHX_ packWARN(WARN_PIPE), "Missing command in piped open");
917 if (!(*name == '-' && name[1] == '\0') || num_svs)
919 TAINT_PROPER("piped open");
928 fp = PerlProc_popen_list(mode,num_svs,svp);
931 fp = PerlProc_popen(name,mode);
933 IoTYPE(io) = IoTYPE_PIPE;
935 while (isSPACE(*type))
938 if (PerlIO_apply_layers(aTHX_ fp, mode, type) != 0) {
945 else { /* layer(Args) */
947 goto unknown_open_mode;
949 IoTYPE(io) = IoTYPE_RDONLY;
950 for (; isSPACE(*name); name++)
959 if (*name == '-' && name[1] == '\0') {
961 IoTYPE(io) = IoTYPE_STD;
965 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
968 SV *namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
970 fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,1,&namesv);
977 return openn_cleanup(gv, io, fp, mode, oname, saveifp, saveofp, savefd,
978 savetype, writing, was_fdopen, type, NULL);
981 /* Yes, this is ugly, but it's private, and I don't see a cleaner way to
982 simplify the two-headed public interface of do_openn. */
984 S_openn_cleanup(pTHX_ GV *gv, IO *io, PerlIO *fp, char *mode, const char *oname,
985 PerlIO *saveifp, PerlIO *saveofp, int savefd, char savetype,
986 int writing, bool was_fdopen, const char *type, Stat_t *statbufp)
991 PERL_ARGS_ASSERT_OPENN_CLEANUP;
993 Zero(&statbuf, 1, Stat_t);
996 if (IoTYPE(io) == IoTYPE_RDONLY && ckWARN(WARN_NEWLINE)
997 && should_warn_nl(oname)
1001 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral); /* PL_warn_nl is constant */
1002 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open");
1003 GCC_DIAG_RESTORE_STMT;
1008 if (ckWARN(WARN_IO)) {
1009 if ((IoTYPE(io) == IoTYPE_RDONLY) &&
1010 (fp == PerlIO_stdout() || fp == PerlIO_stderr())) {
1011 Perl_warner(aTHX_ packWARN(WARN_IO),
1012 "Filehandle STD%s reopened as %" HEKf
1014 ((fp == PerlIO_stdout()) ? "OUT" : "ERR"),
1015 HEKfARG(GvENAME_HEK(gv)));
1017 else if ((IoTYPE(io) == IoTYPE_WRONLY) && fp == PerlIO_stdin()) {
1018 Perl_warner(aTHX_ packWARN(WARN_IO),
1019 "Filehandle STDIN reopened as %" HEKf " only for output",
1020 HEKfARG(GvENAME_HEK(gv))
1025 fd = PerlIO_fileno(fp);
1026 /* Do NOT do: "if (fd < 0) goto say_false;" here. If there is no
1027 * fd assume it isn't a socket - this covers PerlIO::scalar -
1028 * otherwise unless we "know" the type probe for socket-ness.
1030 if (IoTYPE(io) && IoTYPE(io) != IoTYPE_PIPE && IoTYPE(io) != IoTYPE_STD && fd >= 0) {
1031 if (PerlLIO_fstat(fd,&statbuf) < 0) {
1032 /* If PerlIO claims to have fd we had better be able to fstat() it. */
1033 (void) PerlIO_close(fp);
1036 if (S_ISSOCK(statbuf.st_mode))
1037 IoTYPE(io) = IoTYPE_SOCKET; /* in case a socket was passed in to us */
1040 !(statbuf.st_mode & S_IFMT)
1041 && IoTYPE(io) != IoTYPE_WRONLY /* Dups of STD* filehandles already have */
1042 && IoTYPE(io) != IoTYPE_RDONLY /* type so they aren't marked as sockets */
1043 ) { /* on OS's that return 0 on fstat()ed pipe */
1045 Sock_size_t buflen = sizeof tmpbuf;
1046 if (PerlSock_getsockname(fd, (struct sockaddr *)tmpbuf, &buflen) >= 0
1047 || errno != ENOTSOCK)
1048 IoTYPE(io) = IoTYPE_SOCKET; /* some OS's return 0 on fstat()ed socket */
1049 /* but some return 0 for streams too, sigh */
1051 #endif /* HAS_SOCKET */
1055 * If this is a standard handle we discard all the layer stuff
1056 * and just dup the fd into whatever was on the handle before !
1059 if (saveifp) { /* must use old fp? */
1060 /* If fd is less that PL_maxsysfd i.e. STDIN..STDERR
1061 then dup the new fileno down
1064 PerlIO_flush(saveofp); /* emulate PerlIO_close() */
1065 if (saveofp != saveifp) { /* was a socket? */
1066 PerlIO_close(saveofp);
1070 /* Still a small can-of-worms here if (say) PerlIO::scalar
1071 is assigned to (say) STDOUT - for now let dup2() fail
1072 and provide the error
1075 SETERRNO(EBADF,RMS_IFI);
1077 } else if (PerlLIO_dup2(fd, savefd) < 0) {
1078 (void)PerlIO_close(fp);
1082 if (savefd != PerlIO_fileno(PerlIO_stdin())) {
1083 char newname[FILENAME_MAX+1];
1084 if (PerlIO_getname(fp, newname)) {
1085 if (fd == PerlIO_fileno(PerlIO_stdout()))
1086 vmssetuserlnm("SYS$OUTPUT", newname);
1087 if (fd == PerlIO_fileno(PerlIO_stderr()))
1088 vmssetuserlnm("SYS$ERROR", newname);
1094 /* PL_fdpid isn't used on Windows, so avoid this useless work.
1095 * XXX Probably the same for a lot of other places. */
1100 sv = *av_fetch(PL_fdpid,fd,TRUE);
1101 SvUPGRADE(sv, SVt_IV);
1104 sv = *av_fetch(PL_fdpid,savefd,TRUE);
1105 SvUPGRADE(sv, SVt_IV);
1111 /* need to close fp without closing underlying fd */
1112 int ofd = PerlIO_fileno(fp);
1113 int dupfd = ofd >= 0 ? PerlLIO_dup_cloexec(ofd) : -1;
1114 if (ofd < 0 || dupfd < 0) {
1116 PerlLIO_close(dupfd);
1120 PerlLIO_dup2_cloexec(dupfd, ofd);
1121 setfd_inhexec_for_sysfd(ofd);
1122 PerlLIO_close(dupfd);
1128 PerlIO_clearerr(fp);
1129 fd = PerlIO_fileno(fp);
1133 IoFLAGS(io) &= ~IOf_NOLINE;
1135 if (IoTYPE(io) == IoTYPE_SOCKET
1136 || (IoTYPE(io) == IoTYPE_WRONLY && fd >= 0 && S_ISCHR(statbuf.st_mode)) ) {
1138 if (*s == IoTYPE_IMPLICIT || *s == IoTYPE_NUMERIC)
1141 if (!(IoOFP(io) = PerlIO_openn(aTHX_ type,s,fd,0,0,NULL,0,NULL))) {
1150 *statbufp = statbuf;
1155 IoIFP(io) = saveifp;
1156 IoOFP(io) = saveofp;
1157 IoTYPE(io) = savetype;
1161 /* Open a temp file in the same directory as an original name.
1165 S_openindirtemp(pTHX_ GV *gv, SV *orig_name, SV *temp_out_name) {
1168 const char *p = SvPV_nolen(orig_name);
1171 /* look for the last directory separator */
1172 sep = strrchr(p, '/');
1177 if ((sep2 = strrchr(sep ? sep : p, '\\')))
1183 const char *openp = strchr(p, '[');
1185 sep = strchr(openp, ']');
1187 sep = strchr(p, ':');
1192 sv_setpvn(temp_out_name, p, sep - p + 1);
1193 sv_catpvs(temp_out_name, "XXXXXXXX");
1196 sv_setpvs(temp_out_name, "XXXXXXXX");
1199 int old_umask = umask(0177);
1200 fd = Perl_my_mkstemp_cloexec(SvPVX(temp_out_name));
1207 fp = PerlIO_fdopen(fd, "w+");
1211 return do_openn(gv, "+>&", 3, 0, 0, 0, fp, NULL, 0);
1214 #if defined(HAS_UNLINKAT) && defined(HAS_RENAMEAT) && defined(HAS_FCHMODAT) && \
1215 (defined(HAS_DIRFD) || defined(HAS_DIR_DD_FD)) && !defined(NO_USE_ATFUNCTIONS) && \
1217 # define ARGV_USE_ATFUNCTIONS
1220 /* Win32 doesn't necessarily return useful information
1221 * in st_dev, st_ino.
1224 # define ARGV_USE_STAT_INO
1227 #define ARGVMG_BACKUP_NAME 0
1228 #define ARGVMG_TEMP_NAME 1
1229 #define ARGVMG_ORIG_NAME 2
1230 #define ARGVMG_ORIG_MODE 3
1231 #define ARGVMG_ORIG_PID 4
1233 /* we store the entire stat_t since the ino_t and dev_t values might
1234 not fit in an IV. I could have created a new structure and
1235 transferred them across, but this seemed too much effort for very
1238 We store it even when the *at() functions are available, since
1239 while the C runtime might have definitions for these functions, the
1240 operating system or a specific filesystem might not implement them.
1241 eg. NetBSD 6 implements linkat() but only where the fds are AT_FDCWD.
1243 #ifdef ARGV_USE_STAT_INO
1244 # define ARGVMG_ORIG_CWD_STAT 5
1247 #ifdef ARGV_USE_ATFUNCTIONS
1248 # define ARGVMG_ORIG_DIRP 6
1252 #define NotSupported(e) ((e) == ENOSYS || (e) == ENOTSUP)
1254 #define NotSupported(e) ((e) == ENOSYS)
1258 S_argvout_free(pTHX_ SV *io, MAGIC *mg) {
1259 PERL_UNUSED_ARG(io);
1261 /* note this can be entered once the file has been
1262 successfully deleted too */
1263 assert(IoTYPE(io) != IoTYPE_PIPE);
1265 /* mg_obj can be NULL if a thread is created with the handle open, in which
1266 case we leave any clean up to the parent thread */
1268 #ifdef ARGV_USE_ATFUNCTIONS
1272 dir_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_DIRP, FALSE);
1273 assert(dir_psv && *dir_psv && SvIOK(*dir_psv));
1274 dir = INT2PTR(DIR *, SvIV(*dir_psv));
1277 if (PL_phase == PERL_PHASE_DESTRUCT && PL_statusvalue == 0) {
1278 (void)argvout_final(mg, (IO*)io, FALSE);
1282 PerlIO *iop = IoIFP(io);
1284 assert(SvTYPE(mg->mg_obj) == SVt_PVAV);
1286 pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
1288 assert(pid_psv && *pid_psv);
1290 if (SvIV(*pid_psv) == (IV)PerlProc_getpid()) {
1291 /* if we get here the file hasn't been closed explicitly by the
1292 user and hadn't been closed implicitly by nextargv(), so
1294 SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
1295 const char *temp_pv = SvPVX(*temp_psv);
1297 assert(temp_psv && *temp_psv && SvPOK(*temp_psv));
1298 (void)PerlIO_close(iop);
1299 IoIFP(io) = IoOFP(io) = NULL;
1300 #ifdef ARGV_USE_ATFUNCTIONS
1302 if (unlinkat(my_dirfd(dir), temp_pv, 0) < 0 &&
1303 NotSupported(errno))
1304 (void)UNLINK(temp_pv);
1307 (void)UNLINK(temp_pv);
1312 #ifdef ARGV_USE_ATFUNCTIONS
1322 S_argvout_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *param) {
1323 PERL_UNUSED_ARG(param);
1325 /* ideally we could just remove the magic from the SV but we don't get the SV here */
1326 SvREFCNT_dec(mg->mg_obj);
1332 /* Magic of this type has an AV containing the following:
1333 0: name of the backup file (if any)
1334 1: name of the temp output file
1335 2: name of the original file
1336 3: file mode of the original file
1337 4: pid of the process we opened at, to prevent doing the renaming
1338 etc in both the child and the parent after a fork
1340 If we have useful inode/device ids in stat_t we also keep:
1341 5: a stat of the original current working directory
1343 If we have unlinkat(), renameat(), fchmodat(), dirfd() we also keep:
1344 6: the DIR * for the current directory when we open the file, stored as an IV
1347 static const MGVTBL argvout_vtbl =
1352 NULL, /* svt_clear */
1353 S_argvout_free, /* svt_free */
1354 NULL, /* svt_copy */
1355 S_argvout_dup, /* svt_dup */
1356 NULL /* svt_local */
1360 S_is_fork_open(const char *name) {
1361 /* return true if name matches /^\A\s*(\|\s+-|\-\s+|)\s*\z/ */
1362 while (isSPACE(*name))
1366 while (isSPACE(*name))
1372 else if (*name == '-') {
1374 while (isSPACE(*name))
1383 while (isSPACE(*name))
1390 Perl_nextargv(pTHX_ GV *gv, bool nomagicopen)
1392 IO * const io = GvIOp(gv);
1393 SV *const old_out_name = PL_inplace ? newSVsv(GvSV(gv)) : NULL;
1395 PERL_ARGS_ASSERT_NEXTARGV;
1398 SAVEFREESV(old_out_name);
1401 PL_argvoutgv = gv_fetchpvs("ARGVOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
1402 if (io && (IoFLAGS(io) & (IOf_ARGV|IOf_START)) == (IOf_ARGV|IOf_START)) {
1403 IoFLAGS(io) &= ~IOf_START;
1405 assert(PL_defoutgv);
1406 Perl_av_create_and_push(aTHX_ &PL_argvout_stack,
1407 SvREFCNT_inc_simple_NN(PL_defoutgv));
1412 IO * const io = GvIOp(PL_argvoutgv);
1413 if (io && IoIFP(io) && old_out_name) {
1414 do_close(PL_argvoutgv, FALSE);
1422 while (av_count(GvAV(gv)) > 0) {
1424 SV *const sv = av_shift(GvAV(gv));
1426 SvTAINTED_off(GvSVn(gv)); /* previous tainting irrelevant */
1427 sv_setsv(GvSVn(gv),sv);
1428 SvSETMAGIC(GvSV(gv));
1429 PL_oldname = SvPVx(GvSV(gv), oldlen);
1430 if (LIKELY(!PL_inplace)) {
1432 if (do_open6(gv, "<", 1, NULL, &GvSV(gv), 1)) {
1433 return IoIFP(GvIOp(gv));
1437 if (is_fork_open(PL_oldname)) {
1438 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE),
1439 "Forked open '%s' not meaningful in <>",
1444 if ( do_open6(gv, PL_oldname, oldlen, NULL, NULL, 0) ) {
1445 return IoIFP(GvIOp(gv));
1451 /* This very long block ends with return IoIFP(GvIOp(gv));
1452 Both this block and the block above fall through on open
1453 failure to the warning code, and then the while loop above tries
1455 if (do_open_raw(gv, PL_oldname, oldlen, O_RDONLY, 0, &statbuf)) {
1456 #ifndef FLEXFILENAMES
1460 #ifdef ARGV_USE_ATFUNCTIONS
1465 AV *magic_av = NULL;
1466 SV *temp_name_sv = NULL;
1469 TAINT_PROPER("inplace open");
1470 if (oldlen == 1 && *PL_oldname == '-') {
1471 setdefout(gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL,
1473 return IoIFP(GvIOp(gv));
1475 #ifndef FLEXFILENAMES
1476 filedev = statbuf.st_dev;
1477 fileino = statbuf.st_ino;
1479 PL_filemode = statbuf.st_mode;
1480 fileuid = statbuf.st_uid;
1481 filegid = statbuf.st_gid;
1482 if (!S_ISREG(PL_filemode)) {
1483 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE),
1484 "Can't do inplace edit: %s is not a regular file",
1490 if (*PL_inplace && strNE(PL_inplace, "*")) {
1491 const char *star = strchr(PL_inplace, '*');
1493 const char *begin = PL_inplace;
1496 sv_catpvn(sv, begin, star - begin);
1497 sv_catpvn(sv, PL_oldname, oldlen);
1499 } while ((star = strchr(begin, '*')));
1504 sv_catpv(sv,PL_inplace);
1506 #ifndef FLEXFILENAMES
1507 if ((PerlLIO_stat(SvPVX_const(sv),&statbuf) >= 0
1508 && statbuf.st_dev == filedev
1509 && statbuf.st_ino == fileino)
1512 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE),
1513 "Can't do inplace edit: %"
1514 SVf " would not be unique",
1519 av_store(magic_av, ARGVMG_BACKUP_NAME, newSVsv(sv));
1522 sv_setpvn(sv,PL_oldname,oldlen);
1523 SETERRNO(0,0); /* in case sprintf set errno */
1524 temp_name_sv = newSV(0);
1525 if (!S_openindirtemp(aTHX_ PL_argvoutgv, GvSV(gv), temp_name_sv)) {
1526 SvREFCNT_dec(temp_name_sv);
1527 /* diag_listed_as: Can't do inplace edit on %s: %s */
1528 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE), "Can't do inplace edit on %s: Cannot make temp name: %s",
1529 PL_oldname, Strerror(errno) );
1530 #ifndef FLEXFILENAMES
1534 SvREFCNT_dec(magic_av);
1537 av_store(magic_av, ARGVMG_TEMP_NAME, temp_name_sv);
1538 av_store(magic_av, ARGVMG_ORIG_NAME, newSVsv(sv));
1539 av_store(magic_av, ARGVMG_ORIG_MODE, newSVuv(PL_filemode));
1540 av_store(magic_av, ARGVMG_ORIG_PID, newSViv((IV)PerlProc_getpid()));
1541 #if defined(ARGV_USE_ATFUNCTIONS)
1542 curdir = opendir(".");
1543 av_store(magic_av, ARGVMG_ORIG_DIRP, newSViv(PTR2IV(curdir)));
1544 #elif defined(ARGV_USE_STAT_INO)
1545 if (PerlLIO_stat(".", &statbuf) >= 0) {
1546 av_store(magic_av, ARGVMG_ORIG_CWD_STAT,
1547 newSVpvn((char *)&statbuf, sizeof(statbuf)));
1550 setdefout(PL_argvoutgv);
1551 sv_setsv(GvSVn(PL_argvoutgv), temp_name_sv);
1552 mg = sv_magicext((SV*)GvIOp(PL_argvoutgv), (SV*)magic_av, PERL_MAGIC_uvar, &argvout_vtbl, NULL, 0);
1553 mg->mg_flags |= MGf_DUP;
1554 SvREFCNT_dec(magic_av);
1555 PL_lastfd = PerlIO_fileno(IoIFP(GvIOp(PL_argvoutgv)));
1556 if (PL_lastfd >= 0) {
1557 (void)PerlLIO_fstat(PL_lastfd,&statbuf);
1559 (void)fchmod(PL_lastfd,PL_filemode);
1561 (void)PerlLIO_chmod(PL_oldname,PL_filemode);
1563 if (fileuid != statbuf.st_uid || filegid != statbuf.st_gid) {
1564 /* XXX silently ignore failures */
1566 PERL_UNUSED_RESULT(fchown(PL_lastfd,fileuid,filegid));
1567 #elif defined(HAS_CHOWN)
1568 PERL_UNUSED_RESULT(PerlLIO_chown(PL_oldname,fileuid,filegid));
1572 return IoIFP(GvIOp(gv));
1574 } /* successful do_open_raw(), PL_inplace non-NULL */
1576 if (ckWARN_d(WARN_INPLACE)) {
1577 const int eno = errno;
1579 if (PerlLIO_stat(PL_oldname, &statbuf) >= 0
1580 && !S_ISREG(statbuf.st_mode)) {
1581 Perl_warner(aTHX_ packWARN(WARN_INPLACE),
1582 "Can't do inplace edit: %s is not a regular file",
1586 Perl_warner(aTHX_ packWARN(WARN_INPLACE), "Can't open %s: %s",
1587 PL_oldname, Strerror(eno));
1591 if (io && (IoFLAGS(io) & IOf_ARGV))
1592 IoFLAGS(io) |= IOf_START;
1594 if (io && (IoFLAGS(io) & IOf_ARGV)
1595 && PL_argvout_stack && AvFILLp(PL_argvout_stack) >= 0)
1597 GV * const oldout = MUTABLE_GV(av_pop(PL_argvout_stack));
1599 SvREFCNT_dec_NN(oldout);
1602 setdefout(gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO));
1607 #ifdef ARGV_USE_ATFUNCTIONS
1608 # if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
1610 /* FreeBSD 11 renameat() mis-behaves strangely with absolute paths in cases where the
1611 * equivalent rename() succeeds
1614 S_my_renameat(int olddfd, const char *oldpath, int newdfd, const char *newpath) {
1615 /* this is intended only for use in Perl_do_close() */
1616 assert(olddfd == newdfd);
1617 assert(PERL_FILE_IS_ABSOLUTE(oldpath) == PERL_FILE_IS_ABSOLUTE(newpath));
1618 if (PERL_FILE_IS_ABSOLUTE(oldpath)) {
1619 return PerlLIO_rename(oldpath, newpath);
1622 return renameat(olddfd, oldpath, newdfd, newpath);
1627 # define S_my_renameat(dh1, pv1, dh2, pv2) renameat((dh1), (pv1), (dh2), (pv2))
1628 # endif /* if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) */
1632 S_dir_unchanged(pTHX_ const char *orig_pv, MAGIC *mg) {
1635 #ifdef ARGV_USE_STAT_INO
1636 SV **stat_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_CWD_STAT, FALSE);
1637 Stat_t *orig_cwd_stat = stat_psv && *stat_psv ? (Stat_t *)SvPVX(*stat_psv) : NULL;
1639 /* if the path is absolute the possible moving of cwd (which the file
1640 might be in) isn't our problem.
1641 This code tries to be reasonably balanced about detecting a changed
1642 CWD, if we have the information needed to check that curdir has changed, we
1645 if (!PERL_FILE_IS_ABSOLUTE(orig_pv)
1647 && PerlLIO_stat(".", &statbuf) >= 0
1648 && ( statbuf.st_dev != orig_cwd_stat->st_dev
1649 || statbuf.st_ino != orig_cwd_stat->st_ino)) {
1650 Perl_croak(aTHX_ "Cannot complete in-place edit of %s: %s",
1651 orig_pv, "Current directory has changed");
1654 SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
1656 /* Some platforms don't have useful st_ino etc, so just
1657 check we can see the work file.
1659 if (!PERL_FILE_IS_ABSOLUTE(orig_pv)
1660 && PerlLIO_stat(SvPVX(*temp_psv), &statbuf) < 0) {
1661 Perl_croak(aTHX_ "Cannot complete in-place edit of %s: %s",
1663 "Work file is missing - did you change directory?");
1670 #define dir_unchanged(orig_psv, mg) \
1671 S_dir_unchanged(aTHX_ (orig_psv), (mg))
1674 S_argvout_final(pTHX_ MAGIC *mg, IO *io, bool is_explict) {
1677 /* ensure args are checked before we start using them */
1678 PERL_ARGS_ASSERT_ARGVOUT_FINAL;
1681 /* handle to an in-place edit work file */
1682 SV **back_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_BACKUP_NAME, FALSE);
1683 SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
1684 /* PL_oldname may have been modified by a nested ARGV use at this point */
1685 SV **orig_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_NAME, FALSE);
1686 SV **mode_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_MODE, FALSE);
1687 SV **pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
1688 #if defined(ARGV_USE_ATFUNCTIONS)
1689 SV **dir_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_DIRP, FALSE);
1696 const char *orig_pv;
1698 assert(temp_psv && *temp_psv);
1699 assert(orig_psv && *orig_psv);
1700 assert(mode_psv && *mode_psv);
1701 assert(pid_psv && *pid_psv);
1702 #ifdef ARGV_USE_ATFUNCTIONS
1703 assert(dir_psv && *dir_psv);
1704 dir = INT2PTR(DIR *, SvIVX(*dir_psv));
1705 dfd = my_dirfd(dir);
1708 orig_pv = SvPVX(*orig_psv);
1709 mode = SvUV(*mode_psv);
1711 if ((mode & (S_ISUID|S_ISGID)) != 0
1712 && (fd = PerlIO_fileno(IoIFP(io))) >= 0) {
1713 (void)PerlIO_flush(IoIFP(io));
1715 (void)fchmod(fd, mode);
1717 (void)PerlLIO_chmod(orig_pv, mode);
1721 retval = io_close(io, NULL, is_explict, FALSE);
1723 if (SvIV(*pid_psv) != (IV)PerlProc_getpid()) {
1724 /* this is a child process, don't duplicate our rename() etc
1730 #if defined(DOSISH) || defined(__CYGWIN__)
1731 if (PL_argvgv && GvIOp(PL_argvgv)
1732 && IoIFP(GvIOp(PL_argvgv))
1733 && (IoFLAGS(GvIOp(PL_argvgv)) & (IOf_ARGV|IOf_START)) == IOf_ARGV) {
1734 do_close(PL_argvgv, FALSE);
1737 #ifndef ARGV_USE_ATFUNCTIONS
1738 if (!dir_unchanged(orig_pv, mg))
1741 if (back_psv && *back_psv) {
1742 #if defined(HAS_LINK) && !defined(DOSISH) && !defined(__CYGWIN__) && defined(HAS_RENAME)
1744 # ifdef ARGV_USE_ATFUNCTIONS
1745 linkat(dfd, orig_pv, dfd, SvPVX(*back_psv), 0) < 0 &&
1746 !(UNLIKELY(NotSupported(errno)) &&
1747 dir_unchanged(orig_pv, mg) &&
1748 link(orig_pv, SvPVX(*back_psv)) == 0)
1750 link(orig_pv, SvPVX(*back_psv)) < 0
1757 # ifdef ARGV_USE_ATFUNCTIONS
1758 S_my_renameat(dfd, orig_pv, dfd, SvPVX(*back_psv)) < 0 &&
1759 !(UNLIKELY(NotSupported(errno)) &&
1760 dir_unchanged(orig_pv, mg) &&
1761 PerlLIO_rename(orig_pv, SvPVX(*back_psv)) == 0)
1763 PerlLIO_rename(orig_pv, SvPVX(*back_psv)) < 0
1767 # ifdef ARGV_USE_ATFUNCTIONS
1768 if (unlinkat(dfd, SvPVX_const(*temp_psv), 0) < 0 &&
1769 UNLIKELY(NotSupported(errno)) &&
1770 dir_unchanged(orig_pv, mg))
1771 (void)UNLINK(SvPVX_const(*temp_psv));
1773 UNLINK(SvPVX(*temp_psv));
1775 Perl_croak(aTHX_ "Can't rename %s to %s: %s, skipping file",
1776 SvPVX(*orig_psv), SvPVX(*back_psv), Strerror(errno));
1778 /* should we warn here? */
1782 (void)UNLINK(SvPVX(*back_psv));
1783 if (link(orig_pv, SvPVX(*back_psv))) {
1785 Perl_croak(aTHX_ "Can't rename %s to %s: %s, skipping file",
1786 SvPVX(*orig_psv), SvPVX(*back_psv), Strerror(errno));
1790 /* we need to use link() to get the temp into place too, and linK()
1791 fails if the new link name exists */
1792 (void)UNLINK(orig_pv);
1796 #if defined(DOSISH) || defined(__CYGWIN__) || !defined(HAS_RENAME)
1802 #if !defined(HAS_RENAME)
1803 link(SvPVX(*temp_psv), orig_pv) < 0
1804 #elif defined(ARGV_USE_ATFUNCTIONS)
1805 S_my_renameat(dfd, SvPVX(*temp_psv), dfd, orig_pv) < 0 &&
1806 !(UNLIKELY(NotSupported(errno)) &&
1807 dir_unchanged(orig_pv, mg) &&
1808 PerlLIO_rename(SvPVX(*temp_psv), orig_pv) == 0)
1810 PerlLIO_rename(SvPVX(*temp_psv), orig_pv) < 0
1814 #ifdef ARGV_USE_ATFUNCTIONS
1815 if (unlinkat(dfd, SvPVX_const(*temp_psv), 0) < 0 &&
1816 NotSupported(errno))
1817 UNLINK(SvPVX(*temp_psv));
1819 UNLINK(SvPVX(*temp_psv));
1821 /* diag_listed_as: Cannot complete in-place edit of %s: %s */
1822 Perl_croak(aTHX_ "Cannot complete in-place edit of %s: failed to rename work file '%s' to '%s': %s",
1823 orig_pv, SvPVX(*temp_psv), orig_pv, Strerror(errno));
1826 UNLINK(SvPVX_const(*temp_psv));
1830 UNLINK(SvPVX(*temp_psv));
1834 #ifdef ARGV_USE_ATFUNCTIONS
1835 if (unlinkat(dfd, SvPVX_const(*temp_psv), 0) &&
1836 NotSupported(errno))
1837 UNLINK(SvPVX_const(*temp_psv));
1840 UNLINK(SvPVX_const(*temp_psv));
1843 Perl_croak(aTHX_ "Failed to close in-place work file %s: %s",
1844 SvPVX(*temp_psv), Strerror(errno));
1854 =for apidoc do_close
1856 Close an I/O stream. This implements Perl L<perlfunc/C<close>>.
1858 C<gv> is the glob associated with the stream.
1860 C<is_explict> is C<true> if this is an explicit close of the stream; C<false>
1861 if it is part of another operation, such as closing a pipe (which involves
1862 implicitly closing both ends).
1864 Returns C<true> if successful; otherwise returns C<false> and sets C<errno> to
1871 Perl_do_close(pTHX_ GV *gv, bool is_explict)
1879 if (!gv || !isGV_with_GP(gv)) {
1881 SETERRNO(EBADF,SS_IVCHAN);
1885 if (!io) { /* never opened */
1888 SETERRNO(EBADF,SS_IVCHAN);
1892 if ((mg = mg_findext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl))
1894 retval = argvout_final(mg, io, is_explict);
1895 mg_freeext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl);
1898 retval = io_close(io, NULL, is_explict, FALSE);
1903 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1905 IoTYPE(io) = IoTYPE_CLOSED;
1910 Perl_io_close(pTHX_ IO *io, GV *gv, bool is_explict, bool warn_on_fail)
1912 bool retval = FALSE;
1914 PERL_ARGS_ASSERT_IO_CLOSE;
1917 if (IoTYPE(io) == IoTYPE_PIPE) {
1918 PerlIO *fh = IoIFP(io);
1921 /* my_pclose() can propagate signals which might bypass any code
1922 after the call here if the signal handler throws an exception.
1923 This would leave the handle in the IO object and try to close it again
1924 when the SV is destroyed on unwind or global destruction.
1927 IoOFP(io) = IoIFP(io) = NULL;
1928 status = PerlProc_pclose(fh);
1930 STATUS_NATIVE_CHILD_SET(status);
1931 retval = (STATUS_UNIX == 0);
1934 retval = (status != -1);
1937 else if (IoTYPE(io) == IoTYPE_STD)
1940 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) { /* a socket */
1941 const bool prev_err = PerlIO_error(IoOFP(io));
1944 PerlIO_restore_errno(IoOFP(io));
1946 retval = (PerlIO_close(IoOFP(io)) != EOF && !prev_err);
1947 PerlIO_close(IoIFP(io)); /* clear stdio, fd already closed */
1950 const bool prev_err = PerlIO_error(IoIFP(io));
1953 PerlIO_restore_errno(IoIFP(io));
1955 retval = (PerlIO_close(IoIFP(io)) != EOF && !prev_err);
1958 IoOFP(io) = IoIFP(io) = NULL;
1960 if (warn_on_fail && !retval) {
1962 Perl_ck_warner_d(aTHX_ packWARN(WARN_IO),
1963 "Warning: unable to close filehandle %"
1964 HEKf " properly: %" SVf,
1965 HEKfARG(GvNAME_HEK(gv)),
1966 SVfARG(get_sv("!",GV_ADD)));
1968 Perl_ck_warner_d(aTHX_ packWARN(WARN_IO),
1969 "Warning: unable to close filehandle "
1971 SVfARG(get_sv("!",GV_ADD)));
1974 else if (is_explict) {
1975 SETERRNO(EBADF,SS_IVCHAN);
1982 Perl_do_eof(pTHX_ GV *gv)
1984 IO * const io = GvIO(gv);
1986 PERL_ARGS_ASSERT_DO_EOF;
1990 else if (IoTYPE(io) == IoTYPE_WRONLY)
1991 report_wrongway_fh(gv, '>');
1994 if (PerlIO_has_cntptr(IoIFP(io))) { /* (the code works without this) */
1995 if (PerlIO_get_cnt(IoIFP(io)) > 0) /* cheat a little, since */
1996 return FALSE; /* this is the most usual case */
2000 /* getc and ungetc can stomp on errno */
2002 const int ch = PerlIO_getc(IoIFP(io));
2004 (void)PerlIO_ungetc(IoIFP(io),ch);
2011 if (PerlIO_has_cntptr(IoIFP(io)) && PerlIO_canset_cnt(IoIFP(io))) {
2012 if (PerlIO_get_cnt(IoIFP(io)) < -1)
2013 PerlIO_set_cnt(IoIFP(io),-1);
2015 if (PL_op->op_flags & OPf_SPECIAL) { /* not necessarily a real EOF yet? */
2016 if (gv != PL_argvgv || !nextargv(gv, FALSE)) /* get another fp handy */
2020 return TRUE; /* normal fp, definitely end of file */
2026 Perl_do_tell(pTHX_ GV *gv)
2028 IO *const io = GvIO(gv);
2031 PERL_ARGS_ASSERT_DO_TELL;
2033 if (io && (fp = IoIFP(io))) {
2034 return PerlIO_tell(fp);
2037 SETERRNO(EBADF,RMS_IFI);
2042 Perl_do_seek(pTHX_ GV *gv, Off_t pos, int whence)
2044 IO *const io = GvIO(gv);
2047 if (io && (fp = IoIFP(io))) {
2048 return PerlIO_seek(fp, pos, whence) >= 0;
2051 SETERRNO(EBADF,RMS_IFI);
2056 Perl_do_sysseek(pTHX_ GV *gv, Off_t pos, int whence)
2058 IO *const io = GvIO(gv);
2061 PERL_ARGS_ASSERT_DO_SYSSEEK;
2063 if (io && (fp = IoIFP(io))) {
2064 int fd = PerlIO_fileno(fp);
2065 if (fd < 0 || (whence == SEEK_SET && pos < 0)) {
2066 SETERRNO(EINVAL,LIB_INVARG);
2069 return PerlLIO_lseek(fd, pos, whence);
2073 SETERRNO(EBADF,RMS_IFI);
2078 Perl_mode_from_discipline(pTHX_ const char *s, STRLEN len)
2080 int mode = O_BINARY;
2081 PERL_UNUSED_CONTEXT;
2087 if (s[2] == 'a' && s[3] == 'w'
2088 && (!s[4] || s[4] == ':' || isSPACE(s[4])))
2097 if (s[2] == 'r' && s[3] == 'l' && s[4] == 'f'
2098 && (!s[5] || s[5] == ':' || isSPACE(s[5])))
2107 goto fail_discipline;
2110 else if (isSPACE(*s)) {
2117 end = (char *) memchr(s+1, ':', len);
2120 #ifndef PERLIO_LAYERS
2121 Perl_croak(aTHX_ "IO layers (like '%.*s') unavailable", end-s, s);
2133 =for apidoc my_chsize
2135 The C library L<chsize(3)> if available, or a Perl implementation of it.
2140 #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE)
2142 my_chsize(int fd, Off_t length)
2145 /* code courtesy of William Kucharski */
2150 if (PerlLIO_fstat(fd, &filebuf) < 0)
2153 if (filebuf.st_size < length) {
2155 /* extend file length */
2157 if ((PerlLIO_lseek(fd, (length - 1), 0)) < 0)
2160 /* write a "0" byte */
2162 if ((PerlLIO_write(fd, "", 1)) != 1)
2166 /* truncate length */
2170 fl.l_start = length;
2171 fl.l_type = F_WRLCK; /* write lock on file space */
2174 * This relies on the UNDOCUMENTED F_FREESP argument to
2175 * fcntl(2), which truncates the file so that it ends at the
2176 * position indicated by fl.l_start.
2178 * Will minor miracles never cease?
2181 if (fcntl(fd, F_FREESP, &fl) < 0)
2187 Perl_croak_nocontext("truncate not implemented");
2188 # endif /* F_FREESP */
2191 #endif /* !HAS_TRUNCATE && !HAS_CHSIZE */
2194 Perl_do_print(pTHX_ SV *sv, PerlIO *fp)
2196 PERL_ARGS_ASSERT_DO_PRINT;
2198 /* assuming fp is checked earlier */
2201 if (SvTYPE(sv) == SVt_IV && SvIOK(sv)) {
2202 assert(!SvGMAGICAL(sv));
2204 PerlIO_printf(fp, "%" UVuf, (UV)SvUVX(sv));
2206 PerlIO_printf(fp, "%" IVdf, (IV)SvIVX(sv));
2207 return !PerlIO_error(fp);
2211 /* Do this first to trigger any overloading. */
2212 const char *tmps = SvPV_const(sv, len);
2216 if (PerlIO_isutf8(fp)) { /* If the stream is utf8 ... */
2217 if (!SvUTF8(sv)) { /* Convert to utf8 if necessary */
2218 /* We don't modify the original scalar. */
2219 tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
2220 tmps = (char *) tmpbuf;
2222 else if (ckWARN4_d(WARN_UTF8, WARN_SURROGATE, WARN_NON_UNICODE, WARN_NONCHAR)) {
2223 (void) check_utf8_print((const U8*) tmps, len);
2225 } /* else stream isn't utf8 */
2226 else if (DO_UTF8(sv)) { /* But if is utf8 internally, attempt to
2228 STRLEN tmplen = len;
2230 U8 * const result = bytes_from_utf8((const U8*) tmps, &tmplen, &utf8);
2233 /* Here, succeeded in downgrading from utf8. Set up to below
2234 * output the converted value */
2236 tmps = (char *) tmpbuf;
2239 else { /* Non-utf8 output stream, but string only representable in
2241 assert((char *)result == tmps);
2242 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
2243 "Wide character in %s",
2244 PL_op ? OP_DESC(PL_op) : "print"
2246 /* Could also check that isn't one of the things to avoid
2247 * in utf8 by using check_utf8_print(), but not doing so,
2248 * since the stream isn't a UTF8 stream */
2251 /* To detect whether the process is about to overstep its
2252 * filesize limit we would need getrlimit(). We could then
2253 * also transparently raise the limit with setrlimit() --
2254 * but only until the system hard limit/the filesystem limit,
2255 * at which we would get EPERM. Note that when using buffered
2256 * io the write failure can be delayed until the flush/close. --jhi */
2257 if (len && (PerlIO_write(fp,tmps,len) == 0))
2260 return happy ? !PerlIO_error(fp) : FALSE;
2265 Perl_my_stat_flags(pTHX_ const U32 flags)
2270 if (PL_op->op_flags & OPf_REF) {
2273 if (gv == PL_defgv) {
2274 if (PL_laststatval < 0)
2275 SETERRNO(EBADF,RMS_IFI);
2276 return PL_laststatval;
2280 PL_laststype = OP_STAT;
2281 PL_statgv = gv ? gv : (GV *)io;
2282 SvPVCLEAR(PL_statname);
2285 int fd = PerlIO_fileno(IoIFP(io));
2287 /* E.g. PerlIO::scalar has no real fd. */
2288 SETERRNO(EBADF,RMS_IFI);
2289 return (PL_laststatval = -1);
2291 return (PL_laststatval = PerlLIO_fstat(fd, &PL_statcache));
2293 } else if (IoDIRP(io)) {
2294 return (PL_laststatval = PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache));
2297 PL_laststatval = -1;
2299 SETERRNO(EBADF,RMS_IFI);
2302 else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
2304 return PL_laststatval;
2306 SV* const sv = *PL_stack_sp;
2309 if ((gv = MAYBE_DEREF_GV_flags(sv,flags))) {
2312 else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2313 io = MUTABLE_IO(SvRV(sv));
2315 goto do_fstat_have_io;
2318 s = SvPV_flags_const(sv, len, flags);
2320 sv_setpvn(PL_statname, s, len);
2321 d = SvPVX_const(PL_statname); /* s now NUL-terminated */
2322 PL_laststype = OP_STAT;
2323 if (!IS_SAFE_PATHNAME(s, len, OP_NAME(PL_op))) {
2324 PL_laststatval = -1;
2327 PL_laststatval = PerlLIO_stat(d, &PL_statcache);
2329 if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(s)) {
2330 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral); /* PL_warn_nl is constant */
2331 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
2332 GCC_DIAG_RESTORE_STMT;
2334 return PL_laststatval;
2340 Perl_my_lstat_flags(pTHX_ const U32 flags)
2342 static const char* const no_prev_lstat = "The stat preceding -l _ wasn't an lstat";
2345 SV* const sv = *PL_stack_sp;
2347 if (PL_op->op_flags & OPf_REF) {
2348 if (cGVOP_gv == PL_defgv) {
2349 if (PL_laststype != OP_LSTAT)
2350 Perl_croak(aTHX_ "%s", no_prev_lstat);
2351 if (PL_laststatval < 0)
2352 SETERRNO(EBADF,RMS_IFI);
2353 return PL_laststatval;
2355 PL_laststatval = -1;
2356 if (ckWARN(WARN_IO)) {
2357 /* diag_listed_as: Use of -l on filehandle%s */
2358 Perl_warner(aTHX_ packWARN(WARN_IO),
2359 "Use of -l on filehandle %" HEKf,
2360 HEKfARG(GvENAME_HEK(cGVOP_gv)));
2362 SETERRNO(EBADF,RMS_IFI);
2365 if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
2367 if (PL_laststype != OP_LSTAT)
2368 Perl_croak(aTHX_ "%s", no_prev_lstat);
2369 return PL_laststatval;
2372 PL_laststype = OP_LSTAT;
2374 if ( ( (SvROK(sv) && ( isGV_with_GP(SvRV(sv))
2375 || (isio = SvTYPE(SvRV(sv)) == SVt_PVIO) )
2379 && ckWARN(WARN_IO)) {
2381 /* diag_listed_as: Use of -l on filehandle%s */
2382 Perl_warner(aTHX_ packWARN(WARN_IO),
2383 "Use of -l on filehandle");
2385 /* diag_listed_as: Use of -l on filehandle%s */
2386 Perl_warner(aTHX_ packWARN(WARN_IO),
2387 "Use of -l on filehandle %" HEKf,
2388 HEKfARG(GvENAME_HEK((const GV *)
2389 (SvROK(sv) ? SvRV(sv) : sv))));
2391 file = SvPV_flags_const(sv, len, flags);
2392 sv_setpv(PL_statname,file);
2393 if (!IS_SAFE_PATHNAME(file, len, OP_NAME(PL_op))) {
2394 PL_laststatval = -1;
2397 PL_laststatval = PerlLIO_lstat(file,&PL_statcache);
2399 if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
2400 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral); /* PL_warn_nl is constant */
2401 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "lstat");
2402 GCC_DIAG_RESTORE_STMT;
2404 return PL_laststatval;
2408 S_exec_failed(pTHX_ const char *cmd, int fd, int do_report)
2410 const int e = errno;
2411 PERL_ARGS_ASSERT_EXEC_FAILED;
2413 if (ckWARN(WARN_EXEC))
2414 Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't exec \"%s\": %s",
2417 /* XXX silently ignore failures */
2418 PERL_UNUSED_RESULT(PerlLIO_write(fd, (void*)&e, sizeof(int)));
2424 Perl_do_aexec5(pTHX_ SV *really, SV **mark, SV **sp,
2425 int fd, int do_report)
2427 PERL_ARGS_ASSERT_DO_AEXEC5;
2428 #if defined(__LIBCATAMOUNT__)
2429 Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system");
2434 const char **argv, **a;
2435 const char *tmps = NULL;
2436 Newx(argv, sp - mark + 1, const char*);
2440 while (++mark <= sp) {
2442 char *arg = savepv(SvPV_nolen_const(*mark));
2450 tmps = savepv(SvPV_nolen_const(really));
2453 if ((!really && argv[0] && *argv[0] != '/') ||
2454 (really && *tmps != '/')) /* will execvp use PATH? */
2455 TAINT_ENV(); /* testing IFS here is overkill, probably */
2457 if (really && *tmps) {
2458 PerlProc_execvp(tmps,EXEC_ARGV_CAST(argv));
2459 } else if (argv[0]) {
2460 PerlProc_execvp(argv[0],EXEC_ARGV_CAST(argv));
2462 SETERRNO(ENOENT,RMS_FNF);
2465 S_exec_failed(aTHX_ (really ? tmps : argv[0] ? argv[0] : ""), fd, do_report);
2472 #ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
2475 Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
2477 const char **argv, **a;
2481 /* Make a copy so we can change it */
2482 const Size_t cmdlen = strlen(incmd) + 1;
2484 PERL_ARGS_ASSERT_DO_EXEC3;
2487 Newx(buf, cmdlen, char);
2490 memcpy(cmd, incmd, cmdlen);
2492 while (*cmd && isSPACE(*cmd))
2495 /* save an extra exec if possible */
2499 char flags[PERL_FLAGS_MAX];
2500 if (strnEQ(cmd,PL_cshname,PL_cshlen) &&
2501 strBEGINs(cmd+PL_cshlen," -c")) {
2502 my_strlcpy(flags, "-c", PERL_FLAGS_MAX);
2503 s = cmd+PL_cshlen+3;
2506 my_strlcat(flags, "f", PERL_FLAGS_MAX - 2);
2511 char * const ncmd = s;
2517 if (s[-1] == '\'') {
2520 PerlProc_execl(PL_cshname, "csh", flags, ncmd, (char*)NULL);
2523 S_exec_failed(aTHX_ PL_cshname, fd, do_report);
2531 /* see if there are shell metacharacters in it */
2533 if (*cmd == '.' && isSPACE(cmd[1]))
2536 if (strBEGINs(cmd,"exec") && isSPACE(cmd[4]))
2540 while (isWORDCHAR(*s))
2541 s++; /* catch VAR=val gizmo */
2545 for (s = cmd; *s; s++) {
2546 if (*s != ' ' && !isALPHA(*s) &&
2547 memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) {
2548 if (*s == '\n' && !s[1]) {
2552 /* handle the 2>&1 construct at the end */
2553 if (*s == '>' && s[1] == '&' && s[2] == '1'
2554 && s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2])
2555 && (!s[3] || isSPACE(s[3])))
2557 const char *t = s + 3;
2559 while (*t && isSPACE(*t))
2561 if (!*t && (PerlLIO_dup2(1,2) != -1)) {
2568 PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char *)NULL);
2570 S_exec_failed(aTHX_ PL_sh_path, fd, do_report);
2575 Newx(argv, (s - cmd) / 2 + 2, const char*);
2577 cmd = savepvn(cmd, s-cmd);
2580 for (s = cmd; *s;) {
2585 while (*s && !isSPACE(*s))
2593 PerlProc_execvp(argv[0],EXEC_ARGV_CAST(argv));
2595 if (errno == ENOEXEC) /* for system V NIH syndrome */
2597 S_exec_failed(aTHX_ argv[0], fd, do_report);
2604 #endif /* OS2 || WIN32 */
2607 Perl_apply(pTHX_ I32 type, SV **mark, SV **sp)
2611 const char *const what = PL_op_name[type];
2614 SV ** const oldmark = mark;
2615 bool killgp = FALSE;
2617 PERL_ARGS_ASSERT_APPLY;
2619 PERL_UNUSED_VAR(what); /* may not be used depending on compile options */
2621 /* Doing this ahead of the switch statement preserves the old behaviour,
2622 where attempting to use kill as a taint test would fail on
2623 platforms where kill was not defined. */
2625 if (type == OP_KILL)
2626 Perl_die(aTHX_ PL_no_func, what);
2629 if (type == OP_CHOWN)
2630 Perl_die(aTHX_ PL_no_func, what);
2634 #define APPLY_TAINT_PROPER() \
2636 if (TAINT_get) { TAINT_PROPER(what); } \
2639 /* This is a first heuristic; it doesn't catch tainting magic. */
2641 while (++mark <= sp) {
2642 if (SvTAINTED(*mark)) {
2651 APPLY_TAINT_PROPER();
2654 APPLY_TAINT_PROPER();
2656 while (++mark <= sp) {
2658 if ((gv = MAYBE_DEREF_GV(*mark))) {
2659 if (GvIO(gv) && IoIFP(GvIOp(gv))) {
2661 int fd = PerlIO_fileno(IoIFP(GvIOn(gv)));
2662 APPLY_TAINT_PROPER();
2664 SETERRNO(EBADF,RMS_IFI);
2666 } else if (fchmod(fd, val))
2669 Perl_die(aTHX_ PL_no_func, "fchmod");
2673 SETERRNO(EBADF,RMS_IFI);
2678 const char *name = SvPV_nomg_const(*mark, len);
2679 APPLY_TAINT_PROPER();
2680 if (!IS_SAFE_PATHNAME(name, len, "chmod") ||
2681 PerlLIO_chmod(name, val)) {
2690 APPLY_TAINT_PROPER();
2691 if (sp - mark > 2) {
2693 val = SvIVx(*++mark);
2694 val2 = SvIVx(*++mark);
2695 APPLY_TAINT_PROPER();
2697 while (++mark <= sp) {
2699 if ((gv = MAYBE_DEREF_GV(*mark))) {
2700 if (GvIO(gv) && IoIFP(GvIOp(gv))) {
2702 int fd = PerlIO_fileno(IoIFP(GvIOn(gv)));
2703 APPLY_TAINT_PROPER();
2705 SETERRNO(EBADF,RMS_IFI);
2707 } else if (fchown(fd, val, val2))
2710 Perl_die(aTHX_ PL_no_func, "fchown");
2714 SETERRNO(EBADF,RMS_IFI);
2719 const char *name = SvPV_nomg_const(*mark, len);
2720 APPLY_TAINT_PROPER();
2721 if (!IS_SAFE_PATHNAME(name, len, "chown") ||
2722 PerlLIO_chown(name, val, val2)) {
2731 XXX Should we make lchown() directly available from perl?
2732 For now, we'll let Configure test for HAS_LCHOWN, but do
2733 nothing in the core.
2738 APPLY_TAINT_PROPER();
2741 s = SvPVx_const(*++mark, len);
2742 if (*s == '-' && isALPHA(s[1]))
2749 if (*s == 'S' && s[1] == 'I' && s[2] == 'G') {
2753 if ((val = whichsig_pvn(s, len)) < 0)
2754 Perl_croak(aTHX_ "Unrecognized signal name \"%" SVf "\"",
2766 APPLY_TAINT_PROPER();
2769 while (++mark <= sp) {
2772 if (!(SvNIOK(*mark) || looks_like_number(*mark)))
2773 Perl_croak(aTHX_ "Can't kill a non-numeric process ID");
2774 proc = SvIV_nomg(*mark);
2775 APPLY_TAINT_PROPER();
2777 /* use killpg in preference, as the killpg() wrapper for Win32
2778 * understands process groups, but the kill() wrapper doesn't */
2779 if (killgp ? PerlProc_killpg(proc, val)
2780 : PerlProc_kill(proc, val))
2782 if (PerlProc_kill(killgp ? -proc: proc, val))
2790 APPLY_TAINT_PROPER();
2792 while (++mark <= sp) {
2793 s = SvPV_const(*mark, len);
2794 APPLY_TAINT_PROPER();
2795 if (!IS_SAFE_PATHNAME(s, len, "unlink")) {
2798 else if (PL_unsafe) {
2803 #if defined(__amigaos4__) && defined(NEWLIB)
2806 /* Under AmigaOS4 unlink only 'fails' if the
2807 * filename is invalid. It may not remove the file
2808 * if it's locked, so check if it's still around. */
2809 if ((access(s,F_OK) != -1))
2816 else { /* don't let root wipe out directories without -U */
2818 if (PerlLIO_lstat(s, &statbuf) < 0)
2820 else if (S_ISDIR(statbuf.st_mode)) {
2821 SETERRNO(EISDIR, SS_NOPRIV);
2829 #if defined(__amigaos4__) && defined(NEWLIB)
2832 /* Under AmigaOS4 unlink only 'fails' if the filename is invalid */
2833 /* It may not remove the file if it's Locked, so check if it's still */
2835 if((access(s,F_OK) != -1))
2845 #if defined(HAS_UTIME) || defined(HAS_FUTIMES)
2847 APPLY_TAINT_PROPER();
2848 if (sp - mark > 2) {
2849 #if defined(HAS_FUTIMES)
2850 struct timeval utbuf[2];
2851 void *utbufp = utbuf;
2852 #elif defined(I_UTIME) || defined(VMS)
2853 struct utimbuf utbuf;
2854 struct utimbuf *utbufp = &utbuf;
2860 void *utbufp = &utbuf;
2863 SV* const accessed = *++mark;
2864 SV* const modified = *++mark;
2866 /* Be like C, and if both times are undefined, let the C
2867 * library figure out what to do. This usually means
2868 * "current time". */
2870 if ( accessed == &PL_sv_undef && modified == &PL_sv_undef )
2873 Zero(&utbuf, sizeof utbuf, char);
2875 utbuf[0].tv_sec = (time_t)SvIV(accessed); /* time accessed */
2876 utbuf[0].tv_usec = 0;
2877 utbuf[1].tv_sec = (time_t)SvIV(modified); /* time modified */
2878 utbuf[1].tv_usec = 0;
2879 #elif defined(BIG_TIME)
2880 utbuf.actime = (Time_t)SvNV(accessed); /* time accessed */
2881 utbuf.modtime = (Time_t)SvNV(modified); /* time modified */
2883 utbuf.actime = (Time_t)SvIV(accessed); /* time accessed */
2884 utbuf.modtime = (Time_t)SvIV(modified); /* time modified */
2887 APPLY_TAINT_PROPER();
2889 while (++mark <= sp) {
2891 if ((gv = MAYBE_DEREF_GV(*mark))) {
2892 if (GvIO(gv) && IoIFP(GvIOp(gv))) {
2894 int fd = PerlIO_fileno(IoIFP(GvIOn(gv)));
2895 APPLY_TAINT_PROPER();
2897 SETERRNO(EBADF,RMS_IFI);
2899 } else if (futimes(fd, (struct timeval *) utbufp))
2902 Perl_die(aTHX_ PL_no_func, "futimes");
2906 SETERRNO(EBADF,RMS_IFI);
2911 const char * const name = SvPV_nomg_const(*mark, len);
2912 APPLY_TAINT_PROPER();
2913 if (!IS_SAFE_PATHNAME(name, len, "utime")) {
2918 if (utimes(name, (struct timeval *)utbufp))
2920 if (PerlLIO_utime(name, utbufp))
2934 #undef APPLY_TAINT_PROPER
2937 /* Do the permissions in *statbufp allow some operation? */
2938 #ifndef VMS /* VMS' cando is in vms.c */
2940 Perl_cando(pTHX_ Mode_t mode, bool effective, const Stat_t *statbufp)
2941 /* effective is a flag, true for EUID, or for checking if the effective gid
2942 * is in the list of groups returned from getgroups().
2945 PERL_ARGS_ASSERT_CANDO;
2946 PERL_UNUSED_CONTEXT;
2949 /* [Comments and code from Len Reed]
2950 * MS-DOS "user" is similar to UNIX's "superuser," but can't write
2951 * to write-protected files. The execute permission bit is set
2952 * by the Microsoft C library stat() function for the following:
2957 * All files and directories are readable.
2958 * Directories and special files, e.g. "CON", cannot be
2960 * [Comment by Tom Dinger -- a directory can have the write-protect
2961 * bit set in the file system, but DOS permits changes to
2962 * the directory anyway. In addition, all bets are off
2963 * here for networked software, such as Novell and
2967 /* Atari stat() does pretty much the same thing. we set x_bit_set_in_stat
2968 * too so it will actually look into the files for magic numbers
2970 return cBOOL(mode & statbufp->st_mode);
2972 #else /* ! DOSISH */
2974 if (ingroup(544,effective)) { /* member of Administrators */
2976 if ((effective ? PerlProc_geteuid() : PerlProc_getuid()) == 0) { /* root is special */
2978 if (mode == S_IXUSR) {
2979 if (statbufp->st_mode & 0111 || S_ISDIR(statbufp->st_mode))
2983 return TRUE; /* root reads and writes anything */
2986 if (statbufp->st_uid == (effective ? PerlProc_geteuid() : PerlProc_getuid()) ) {
2987 if (statbufp->st_mode & mode)
2988 return TRUE; /* ok as "user" */
2990 else if (ingroup(statbufp->st_gid,effective)) {
2991 if (statbufp->st_mode & mode >> 3)
2992 return TRUE; /* ok as "group" */
2994 else if (statbufp->st_mode & mode >> 6)
2995 return TRUE; /* ok as "other" */
2997 #endif /* ! DOSISH */
3002 S_ingroup(pTHX_ Gid_t testgid, bool effective)
3004 #ifndef PERL_IMPLICIT_SYS
3005 /* PERL_IMPLICIT_SYS like Win32: getegid() etc. require the context. */
3006 PERL_UNUSED_CONTEXT;
3008 if (testgid == (effective ? PerlProc_getegid() : PerlProc_getgid()))
3010 #ifdef HAS_GETGROUPS
3012 Groups_t *gary = NULL;
3016 anum = getgroups(0, gary);
3018 Newx(gary, anum, Groups_t);
3019 anum = getgroups(anum, gary);
3021 if (gary[anum] == testgid) {
3035 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
3038 Perl_do_ipcget(pTHX_ I32 optype, SV **mark, SV **sp)
3040 const key_t key = (key_t)SvNVx(*++mark);
3041 SV *nsv = optype == OP_MSGGET ? NULL : *++mark;
3042 const I32 flags = SvIVx(*++mark);
3044 PERL_ARGS_ASSERT_DO_IPCGET;
3045 PERL_UNUSED_ARG(sp);
3052 return msgget(key, flags);
3056 return semget(key, (int) SvIV(nsv), flags);
3060 return shmget(key, (size_t) SvUV(nsv), flags);
3062 #if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
3064 /* diag_listed_as: msg%s not implemented */
3065 Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
3068 return -1; /* should never happen */
3072 Perl_do_ipcctl(pTHX_ I32 optype, SV **mark, SV **sp)
3076 const I32 id = SvIVx(*++mark);
3078 const I32 n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0;
3080 const I32 cmd = SvIVx(*++mark);
3081 SV * const astr = *++mark;
3082 STRLEN infosize = 0;
3083 I32 getinfo = (cmd == IPC_STAT);
3085 PERL_ARGS_ASSERT_DO_IPCCTL;
3086 PERL_UNUSED_ARG(sp);
3092 if (cmd == IPC_STAT || cmd == IPC_SET)
3093 infosize = sizeof(struct msqid_ds);
3098 if (cmd == IPC_STAT || cmd == IPC_SET)
3099 infosize = sizeof(struct shmid_ds);
3105 if (cmd == IPC_STAT || cmd == IPC_SET)
3106 infosize = sizeof(struct semid_ds);
3107 else if (cmd == GETALL || cmd == SETALL)
3109 struct semid_ds semds;
3111 #ifdef EXTRA_F_IN_SEMUN_BUF
3112 semun.buff = &semds;
3116 getinfo = (cmd == GETALL);
3117 if (Semctl(id, 0, IPC_STAT, semun) == -1)
3119 infosize = semds.sem_nsems * sizeof(short);
3120 /* "short" is technically wrong but much more portable
3121 than guessing about u_?short(_t)? */
3124 /* diag_listed_as: sem%s not implemented */
3125 Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
3129 #if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
3131 /* diag_listed_as: shm%s not implemented */
3132 Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
3140 /* we're not using the value here, so don't SvPVanything */
3141 SvUPGRADE(astr, SVt_PV);
3143 if (SvTHINKFIRST(astr))
3144 sv_force_normal_flags(astr, 0);
3145 a = SvGROW(astr, infosize+1);
3150 a = SvPVbyte(astr, len);
3151 if (len != infosize)
3152 Perl_croak(aTHX_ "Bad arg length for %s, is %lu, should be %ld",
3160 /* We historically treat this as a pointer if we don't otherwise recognize
3161 the op, but for many ops the value is simply ignored anyway, so
3162 don't warn on undef.
3166 const IV i = SvIV_nomg(astr);
3167 a = INT2PTR(char *,i); /* ouch */
3178 ret = msgctl(id, cmd, (struct msqid_ds *)a);
3184 union semun unsemds;
3187 unsemds.val = PTR2nat(a);
3190 #ifdef EXTRA_F_IN_SEMUN_BUF
3191 unsemds.buff = (struct semid_ds *)a;
3193 unsemds.buf = (struct semid_ds *)a;
3196 ret = Semctl(id, n, cmd, unsemds);
3198 /* diag_listed_as: sem%s not implemented */
3199 Perl_croak(aTHX_ "%s not implemented", PL_op_desc[optype]);
3206 ret = shmctl(id, cmd, (struct shmid_ds *)a);
3210 if (getinfo && ret >= 0) {
3211 SvCUR_set(astr, infosize);
3212 *SvEND(astr) = '\0';
3220 Perl_do_msgsnd(pTHX_ SV **mark, SV **sp)
3223 PERL_ARGS_ASSERT_DO_MSGSND;
3224 PERL_UNUSED_ARG(sp);
3227 const I32 id = SvIVx(*++mark);
3228 SV * const mstr = *++mark;
3229 const I32 flags = SvIVx(*++mark);
3230 const char * const mbuf = SvPVbyte(mstr, len);
3232 if (len < sizeof(long))
3233 Perl_croak(aTHX_ "Arg too short for msgsnd");
3235 const STRLEN msize = len - sizeof(long);
3238 if (id >= 0 && flags >= 0) {
3239 return msgsnd(id, (struct msgbuf *)mbuf, msize, flags);
3241 SETERRNO(EINVAL,LIB_INVARG);
3245 PERL_UNUSED_ARG(sp);
3246 PERL_UNUSED_ARG(mark);
3247 /* diag_listed_as: msg%s not implemented */
3248 Perl_croak(aTHX_ "msgsnd not implemented");
3254 Perl_do_msgrcv(pTHX_ SV **mark, SV **sp)
3260 const I32 id = SvIVx(*++mark);
3261 SV * const mstr = *++mark;
3263 PERL_ARGS_ASSERT_DO_MSGRCV;
3264 PERL_UNUSED_ARG(sp);
3266 /* suppress warning when reading into undef var --jhi */
3269 SSize_t msize = SvIVx(*++mark);
3270 mtype = (long)SvIVx(*++mark);
3271 flags = SvIVx(*++mark);
3272 SvPV_force_nomg_nolen(mstr);
3276 if (id >= 0 && msize >= 0 && flags >= 0) {
3277 mbuf = SvGROW(mstr, sizeof(long)+msize+1);
3278 ret = msgrcv(id, (struct msgbuf *)mbuf, msize, mtype, flags);
3280 SETERRNO(EINVAL,LIB_INVARG);
3284 SvCUR_set(mstr, sizeof(long)+ret);
3286 *SvEND(mstr) = '\0';
3288 /* who knows who has been playing with this message? */
3294 PERL_UNUSED_ARG(sp);
3295 PERL_UNUSED_ARG(mark);
3296 /* diag_listed_as: msg%s not implemented */
3297 Perl_croak(aTHX_ "msgrcv not implemented");
3303 Perl_do_semop(pTHX_ SV **mark, SV **sp)
3307 const I32 id = SvIVx(*++mark);
3308 SV * const opstr = *++mark;
3309 const char * const opbuf = SvPVbyte(opstr, opsize);
3311 PERL_ARGS_ASSERT_DO_SEMOP;
3312 PERL_UNUSED_ARG(sp);
3314 if (opsize < 3 * SHORTSIZE
3315 || (opsize % (3 * SHORTSIZE))) {
3316 SETERRNO(EINVAL,LIB_INVARG);
3320 /* We can't assume that sizeof(struct sembuf) == 3 * sizeof(short). */
3322 const int nsops = opsize / (3 * sizeof (short));
3324 short * const ops = (short *) opbuf;
3326 struct sembuf *temps, *t;
3329 Newx (temps, nsops, struct sembuf);
3337 result = semop(id, temps, nsops);
3342 /* diag_listed_as: sem%s not implemented */
3343 Perl_croak(aTHX_ "semop not implemented");
3348 Perl_do_shmio(pTHX_ I32 optype, SV **mark, SV **sp)
3352 struct shmid_ds shmds;
3353 const I32 id = SvIVx(*++mark);
3354 SV * const mstr = *++mark;
3355 const I32 mpos = SvIVx(*++mark);
3356 const I32 msize = SvIVx(*++mark);
3358 PERL_ARGS_ASSERT_DO_SHMIO;
3359 PERL_UNUSED_ARG(sp);
3362 if (shmctl(id, IPC_STAT, &shmds) == -1)
3364 if (mpos < 0 || msize < 0
3365 || (size_t)mpos + msize > (size_t)shmds.shm_segsz) {
3366 SETERRNO(EFAULT,SS_ACCVIO); /* can't do as caller requested */
3370 shm = (char *)shmat(id, NULL, (optype == OP_SHMREAD) ? SHM_RDONLY : 0);
3372 SETERRNO(EINVAL,LIB_INVARG);
3375 if (shm == (char *)-1) /* I hate System V IPC, I really do */
3377 if (optype == OP_SHMREAD) {
3379 /* suppress warning when reading into undef var (tchrist 3/Mar/00) */
3381 SvUPGRADE(mstr, SVt_PV);
3385 mbuf = SvGROW(mstr, (STRLEN)msize+1);
3387 Copy(shm + mpos, mbuf, msize, char);
3388 SvCUR_set(mstr, msize);
3389 *SvEND(mstr) = '\0';
3391 /* who knows who has been playing with this shared memory? */
3397 const char *mbuf = SvPVbyte(mstr, len);
3398 const I32 n = ((I32)len > msize) ? msize : (I32)len;
3399 Copy(mbuf, shm + mpos, n, char);
3401 memzero(shm + mpos + n, msize - n);
3405 /* diag_listed_as: shm%s not implemented */
3406 Perl_croak(aTHX_ "shm I/O not implemented");
3411 #endif /* SYSV IPC */
3414 =for apidoc start_glob
3416 Function called by C<do_readline> to spawn a glob (or do the glob inside
3417 perl on VMS). This code used to be inline, but now perl uses C<File::Glob>
3418 this glob starter is only used by miniperl during the build process,
3419 or when PERL_EXTERNAL_GLOB is defined.
3420 Moving it away shrinks F<pp_hot.c>; shrinking F<pp_hot.c> helps speed perl up.
3426 Perl_start_glob (pTHX_ SV *tmpglob, IO *io)
3428 SV * const tmpcmd = newSV(0);
3431 const char *s = SvPV(tmpglob, len);
3433 PERL_ARGS_ASSERT_START_GLOB;
3435 if (!IS_SAFE_SYSCALL(s, len, "pattern", "glob"))
3440 #ifdef VMS /* expand the wildcards right here, rather than opening a pipe, */
3441 /* since spawning off a process is a real performance hit */
3448 fp = Perl_vms_start_glob(aTHX_ tmpglob, io);
3453 sv_setpv(tmpcmd, "for a in ");
3454 sv_catsv(tmpcmd, tmpglob);
3455 sv_catpvs(tmpcmd, "; do echo \"$a\\0\\c\"; done |");
3457 sv_setpv(tmpcmd, "perlglob ");
3458 sv_catsv(tmpcmd, tmpglob);
3459 sv_catpvs(tmpcmd, " |");
3462 sv_setpvn(tmpcmd, PL_cshname, PL_cshlen);
3463 sv_catpvs(tmpcmd, " -cf 'set nonomatch; glob ");
3464 sv_catsv(tmpcmd, tmpglob);
3465 sv_catpvs(tmpcmd, "' 2>/dev/null |");
3467 sv_setpv(tmpcmd, "echo ");
3468 sv_catsv(tmpcmd, tmpglob);
3469 sv_catpvs(tmpcmd, "|tr -s ' \t\f\r' '\\n\\n\\n\\n'|");
3470 # endif /* !DOSISH && !CSH */
3472 SV ** const svp = hv_fetchs(GvHVn(PL_envgv), "LS_COLORS", 0);
3474 save_helem_flags(GvHV(PL_envgv),
3475 newSVpvs_flags("LS_COLORS", SVs_TEMP), svp,
3478 (void)do_open6(PL_last_in_gv, SvPVX_const(tmpcmd), SvCUR(tmpcmd),
3484 if (!fp && ckWARN(WARN_GLOB)) {
3485 Perl_warner(aTHX_ packWARN(WARN_GLOB), "glob failed (can't start child: %s)",
3493 * ex: set ts=8 sts=4 sw=4 et: