3 * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4 * 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 * But only a short way ahead its floor and the walls on either side were
13 * cloven by a great fissure, out of which the red glare came, now leaping
14 * up, now dying down into darkness; and all the while far below there was
15 * a rumour and a trouble as of great engines throbbing and labouring.
17 * [p.945 of _The Lord of the Rings_, VI/iii: "Mount Doom"]
20 /* This file contains system pp ("push/pop") functions that
21 * execute the opcodes that make up a perl program. A typical pp function
22 * expects to find its arguments on the stack, and usually pushes its
23 * results onto the stack, hence the 'pp' terminology. Each OP structure
24 * contains a pointer to the relevant pp_foo() function.
26 * By 'system', we mean ops which interact with the OS, such as pp_open().
30 #define PERL_IN_PP_SYS_C
35 /* Shadow password support for solaris - pdo@cs.umd.edu
36 * Not just Solaris: at least HP-UX, IRIX, Linux.
37 * The API is from SysV.
39 * There are at least two more shadow interfaces,
40 * see the comments in pp_gpwent().
44 /* There is a MAXINT coming from <shadow.h> <- <hpsecurity.h> <- <values.h>
45 * and another MAXINT from "perl.h" <- <sys/param.h>. */
52 # include <sys/resource.h>
61 # include <sys/select.h>
65 /* XXX Configure test needed.
66 h_errno might not be a simple 'int', especially for multi-threaded
67 applications, see "extern int errno in perl.h". Creating such
68 a test requires taking into account the differences between
69 compiling multithreaded and singlethreaded ($ccflags et al).
70 HOST_NOT_FOUND is typically defined in <netdb.h>.
72 #if defined(HOST_NOT_FOUND) && !defined(h_errno) && !defined(__CYGWIN__)
81 struct passwd *getpwnam (char *);
82 struct passwd *getpwuid (Uid_t);
87 struct passwd *getpwent (void);
88 #elif defined (VMS) && defined (my_getpwent)
89 struct passwd *Perl_my_getpwent (pTHX);
98 struct group *getgrnam (char *);
99 struct group *getgrgid (Gid_t);
103 struct group *getgrent (void);
109 # if defined(_MSC_VER) || defined(__MINGW32__)
110 # include <sys/utime.h>
117 # ifdef my_chsize /* Probably #defined to Perl_my_chsize in embed.h */
120 # define my_chsize PerlLIO_chsize
123 # define my_chsize PerlLIO_chsize
125 I32 my_chsize(int fd, Off_t length);
131 #else /* no flock() */
133 /* fcntl.h might not have been included, even if it exists, because
134 the current Configure only sets I_FCNTL if it's needed to pick up
135 the *_OK constants. Make sure it has been included before testing
136 the fcntl() locking constants. */
137 # if defined(HAS_FCNTL) && !defined(I_FCNTL)
141 # if defined(HAS_FCNTL) && defined(FCNTL_CAN_LOCK)
142 # define FLOCK fcntl_emulate_flock
143 # define FCNTL_EMULATE_FLOCK
144 # else /* no flock() or fcntl(F_SETLK,...) */
146 # define FLOCK lockf_emulate_flock
147 # define LOCKF_EMULATE_FLOCK
149 # endif /* no flock() or fcntl(F_SETLK,...) */
152 static int FLOCK (int, int);
155 * These are the flock() constants. Since this sytems doesn't have
156 * flock(), the values of the constants are probably not available.
170 # endif /* emulating flock() */
172 #endif /* no flock() */
175 static const char zero_but_true[ZBTLEN + 1] = "0 but true";
177 #if defined(I_SYS_ACCESS) && !defined(R_OK)
178 # include <sys/access.h>
184 /* Missing protos on LynxOS */
185 void sethostent(int);
186 void endhostent(void);
188 void endnetent(void);
189 void setprotoent(int);
190 void endprotoent(void);
191 void setservent(int);
192 void endservent(void);
196 # include "amigaos4/amigaio.h"
199 #undef PERL_EFF_ACCESS /* EFFective uid/gid ACCESS */
201 /* F_OK unused: if stat() cannot find it... */
203 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) && defined(EFF_ONLY_OK) && !defined(NO_EFF_ONLY_OK)
204 /* Digital UNIX (when the EFF_ONLY_OK gets fixed), UnixWare */
205 # define PERL_EFF_ACCESS(p,f) (access((p), (f) | EFF_ONLY_OK))
208 #if !defined(PERL_EFF_ACCESS) && defined(HAS_EACCESS)
209 # ifdef I_SYS_SECURITY
210 # include <sys/security.h>
214 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f), ACC_SELF))
217 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f)))
221 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESSX) && defined(ACC_SELF)
223 # define PERL_EFF_ACCESS(p,f) (accessx((p), (f), ACC_SELF))
227 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) \
228 && (defined(HAS_SETREUID) || defined(HAS_SETRESUID) \
229 || defined(HAS_SETREGID) || defined(HAS_SETRESGID))
232 S_emulate_eaccess(pTHX_ const char* path, Mode_t mode)
234 const Uid_t ruid = getuid();
235 const Uid_t euid = geteuid();
236 const Gid_t rgid = getgid();
237 const Gid_t egid = getegid();
240 #if !defined(HAS_SETREUID) && !defined(HAS_SETRESUID)
241 Perl_croak(aTHX_ "switching effective uid is not implemented");
244 if (setreuid(euid, ruid))
247 if (setresuid(euid, ruid, (Uid_t)-1))
250 /* diag_listed_as: entering effective %s failed */
251 Perl_croak(aTHX_ "entering effective uid failed");
254 #if !defined(HAS_SETREGID) && !defined(HAS_SETRESGID)
255 Perl_croak(aTHX_ "switching effective gid is not implemented");
258 if (setregid(egid, rgid))
261 if (setresgid(egid, rgid, (Gid_t)-1))
264 /* diag_listed_as: entering effective %s failed */
265 Perl_croak(aTHX_ "entering effective gid failed");
268 res = access(path, mode);
271 if (setreuid(ruid, euid))
274 if (setresuid(ruid, euid, (Uid_t)-1))
277 /* diag_listed_as: leaving effective %s failed */
278 Perl_croak(aTHX_ "leaving effective uid failed");
281 if (setregid(rgid, egid))
284 if (setresgid(rgid, egid, (Gid_t)-1))
287 /* diag_listed_as: leaving effective %s failed */
288 Perl_croak(aTHX_ "leaving effective gid failed");
292 # define PERL_EFF_ACCESS(p,f) (S_emulate_eaccess(aTHX_ (p), (f)))
299 const char * const tmps = POPpconstx;
300 const I32 gimme = GIMME_V;
301 const char *mode = "r";
304 if (PL_op->op_private & OPpOPEN_IN_RAW)
306 else if (PL_op->op_private & OPpOPEN_IN_CRLF)
308 fp = PerlProc_popen(tmps, mode);
310 const char * const type = Perl_PerlIO_context_layers(aTHX_ NULL);
312 PerlIO_apply_layers(aTHX_ fp,mode,type);
314 if (gimme == G_VOID) {
316 while (PerlIO_read(fp, tmpbuf, sizeof tmpbuf) > 0)
319 else if (gimme == G_SCALAR) {
320 ENTER_with_name("backtick");
322 PL_rs = &PL_sv_undef;
323 sv_setpvs(TARG, ""); /* note that this preserves previous buffer */
324 while (sv_gets(TARG, fp, SvCUR(TARG)) != NULL)
326 LEAVE_with_name("backtick");
332 SV * const sv = newSV(79);
333 if (sv_gets(sv, fp, 0) == NULL) {
338 if (SvLEN(sv) - SvCUR(sv) > 20) {
339 SvPV_shrink_to_cur(sv);
344 STATUS_NATIVE_CHILD_SET(PerlProc_pclose(fp));
345 TAINT; /* "I believe that this is not gratuitous!" */
348 STATUS_NATIVE_CHILD_SET(-1);
349 if (gimme == G_SCALAR)
360 GV * const gv = (PL_op->op_flags & OPf_SPECIAL) ? NULL : (GV *)POPs;
364 /* make a copy of the pattern if it is gmagical, to ensure that magic
365 * is called once and only once */
366 if (SvGMAGICAL(TOPs)) TOPs = sv_2mortal(newSVsv(TOPs));
368 tryAMAGICunTARGETlist(iter_amg, (PL_op->op_flags & OPf_SPECIAL));
370 if (PL_op->op_flags & OPf_SPECIAL) {
371 /* call Perl-level glob function instead. Stack args are:
373 * and following OPs should be: gv(CORE::GLOBAL::glob), entersub
382 /* Note that we only ever get here if File::Glob fails to load
383 * without at the same time croaking, for some reason, or if
384 * perl was built with PERL_EXTERNAL_GLOB */
386 ENTER_with_name("glob");
391 * The external globbing program may use things we can't control,
392 * so for security reasons we must assume the worst.
395 taint_proper(PL_no_security, "glob");
399 SAVESPTR(PL_last_in_gv); /* We don't want this to be permanent. */
402 SAVESPTR(PL_rs); /* This is not permanent, either. */
403 PL_rs = newSVpvs_flags("\000", SVs_TEMP);
406 *SvPVX(PL_rs) = '\n';
410 result = do_readline();
411 LEAVE_with_name("glob");
417 PL_last_in_gv = cGVOP_gv;
418 return do_readline();
428 do_join(TARG, &PL_sv_no, MARK, SP);
432 else if (SP == MARK) {
439 if (SvGMAGICAL(exsv)) exsv = sv_mortalcopy(exsv);
442 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
443 /* well-formed exception supplied */
446 SV * const errsv = ERRSV;
449 if (SvGMAGICAL(errsv)) {
450 exsv = sv_newmortal();
451 sv_setsv_nomg(exsv, errsv);
455 else if (SvPOKp(errsv) ? SvCUR(errsv) : SvNIOKp(errsv)) {
456 exsv = sv_newmortal();
457 sv_setsv_nomg(exsv, errsv);
458 sv_catpvs(exsv, "\t...caught");
461 exsv = newSVpvs_flags("Warning: something's wrong", SVs_TEMP);
464 if (SvROK(exsv) && !PL_warnhook)
465 Perl_warn(aTHX_ "%"SVf, SVfARG(exsv));
477 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
479 if (SP - MARK != 1) {
481 do_join(TARG, &PL_sv_no, MARK, SP);
489 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
490 /* well-formed exception supplied */
493 SV * const errsv = ERRSV;
497 if (sv_isobject(exsv)) {
498 HV * const stash = SvSTASH(SvRV(exsv));
499 GV * const gv = gv_fetchmethod(stash, "PROPAGATE");
501 SV * const file = sv_2mortal(newSVpv(CopFILE(PL_curcop),0));
502 SV * const line = sv_2mortal(newSVuv(CopLINE(PL_curcop)));
509 call_sv(MUTABLE_SV(GvCV(gv)),
510 G_SCALAR|G_EVAL|G_KEEPERR);
511 exsv = sv_mortalcopy(*PL_stack_sp--);
515 else if (SvPOK(errsv) && SvCUR(errsv)) {
516 exsv = sv_mortalcopy(errsv);
517 sv_catpvs(exsv, "\t...propagated");
520 exsv = newSVpvs_flags("Died", SVs_TEMP);
524 NOT_REACHED; /* NOTREACHED */
525 return NULL; /* avoid missing return from non-void function warning */
531 Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv,
532 const MAGIC *const mg, const U32 flags, U32 argc, ...)
538 PERL_ARGS_ASSERT_TIED_METHOD;
540 /* Ensure that our flag bits do not overlap. */
541 STATIC_ASSERT_STMT((TIED_METHOD_MORTALIZE_NOT_NEEDED & G_WANT) == 0);
542 STATIC_ASSERT_STMT((TIED_METHOD_ARGUMENTS_ON_STACK & G_WANT) == 0);
543 STATIC_ASSERT_STMT((TIED_METHOD_SAY & G_WANT) == 0);
545 PUTBACK; /* sp is at *foot* of args, so this pops args from old stack */
546 PUSHSTACKi(PERLSI_MAGIC);
547 /* extend for object + args. If argc might wrap/truncate when cast
548 * to SSize_t and incremented, set to -1, which will trigger a panic in
550 * The weird way this is written is because g++ is dumb enough to
551 * warn "comparison is always false" on something like:
553 * sizeof(a) >= sizeof(b) && a >= B_t_MAX -1
555 * (where the LH condition is false)
558 (argc > (sizeof(argc) >= sizeof(SSize_t) ? SSize_t_MAX - 1 : argc))
559 ? -1 : (SSize_t)argc + 1;
560 EXTEND(SP, extend_size);
562 PUSHs(SvTIED_obj(sv, mg));
563 if (flags & TIED_METHOD_ARGUMENTS_ON_STACK) {
564 Copy(orig_sp + 2, sp + 1, argc, SV*); /* copy args to new stack */
568 const U32 mortalize_not_needed
569 = flags & TIED_METHOD_MORTALIZE_NOT_NEEDED;
571 va_start(args, argc);
573 SV *const arg = va_arg(args, SV *);
574 if(mortalize_not_needed)
583 ENTER_with_name("call_tied_method");
584 if (flags & TIED_METHOD_SAY) {
585 /* local $\ = "\n" */
586 SAVEGENERICSV(PL_ors_sv);
587 PL_ors_sv = newSVpvs("\n");
589 ret_args = call_sv(methname, (flags & G_WANT)|G_METHOD_NAMED);
594 if (ret_args) { /* copy results back to original stack */
595 EXTEND(sp, ret_args);
596 Copy(orig_sp - ret_args + 1, sp + 1, ret_args, SV*);
600 LEAVE_with_name("call_tied_method");
604 #define tied_method0(a,b,c,d) \
605 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,0)
606 #define tied_method1(a,b,c,d,e) \
607 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,1,e)
608 #define tied_method2(a,b,c,d,e,f) \
609 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,2,e,f)
622 GV * const gv = MUTABLE_GV(*++MARK);
624 if (!isGV(gv) && !(SvTYPE(gv) == SVt_PVLV && isGV_with_GP(gv)))
625 DIE(aTHX_ PL_no_usym, "filehandle");
627 if ((io = GvIOp(gv))) {
629 IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
632 Perl_ck_warner_d(aTHX_ packWARN2(WARN_IO, WARN_DEPRECATED),
633 "Opening dirhandle %"HEKf" also as a file",
634 HEKfARG(GvENAME_HEK(gv)));
636 mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
638 /* Method's args are same as ours ... */
639 /* ... except handle is replaced by the object */
640 return Perl_tied_method(aTHX_ SV_CONST(OPEN), mark - 1, MUTABLE_SV(io), mg,
641 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
653 tmps = SvPV_const(sv, len);
654 ok = do_open6(gv, tmps, len, NULL, MARK+1, (SP-MARK));
657 PUSHi( (I32)PL_forkprocess );
658 else if (PL_forkprocess == 0) /* we are a new child */
669 MAXARG == 0 || (!TOPs && !POPs) ? PL_defoutgv : MUTABLE_GV(POPs);
675 IO * const io = GvIO(gv);
677 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
679 return tied_method0(SV_CONST(CLOSE), SP, MUTABLE_SV(io), mg);
683 PUSHs(boolSV(do_close(gv, TRUE)));
695 GV * const wgv = MUTABLE_GV(POPs);
696 GV * const rgv = MUTABLE_GV(POPs);
700 do_close(rgv, FALSE);
704 do_close(wgv, FALSE);
706 if (PerlProc_pipe(fd) < 0)
709 IoIFP(rstio) = PerlIO_fdopen(fd[0], "r"PIPE_OPEN_MODE);
710 IoOFP(wstio) = PerlIO_fdopen(fd[1], "w"PIPE_OPEN_MODE);
711 IoOFP(rstio) = IoIFP(rstio);
712 IoIFP(wstio) = IoOFP(wstio);
713 IoTYPE(rstio) = IoTYPE_RDONLY;
714 IoTYPE(wstio) = IoTYPE_WRONLY;
716 if (!IoIFP(rstio) || !IoOFP(wstio)) {
718 PerlIO_close(IoIFP(rstio));
720 PerlLIO_close(fd[0]);
722 PerlIO_close(IoOFP(wstio));
724 PerlLIO_close(fd[1]);
727 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
728 /* ensure close-on-exec */
729 if ((fd[0] > PL_maxsysfd && fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) ||
730 (fd[1] > PL_maxsysfd && fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0))
738 DIE(aTHX_ PL_no_func, "pipe");
752 gv = MUTABLE_GV(POPs);
756 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
758 return tied_method0(SV_CONST(FILENO), SP, MUTABLE_SV(io), mg);
761 if (io && IoDIRP(io)) {
762 #if defined(HAS_DIRFD) || defined(HAS_DIR_DD_FD)
763 PUSHi(my_dirfd(IoDIRP(io)));
765 #elif defined(ENOTSUP)
766 errno = ENOTSUP; /* Operation not supported */
768 #elif defined(EOPNOTSUPP)
769 errno = EOPNOTSUPP; /* Operation not supported on socket */
772 errno = EINVAL; /* Invalid argument */
777 if (!io || !(fp = IoIFP(io))) {
778 /* Can't do this because people seem to do things like
779 defined(fileno($foo)) to check whether $foo is a valid fh.
786 PUSHi(PerlIO_fileno(fp));
797 if (MAXARG < 1 || (!TOPs && !POPs)) {
798 anum = PerlLIO_umask(022);
799 /* setting it to 022 between the two calls to umask avoids
800 * to have a window where the umask is set to 0 -- meaning
801 * that another thread could create world-writeable files. */
803 (void)PerlLIO_umask(anum);
806 anum = PerlLIO_umask(POPi);
807 TAINT_PROPER("umask");
810 /* Only DIE if trying to restrict permissions on "user" (self).
811 * Otherwise it's harmless and more useful to just return undef
812 * since 'group' and 'other' concepts probably don't exist here. */
813 if (MAXARG >= 1 && (TOPs||POPs) && (POPi & 0700))
814 DIE(aTHX_ "umask not implemented");
815 XPUSHs(&PL_sv_undef);
834 gv = MUTABLE_GV(POPs);
838 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
840 /* This takes advantage of the implementation of the varargs
841 function, which I don't think that the optimiser will be able to
842 figure out. Although, as it's a static function, in theory it
844 return Perl_tied_method(aTHX_ SV_CONST(BINMODE), SP, MUTABLE_SV(io), mg,
845 G_SCALAR|TIED_METHOD_MORTALIZE_NOT_NEEDED,
846 discp ? 1 : 0, discp);
850 if (!io || !(fp = IoIFP(io))) {
852 SETERRNO(EBADF,RMS_IFI);
859 const char *d = NULL;
862 d = SvPV_const(discp, len);
863 mode = mode_from_discipline(d, len);
864 if (PerlIO_binmode(aTHX_ fp, IoTYPE(io), mode, d)) {
865 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
866 if (!PerlIO_binmode(aTHX_ IoOFP(io), IoTYPE(io), mode, d)) {
887 const I32 markoff = MARK - PL_stack_base;
888 const char *methname;
889 int how = PERL_MAGIC_tied;
893 switch(SvTYPE(varsv)) {
897 methname = "TIEHASH";
898 if (HvLAZYDEL(varsv) && (entry = HvEITER((HV *)varsv))) {
899 HvLAZYDEL_off(varsv);
900 hv_free_ent((HV *)varsv, entry);
902 HvEITER_set(MUTABLE_HV(varsv), 0);
906 methname = "TIEARRAY";
907 if (!AvREAL(varsv)) {
909 Perl_croak(aTHX_ "Cannot tie unreifiable array");
910 av_clear((AV *)varsv);
917 if (isGV_with_GP(varsv) && !SvFAKE(varsv)) {
918 methname = "TIEHANDLE";
919 how = PERL_MAGIC_tiedscalar;
920 /* For tied filehandles, we apply tiedscalar magic to the IO
921 slot of the GP rather than the GV itself. AMS 20010812 */
923 GvIOp(varsv) = newIO();
924 varsv = MUTABLE_SV(GvIOp(varsv));
927 if (SvTYPE(varsv) == SVt_PVLV && LvTYPE(varsv) == 'y') {
928 vivify_defelem(varsv);
929 varsv = LvTARG(varsv);
933 methname = "TIESCALAR";
934 how = PERL_MAGIC_tiedscalar;
938 if (sv_isobject(*MARK)) { /* Calls GET magic. */
939 ENTER_with_name("call_TIE");
940 PUSHSTACKi(PERLSI_MAGIC);
942 EXTEND(SP,(I32)items);
946 call_method(methname, G_SCALAR);
949 /* Can't use call_method here, else this: fileno FOO; tie @a, "FOO"
950 * will attempt to invoke IO::File::TIEARRAY, with (best case) the
951 * wrong error message, and worse case, supreme action at a distance.
952 * (Sorry obfuscation writers. You're not going to be given this one.)
954 stash = gv_stashsv(*MARK, 0);
955 if (!stash || !(gv = gv_fetchmethod(stash, methname))) {
956 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%"SVf"\"",
957 methname, SVfARG(SvOK(*MARK) ? *MARK : &PL_sv_no));
959 ENTER_with_name("call_TIE");
960 PUSHSTACKi(PERLSI_MAGIC);
962 EXTEND(SP,(I32)items);
966 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
972 if (sv_isobject(sv)) {
973 sv_unmagic(varsv, how);
974 /* Croak if a self-tie on an aggregate is attempted. */
975 if (varsv == SvRV(sv) &&
976 (SvTYPE(varsv) == SVt_PVAV ||
977 SvTYPE(varsv) == SVt_PVHV))
979 "Self-ties of arrays and hashes are not supported");
980 sv_magic(varsv, (SvRV(sv) == varsv ? NULL : sv), how, NULL, 0);
982 LEAVE_with_name("call_TIE");
983 SP = PL_stack_base + markoff;
989 /* also used for: pp_dbmclose() */
996 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
997 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
999 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1002 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1003 !(sv = defelem_target(sv, NULL))) RETPUSHUNDEF;
1005 if ((mg = SvTIED_mg(sv, how))) {
1006 SV * const obj = SvRV(SvTIED_obj(sv, mg));
1008 GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE);
1010 if (gv && isGV(gv) && (cv = GvCV(gv))) {
1012 PUSHs(SvTIED_obj(MUTABLE_SV(gv), mg));
1013 mXPUSHi(SvREFCNT(obj) - 1);
1015 ENTER_with_name("call_UNTIE");
1016 call_sv(MUTABLE_SV(cv), G_VOID);
1017 LEAVE_with_name("call_UNTIE");
1020 else if (mg && SvREFCNT(obj) > 1) {
1021 Perl_ck_warner(aTHX_ packWARN(WARN_UNTIE),
1022 "untie attempted while %"UVuf" inner references still exist",
1023 (UV)SvREFCNT(obj) - 1 ) ;
1027 sv_unmagic(sv, how) ;
1036 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
1037 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
1039 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1042 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1043 !(sv = defelem_target(sv, NULL))) goto ret_undef;
1045 if ((mg = SvTIED_mg(sv, how))) {
1046 SETs(SvTIED_obj(sv, mg));
1047 return NORMAL; /* PUTBACK not needed, pp_tied never moves SP */
1061 HV * const hv = MUTABLE_HV(POPs);
1062 SV * const sv = newSVpvs_flags("AnyDBM_File", SVs_TEMP);
1063 stash = gv_stashsv(sv, 0);
1064 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
1066 require_pv("AnyDBM_File.pm");
1068 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH")))
1069 DIE(aTHX_ "No dbm on this machine");
1079 mPUSHu(O_RDWR|O_CREAT);
1083 if (!SvOK(right)) right = &PL_sv_no;
1087 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1090 if (!sv_isobject(TOPs)) {
1098 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1100 if (sv_isobject(TOPs))
1105 sv_unmagic(MUTABLE_SV(hv), PERL_MAGIC_tied);
1106 sv_magic(MUTABLE_SV(hv), TOPs, PERL_MAGIC_tied, NULL, 0);
1123 struct timeval timebuf;
1124 struct timeval *tbuf = &timebuf;
1127 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1132 # if BYTEORDER & 0xf0000
1133 # define ORDERBYTE (0x88888888 - BYTEORDER)
1135 # define ORDERBYTE (0x4444 - BYTEORDER)
1141 for (i = 1; i <= 3; i++) {
1142 SV * const sv = SP[i];
1146 if (SvREADONLY(sv)) {
1147 if (!(SvPOK(sv) && SvCUR(sv) == 0))
1148 Perl_croak_no_modify();
1150 else if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
1153 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
1154 "Non-string passed as bitmask");
1155 SvPV_force_nomg_nolen(sv); /* force string conversion */
1162 /* little endians can use vecs directly */
1163 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1170 masksize = NFDBITS / NBBY;
1172 masksize = sizeof(long); /* documented int, everyone seems to use long */
1174 Zero(&fd_sets[0], 4, char*);
1177 # if SELECT_MIN_BITS == 1
1178 growsize = sizeof(fd_set);
1180 # if defined(__GLIBC__) && defined(__FD_SETSIZE)
1181 # undef SELECT_MIN_BITS
1182 # define SELECT_MIN_BITS __FD_SETSIZE
1184 /* If SELECT_MIN_BITS is greater than one we most probably will want
1185 * to align the sizes with SELECT_MIN_BITS/8 because for example
1186 * in many little-endian (Intel, Alpha) systems (Linux, OS/2, Digital
1187 * UNIX, Solaris, Darwin) the smallest quantum select() operates
1188 * on (sets/tests/clears bits) is 32 bits. */
1189 growsize = maxlen + (SELECT_MIN_BITS/8 - (maxlen % (SELECT_MIN_BITS/8)));
1195 value = SvNV_nomg(sv);
1198 timebuf.tv_sec = (long)value;
1199 value -= (NV)timebuf.tv_sec;
1200 timebuf.tv_usec = (long)(value * 1000000.0);
1205 for (i = 1; i <= 3; i++) {
1207 if (!SvOK(sv) || SvCUR(sv) == 0) {
1214 Sv_Grow(sv, growsize);
1218 while (++j <= growsize) {
1222 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1224 Newx(fd_sets[i], growsize, char);
1225 for (offset = 0; offset < growsize; offset += masksize) {
1226 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1227 fd_sets[i][j+offset] = s[(k % masksize) + offset];
1230 fd_sets[i] = SvPVX(sv);
1234 #ifdef PERL_IRIX5_SELECT_TIMEVAL_VOID_CAST
1235 /* Can't make just the (void*) conditional because that would be
1236 * cpp #if within cpp macro, and not all compilers like that. */
1237 nfound = PerlSock_select(
1239 (Select_fd_set_t) fd_sets[1],
1240 (Select_fd_set_t) fd_sets[2],
1241 (Select_fd_set_t) fd_sets[3],
1242 (void*) tbuf); /* Workaround for compiler bug. */
1244 nfound = PerlSock_select(
1246 (Select_fd_set_t) fd_sets[1],
1247 (Select_fd_set_t) fd_sets[2],
1248 (Select_fd_set_t) fd_sets[3],
1251 for (i = 1; i <= 3; i++) {
1254 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1256 for (offset = 0; offset < growsize; offset += masksize) {
1257 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1258 s[(k % masksize) + offset] = fd_sets[i][j+offset];
1260 Safefree(fd_sets[i]);
1267 if (GIMME_V == G_ARRAY && tbuf) {
1268 value = (NV)(timebuf.tv_sec) +
1269 (NV)(timebuf.tv_usec) / 1000000.0;
1274 DIE(aTHX_ "select not implemented");
1282 =for apidoc setdefout
1284 Sets C<PL_defoutgv>, the default file handle for output, to the passed in
1285 typeglob. As C<PL_defoutgv> "owns" a reference on its typeglob, the reference
1286 count of the passed in typeglob is increased by one, and the reference count
1287 of the typeglob that C<PL_defoutgv> points to is decreased by one.
1293 Perl_setdefout(pTHX_ GV *gv)
1295 PERL_ARGS_ASSERT_SETDEFOUT;
1296 SvREFCNT_inc_simple_void_NN(gv);
1297 SvREFCNT_dec(PL_defoutgv);
1305 GV * const newdefout = (PL_op->op_private > 0) ? (MUTABLE_GV(POPs)) : NULL;
1306 GV * egv = GvEGVx(PL_defoutgv);
1311 hv = isGV_with_GP(egv) ? GvSTASH(egv) : NULL;
1312 gvp = hv && HvENAME(hv)
1313 ? (GV**)hv_fetch(hv, GvNAME(egv), HEK_UTF8(GvNAME_HEK(egv)) ? -GvNAMELEN(egv) : GvNAMELEN(egv), FALSE)
1315 if (gvp && *gvp == egv) {
1316 gv_efullname4(TARG, PL_defoutgv, NULL, TRUE);
1320 mXPUSHs(newRV(MUTABLE_SV(egv)));
1324 if (!GvIO(newdefout))
1325 gv_IOadd(newdefout);
1326 setdefout(newdefout);
1336 MAXARG==0 || (!TOPs && !POPs) ? PL_stdingv : MUTABLE_GV(POPs);
1337 IO *const io = GvIO(gv);
1343 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1345 const U32 gimme = GIMME_V;
1346 Perl_tied_method(aTHX_ SV_CONST(GETC), SP, MUTABLE_SV(io), mg, gimme, 0);
1347 if (gimme == G_SCALAR) {
1349 SvSetMagicSV_nosteal(TARG, TOPs);
1354 if (!gv || do_eof(gv)) { /* make sure we have fp with something */
1355 if (!io || (!IoIFP(io) && IoTYPE(io) != IoTYPE_WRONLY))
1357 SETERRNO(EBADF,RMS_IFI);
1361 sv_setpvs(TARG, " ");
1362 *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
1363 if (PerlIO_isutf8(IoIFP(GvIOp(gv)))) {
1364 /* Find out how many bytes the char needs */
1365 Size_t len = UTF8SKIP(SvPVX_const(TARG));
1368 len = PerlIO_read(IoIFP(GvIOp(gv)),SvPVX(TARG)+1,len-1);
1369 SvCUR_set(TARG,1+len);
1373 else SvUTF8_off(TARG);
1379 S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
1382 const I32 gimme = GIMME_V;
1384 PERL_ARGS_ASSERT_DOFORM;
1387 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
1389 PUSHBLOCK(cx, CXt_FORMAT, PL_stack_sp);
1390 PUSHFORMAT(cx, retop);
1391 if (CvDEPTH(cv) >= 2) {
1392 PERL_STACK_OVERFLOW_CHECK();
1393 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1395 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1397 setdefout(gv); /* locally select filehandle so $% et al work */
1415 gv = MUTABLE_GV(POPs);
1432 tmpsv = sv_newmortal();
1433 gv_efullname4(tmpsv, fgv, NULL, FALSE);
1434 DIE(aTHX_ "Undefined format \"%"SVf"\" called", SVfARG(tmpsv));
1436 IoFLAGS(io) &= ~IOf_DIDTOP;
1437 RETURNOP(doform(cv,gv,PL_op->op_next));
1443 GV * const gv = cxstack[cxstack_ix].blk_format.gv;
1444 IO * const io = GvIOp(gv);
1449 bool is_return = cBOOL(PL_op->op_type == OP_RETURN);
1451 if (is_return || !io || !(ofp = IoOFP(io)))
1454 DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
1455 (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
1457 if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
1458 PL_formtarget != PL_toptarget)
1462 if (!IoTOP_GV(io)) {
1465 if (!IoTOP_NAME(io)) {
1467 if (!IoFMT_NAME(io))
1468 IoFMT_NAME(io) = savepv(GvNAME(gv));
1469 topname = sv_2mortal(Perl_newSVpvf(aTHX_ "%"HEKf"_TOP",
1470 HEKfARG(GvNAME_HEK(gv))));
1471 topgv = gv_fetchsv(topname, 0, SVt_PVFM);
1472 if ((topgv && GvFORM(topgv)) ||
1473 !gv_fetchpvs("top", GV_NOTQUAL, SVt_PVFM))
1474 IoTOP_NAME(io) = savesvpv(topname);
1476 IoTOP_NAME(io) = savepvs("top");
1478 topgv = gv_fetchpv(IoTOP_NAME(io), 0, SVt_PVFM);
1479 if (!topgv || !GvFORM(topgv)) {
1480 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1483 IoTOP_GV(io) = topgv;
1485 if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear. It still doesn't fit. */
1486 I32 lines = IoLINES_LEFT(io);
1487 const char *s = SvPVX_const(PL_formtarget);
1488 if (lines <= 0) /* Yow, header didn't even fit!!! */
1490 while (lines-- > 0) {
1491 s = strchr(s, '\n');
1497 const STRLEN save = SvCUR(PL_formtarget);
1498 SvCUR_set(PL_formtarget, s - SvPVX_const(PL_formtarget));
1499 do_print(PL_formtarget, ofp);
1500 SvCUR_set(PL_formtarget, save);
1501 sv_chop(PL_formtarget, s);
1502 FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
1505 if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
1506 do_print(GvSV(gv_fetchpvs("\f", GV_ADD, SVt_PV)), ofp);
1507 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1509 PL_formtarget = PL_toptarget;
1510 IoFLAGS(io) |= IOf_DIDTOP;
1512 assert(fgv); /* IoTOP_GV(io) should have been set above */
1515 SV * const sv = sv_newmortal();
1516 gv_efullname4(sv, fgv, NULL, FALSE);
1517 DIE(aTHX_ "Undefined top format \"%"SVf"\" called", SVfARG(sv));
1519 return doform(cv, gv, PL_op);
1523 cx = &cxstack[cxstack_ix];
1524 assert(CxTYPE(cx) == CXt_FORMAT);
1525 SP = PL_stack_base + cx->blk_oldsp; /* ignore retval of formline */
1528 retop = cx->blk_sub.retop;
1532 /* XXX the semantics of doing 'return' in a format aren't documented.
1533 * Currently we ignore any args to 'return' and just return
1534 * a single undef in both scalar and list contexts
1536 PUSHs(&PL_sv_undef);
1537 else if (!io || !(fp = IoOFP(io))) {
1538 if (io && IoIFP(io))
1539 report_wrongway_fh(gv, '<');
1545 if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
1546 Perl_ck_warner(aTHX_ packWARN(WARN_IO), "page overflow");
1548 if (!do_print(PL_formtarget, fp))
1551 FmLINES(PL_formtarget) = 0;
1552 SvCUR_set(PL_formtarget, 0);
1553 *SvEND(PL_formtarget) = '\0';
1554 if (IoFLAGS(io) & IOf_FLUSH)
1555 (void)PerlIO_flush(fp);
1559 PL_formtarget = PL_bodytarget;
1565 dSP; dMARK; dORIGMARK;
1569 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
1570 IO *const io = GvIO(gv);
1572 /* Treat empty list as "" */
1573 if (MARK == SP) XPUSHs(&PL_sv_no);
1576 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1578 if (MARK == ORIGMARK) {
1581 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
1584 return Perl_tied_method(aTHX_ SV_CONST(PRINTF), mark - 1, MUTABLE_SV(io),
1586 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1593 SETERRNO(EBADF,RMS_IFI);
1596 else if (!(fp = IoOFP(io))) {
1598 report_wrongway_fh(gv, '<');
1599 else if (ckWARN(WARN_CLOSED))
1601 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
1605 SV *sv = sv_newmortal();
1606 do_sprintf(sv, SP - MARK, MARK + 1);
1607 if (!do_print(sv, fp))
1610 if (IoFLAGS(io) & IOf_FLUSH)
1611 if (PerlIO_flush(fp) == EOF)
1620 PUSHs(&PL_sv_undef);
1627 const int perm = (MAXARG > 3 && (TOPs || POPs)) ? POPi : 0666;
1628 const int mode = POPi;
1629 SV * const sv = POPs;
1630 GV * const gv = MUTABLE_GV(POPs);
1633 /* Need TIEHANDLE method ? */
1634 const char * const tmps = SvPV_const(sv, len);
1635 if (do_open_raw(gv, tmps, len, mode, perm)) {
1636 IoLINES(GvIOp(gv)) = 0;
1640 PUSHs(&PL_sv_undef);
1646 /* also used for: pp_read() and pp_recv() (where supported) */
1650 dSP; dMARK; dORIGMARK; dTARGET;
1664 bool charstart = FALSE;
1665 STRLEN charskip = 0;
1667 GV * const gv = MUTABLE_GV(*++MARK);
1670 if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD)
1671 && gv && (io = GvIO(gv)) )
1673 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1675 return Perl_tied_method(aTHX_ SV_CONST(READ), mark - 1, MUTABLE_SV(io), mg,
1676 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1685 sv_setpvs(bufsv, "");
1686 length = SvIVx(*++MARK);
1688 DIE(aTHX_ "Negative length");
1691 offset = SvIVx(*++MARK);
1695 if (!io || !IoIFP(io)) {
1697 SETERRNO(EBADF,RMS_IFI);
1701 /* Note that fd can here validly be -1, don't check it yet. */
1702 fd = PerlIO_fileno(IoIFP(io));
1704 if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
1705 if (PL_op->op_type == OP_SYSREAD || PL_op->op_type == OP_RECV) {
1706 Perl_ck_warner(aTHX_ packWARN(WARN_DEPRECATED),
1707 "%s() is deprecated on :utf8 handles",
1710 buffer = SvPVutf8_force(bufsv, blen);
1711 /* UTF-8 may not have been set if they are all low bytes */
1716 buffer = SvPV_force(bufsv, blen);
1717 buffer_utf8 = !IN_BYTES && SvUTF8(bufsv);
1719 if (DO_UTF8(bufsv)) {
1720 blen = sv_len_utf8_nomg(bufsv);
1729 if (PL_op->op_type == OP_RECV) {
1730 Sock_size_t bufsize;
1731 char namebuf[MAXPATHLEN];
1733 SETERRNO(EBADF,SS_IVCHAN);
1736 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
1737 bufsize = sizeof (struct sockaddr_in);
1739 bufsize = sizeof namebuf;
1741 #ifdef OS2 /* At least Warp3+IAK: only the first byte of bufsize set */
1745 buffer = SvGROW(bufsv, (STRLEN)(length+1));
1746 /* 'offset' means 'flags' here */
1747 count = PerlSock_recvfrom(fd, buffer, length, offset,
1748 (struct sockaddr *)namebuf, &bufsize);
1751 /* MSG_TRUNC can give oversized count; quietly lose it */
1754 SvCUR_set(bufsv, count);
1755 *SvEND(bufsv) = '\0';
1756 (void)SvPOK_only(bufsv);
1760 /* This should not be marked tainted if the fp is marked clean */
1761 if (!(IoFLAGS(io) & IOf_UNTAINT))
1762 SvTAINTED_on(bufsv);
1764 #if defined(__CYGWIN__)
1765 /* recvfrom() on cygwin doesn't set bufsize at all for
1766 connected sockets, leaving us with trash in the returned
1767 name, so use the same test as the Win32 code to check if it
1768 wasn't set, and set it [perl #118843] */
1769 if (bufsize == sizeof namebuf)
1772 sv_setpvn(TARG, namebuf, bufsize);
1778 if (-offset > (SSize_t)blen)
1779 DIE(aTHX_ "Offset outside string");
1782 if (DO_UTF8(bufsv)) {
1783 /* convert offset-as-chars to offset-as-bytes */
1784 if (offset >= (SSize_t)blen)
1785 offset += SvCUR(bufsv) - blen;
1787 offset = utf8_hop((U8 *)buffer,offset) - (U8 *) buffer;
1791 /* Reestablish the fd in case it shifted from underneath us. */
1792 fd = PerlIO_fileno(IoIFP(io));
1794 orig_size = SvCUR(bufsv);
1795 /* Allocating length + offset + 1 isn't perfect in the case of reading
1796 bytes from a byte file handle into a UTF8 buffer, but it won't harm us
1798 (should be 2 * length + offset + 1, or possibly something longer if
1799 IN_ENCODING Is true) */
1800 buffer = SvGROW(bufsv, (STRLEN)(length+offset+1));
1801 if (offset > 0 && offset > (SSize_t)orig_size) { /* Zero any newly allocated space */
1802 Zero(buffer+orig_size, offset-orig_size, char);
1804 buffer = buffer + offset;
1806 read_target = bufsv;
1808 /* Best to read the bytes into a new SV, upgrade that to UTF8, then
1809 concatenate it to the current buffer. */
1811 /* Truncate the existing buffer to the start of where we will be
1813 SvCUR_set(bufsv, offset);
1815 read_target = sv_newmortal();
1816 SvUPGRADE(read_target, SVt_PV);
1817 buffer = SvGROW(read_target, (STRLEN)(length + 1));
1820 if (PL_op->op_type == OP_SYSREAD) {
1821 #ifdef PERL_SOCK_SYSREAD_IS_RECV
1822 if (IoTYPE(io) == IoTYPE_SOCKET) {
1824 SETERRNO(EBADF,SS_IVCHAN);
1828 count = PerlSock_recv(fd, buffer, length, 0);
1834 SETERRNO(EBADF,RMS_IFI);
1838 count = PerlLIO_read(fd, buffer, length);
1843 count = PerlIO_read(IoIFP(io), buffer, length);
1844 /* PerlIO_read() - like fread() returns 0 on both error and EOF */
1845 if (count == 0 && PerlIO_error(IoIFP(io)))
1849 if (IoTYPE(io) == IoTYPE_WRONLY)
1850 report_wrongway_fh(gv, '>');
1853 SvCUR_set(read_target, count+(buffer - SvPVX_const(read_target)));
1854 *SvEND(read_target) = '\0';
1855 (void)SvPOK_only(read_target);
1856 if (fp_utf8 && !IN_BYTES) {
1857 /* Look at utf8 we got back and count the characters */
1858 const char *bend = buffer + count;
1859 while (buffer < bend) {
1861 skip = UTF8SKIP(buffer);
1864 if (buffer - charskip + skip > bend) {
1865 /* partial character - try for rest of it */
1866 length = skip - (bend-buffer);
1867 offset = bend - SvPVX_const(bufsv);
1879 /* If we have not 'got' the number of _characters_ we 'wanted' get some more
1880 provided amount read (count) was what was requested (length)
1882 if (got < wanted && count == length) {
1883 length = wanted - got;
1884 offset = bend - SvPVX_const(bufsv);
1887 /* return value is character count */
1891 else if (buffer_utf8) {
1892 /* Let svcatsv upgrade the bytes we read in to utf8.
1893 The buffer is a mortal so will be freed soon. */
1894 sv_catsv_nomg(bufsv, read_target);
1897 /* This should not be marked tainted if the fp is marked clean */
1898 if (!(IoFLAGS(io) & IOf_UNTAINT))
1899 SvTAINTED_on(bufsv);
1910 /* also used for: pp_send() where defined */
1914 dSP; dMARK; dORIGMARK; dTARGET;
1919 STRLEN orig_blen_bytes;
1920 const int op_type = PL_op->op_type;
1923 GV *const gv = MUTABLE_GV(*++MARK);
1924 IO *const io = GvIO(gv);
1927 if (op_type == OP_SYSWRITE && io) {
1928 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1930 if (MARK == SP - 1) {
1932 mXPUSHi(sv_len(sv));
1936 return Perl_tied_method(aTHX_ SV_CONST(WRITE), mark - 1, MUTABLE_SV(io), mg,
1937 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1947 if (!io || !IoIFP(io) || IoTYPE(io) == IoTYPE_RDONLY) {
1949 if (io && IoIFP(io))
1950 report_wrongway_fh(gv, '<');
1953 SETERRNO(EBADF,RMS_IFI);
1956 fd = PerlIO_fileno(IoIFP(io));
1958 SETERRNO(EBADF,SS_IVCHAN);
1963 /* Do this first to trigger any overloading. */
1964 buffer = SvPV_const(bufsv, blen);
1965 orig_blen_bytes = blen;
1966 doing_utf8 = DO_UTF8(bufsv);
1968 if (PerlIO_isutf8(IoIFP(io))) {
1969 Perl_ck_warner(aTHX_ packWARN(WARN_DEPRECATED),
1970 "%s() is deprecated on :utf8 handles",
1972 if (!SvUTF8(bufsv)) {
1973 /* We don't modify the original scalar. */
1974 tmpbuf = bytes_to_utf8((const U8*) buffer, &blen);
1975 buffer = (char *) tmpbuf;
1979 else if (doing_utf8) {
1980 STRLEN tmplen = blen;
1981 U8 * const result = bytes_from_utf8((const U8*) buffer, &tmplen, &doing_utf8);
1984 buffer = (char *) tmpbuf;
1988 assert((char *)result == buffer);
1989 Perl_croak(aTHX_ "Wide character in %s", OP_DESC(PL_op));
1994 if (op_type == OP_SEND) {
1995 const int flags = SvIVx(*++MARK);
1998 char * const sockbuf = SvPVx(*++MARK, mlen);
1999 retval = PerlSock_sendto(fd, buffer, blen,
2000 flags, (struct sockaddr *)sockbuf, mlen);
2003 retval = PerlSock_send(fd, buffer, blen, flags);
2009 Size_t length = 0; /* This length is in characters. */
2015 /* The SV is bytes, and we've had to upgrade it. */
2016 blen_chars = orig_blen_bytes;
2018 /* The SV really is UTF-8. */
2019 /* Don't call sv_len_utf8 on a magical or overloaded
2020 scalar, as we might get back a different result. */
2021 blen_chars = sv_or_pv_len_utf8(bufsv, buffer, blen);
2028 length = blen_chars;
2030 #if Size_t_size > IVSIZE
2031 length = (Size_t)SvNVx(*++MARK);
2033 length = (Size_t)SvIVx(*++MARK);
2035 if ((SSize_t)length < 0) {
2037 DIE(aTHX_ "Negative length");
2042 offset = SvIVx(*++MARK);
2044 if (-offset > (IV)blen_chars) {
2046 DIE(aTHX_ "Offset outside string");
2048 offset += blen_chars;
2049 } else if (offset > (IV)blen_chars) {
2051 DIE(aTHX_ "Offset outside string");
2055 if (length > blen_chars - offset)
2056 length = blen_chars - offset;
2058 /* Here we convert length from characters to bytes. */
2059 if (tmpbuf || SvGMAGICAL(bufsv) || SvAMAGIC(bufsv)) {
2060 /* Either we had to convert the SV, or the SV is magical, or
2061 the SV has overloading, in which case we can't or mustn't
2062 or mustn't call it again. */
2064 buffer = (const char*)utf8_hop((const U8 *)buffer, offset);
2065 length = utf8_hop((U8 *)buffer, length) - (U8 *)buffer;
2067 /* It's a real UTF-8 SV, and it's not going to change under
2068 us. Take advantage of any cache. */
2070 I32 len_I32 = length;
2072 /* Convert the start and end character positions to bytes.
2073 Remember that the second argument to sv_pos_u2b is relative
2075 sv_pos_u2b(bufsv, &start, &len_I32);
2082 buffer = buffer+offset;
2084 #ifdef PERL_SOCK_SYSWRITE_IS_SEND
2085 if (IoTYPE(io) == IoTYPE_SOCKET) {
2086 retval = PerlSock_send(fd, buffer, length, 0);
2091 /* See the note at doio.c:do_print about filesize limits. --jhi */
2092 retval = PerlLIO_write(fd, buffer, length);
2100 retval = utf8_length((U8*)buffer, (U8*)buffer + retval);
2103 #if Size_t_size > IVSIZE
2123 * in Perl 5.12 and later, the additional parameter is a bitmask:
2126 * 2 = eof() <- ARGV magic
2128 * I'll rely on the compiler's trace flow analysis to decide whether to
2129 * actually assign this out here, or punt it into the only block where it is
2130 * used. Doing it out here is DRY on the condition logic.
2135 gv = PL_last_in_gv = MUTABLE_GV(POPs); /* eof(FH) */
2141 if (PL_op->op_flags & OPf_SPECIAL) {
2142 gv = PL_last_in_gv = GvEGVx(PL_argvgv); /* eof() - ARGV magic */
2146 gv = PL_last_in_gv; /* eof */
2154 if ((io = GvIO(gv)) && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) {
2155 return tied_method1(SV_CONST(EOF), SP, MUTABLE_SV(io), mg, newSVuv(which));
2158 if (!MAXARG && (PL_op->op_flags & OPf_SPECIAL)) { /* eof() */
2159 if (io && !IoIFP(io)) {
2160 if ((IoFLAGS(io) & IOf_START) && av_tindex(GvAVn(gv)) < 0) {
2163 IoFLAGS(io) &= ~IOf_START;
2164 do_open6(gv, "-", 1, NULL, NULL, 0);
2172 *svp = newSVpvs("-");
2174 else if (!nextargv(gv, FALSE))
2179 PUSHs(boolSV(do_eof(gv)));
2189 if (MAXARG != 0 && (TOPs || POPs))
2190 PL_last_in_gv = MUTABLE_GV(POPs);
2197 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2199 return tied_method0(SV_CONST(TELL), SP, MUTABLE_SV(io), mg);
2204 SETERRNO(EBADF,RMS_IFI);
2209 #if LSEEKSIZE > IVSIZE
2210 PUSHn( do_tell(gv) );
2212 PUSHi( do_tell(gv) );
2218 /* also used for: pp_seek() */
2223 const int whence = POPi;
2224 #if LSEEKSIZE > IVSIZE
2225 const Off_t offset = (Off_t)SvNVx(POPs);
2227 const Off_t offset = (Off_t)SvIVx(POPs);
2230 GV * const gv = PL_last_in_gv = MUTABLE_GV(POPs);
2231 IO *const io = GvIO(gv);
2234 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2236 #if LSEEKSIZE > IVSIZE
2237 SV *const offset_sv = newSVnv((NV) offset);
2239 SV *const offset_sv = newSViv(offset);
2242 return tied_method2(SV_CONST(SEEK), SP, MUTABLE_SV(io), mg, offset_sv,
2247 if (PL_op->op_type == OP_SEEK)
2248 PUSHs(boolSV(do_seek(gv, offset, whence)));
2250 const Off_t sought = do_sysseek(gv, offset, whence);
2252 PUSHs(&PL_sv_undef);
2254 SV* const sv = sought ?
2255 #if LSEEKSIZE > IVSIZE
2260 : newSVpvn(zero_but_true, ZBTLEN);
2270 /* There seems to be no consensus on the length type of truncate()
2271 * and ftruncate(), both off_t and size_t have supporters. In
2272 * general one would think that when using large files, off_t is
2273 * at least as wide as size_t, so using an off_t should be okay. */
2274 /* XXX Configure probe for the length type of *truncate() needed XXX */
2277 #if Off_t_size > IVSIZE
2282 /* Checking for length < 0 is problematic as the type might or
2283 * might not be signed: if it is not, clever compilers will moan. */
2284 /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
2287 SV * const sv = POPs;
2292 if (PL_op->op_flags & OPf_SPECIAL
2293 ? (tmpgv = gv_fetchsv(sv, 0, SVt_PVIO), 1)
2294 : !!(tmpgv = MAYBE_DEREF_GV(sv)) ) {
2301 TAINT_PROPER("truncate");
2302 if (!(fp = IoIFP(io))) {
2306 int fd = PerlIO_fileno(fp);
2308 SETERRNO(EBADF,RMS_IFI);
2312 SETERRNO(EINVAL, LIB_INVARG);
2317 if (ftruncate(fd, len) < 0)
2319 if (my_chsize(fd, len) < 0)
2327 else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2328 io = MUTABLE_IO(SvRV(sv)); /* *main::FRED{IO} for example */
2329 goto do_ftruncate_io;
2332 const char * const name = SvPV_nomg_const_nolen(sv);
2333 TAINT_PROPER("truncate");
2335 if (truncate(name, len) < 0)
2342 #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
2343 mode |= O_LARGEFILE; /* Transparently largefiley. */
2346 /* On open(), the Win32 CRT tries to seek around text
2347 * files using 32-bit offsets, which causes the open()
2348 * to fail on large files, so open in binary mode.
2352 tmpfd = PerlLIO_open(name, mode);
2357 if (my_chsize(tmpfd, len) < 0)
2359 PerlLIO_close(tmpfd);
2368 SETERRNO(EBADF,RMS_IFI);
2374 /* also used for: pp_fcntl() */
2379 SV * const argsv = POPs;
2380 const unsigned int func = POPu;
2382 GV * const gv = MUTABLE_GV(POPs);
2383 IO * const io = GvIOn(gv);
2389 SETERRNO(EBADF,RMS_IFI); /* well, sort of... */
2393 if (SvPOK(argsv) || !SvNIOK(argsv)) {
2396 s = SvPV_force(argsv, len);
2397 need = IOCPARM_LEN(func);
2399 s = Sv_Grow(argsv, need + 1);
2400 SvCUR_set(argsv, need);
2403 s[SvCUR(argsv)] = 17; /* a little sanity check here */
2406 retval = SvIV(argsv);
2407 s = INT2PTR(char*,retval); /* ouch */
2410 optype = PL_op->op_type;
2411 TAINT_PROPER(PL_op_desc[optype]);
2413 if (optype == OP_IOCTL)
2415 retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
2417 DIE(aTHX_ "ioctl is not implemented");
2421 DIE(aTHX_ "fcntl is not implemented");
2423 #if defined(OS2) && defined(__EMX__)
2424 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
2426 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, s);
2430 #if defined(HAS_IOCTL) || defined(HAS_FCNTL)
2432 if (s[SvCUR(argsv)] != 17)
2433 DIE(aTHX_ "Possible memory corruption: %s overflowed 3rd argument",
2435 s[SvCUR(argsv)] = 0; /* put our null back */
2436 SvSETMAGIC(argsv); /* Assume it has changed */
2445 PUSHp(zero_but_true, ZBTLEN);
2456 const int argtype = POPi;
2457 GV * const gv = MUTABLE_GV(POPs);
2458 IO *const io = GvIO(gv);
2459 PerlIO *const fp = io ? IoIFP(io) : NULL;
2461 /* XXX Looks to me like io is always NULL at this point */
2463 (void)PerlIO_flush(fp);
2464 value = (I32)(PerlLIO_flock(PerlIO_fileno(fp), argtype) >= 0);
2469 SETERRNO(EBADF,RMS_IFI);
2474 DIE(aTHX_ PL_no_func, "flock");
2485 const int protocol = POPi;
2486 const int type = POPi;
2487 const int domain = POPi;
2488 GV * const gv = MUTABLE_GV(POPs);
2489 IO * const io = GvIOn(gv);
2493 do_close(gv, FALSE);
2495 TAINT_PROPER("socket");
2496 fd = PerlSock_socket(domain, type, protocol);
2498 SETERRNO(EBADF,RMS_IFI);
2501 IoIFP(io) = PerlIO_fdopen(fd, "r"SOCKET_OPEN_MODE); /* stdio gets confused about sockets */
2502 IoOFP(io) = PerlIO_fdopen(fd, "w"SOCKET_OPEN_MODE);
2503 IoTYPE(io) = IoTYPE_SOCKET;
2504 if (!IoIFP(io) || !IoOFP(io)) {
2505 if (IoIFP(io)) PerlIO_close(IoIFP(io));
2506 if (IoOFP(io)) PerlIO_close(IoOFP(io));
2507 if (!IoIFP(io) && !IoOFP(io)) PerlLIO_close(fd);
2510 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2511 /* ensure close-on-exec */
2512 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2522 #if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
2525 const int protocol = POPi;
2526 const int type = POPi;
2527 const int domain = POPi;
2529 GV * const gv2 = MUTABLE_GV(POPs);
2530 IO * const io2 = GvIOn(gv2);
2531 GV * const gv1 = MUTABLE_GV(POPs);
2532 IO * const io1 = GvIOn(gv1);
2535 do_close(gv1, FALSE);
2537 do_close(gv2, FALSE);
2539 TAINT_PROPER("socketpair");
2540 if (PerlSock_socketpair(domain, type, protocol, fd) < 0)
2542 IoIFP(io1) = PerlIO_fdopen(fd[0], "r"SOCKET_OPEN_MODE);
2543 IoOFP(io1) = PerlIO_fdopen(fd[0], "w"SOCKET_OPEN_MODE);
2544 IoTYPE(io1) = IoTYPE_SOCKET;
2545 IoIFP(io2) = PerlIO_fdopen(fd[1], "r"SOCKET_OPEN_MODE);
2546 IoOFP(io2) = PerlIO_fdopen(fd[1], "w"SOCKET_OPEN_MODE);
2547 IoTYPE(io2) = IoTYPE_SOCKET;
2548 if (!IoIFP(io1) || !IoOFP(io1) || !IoIFP(io2) || !IoOFP(io2)) {
2549 if (IoIFP(io1)) PerlIO_close(IoIFP(io1));
2550 if (IoOFP(io1)) PerlIO_close(IoOFP(io1));
2551 if (!IoIFP(io1) && !IoOFP(io1)) PerlLIO_close(fd[0]);
2552 if (IoIFP(io2)) PerlIO_close(IoIFP(io2));
2553 if (IoOFP(io2)) PerlIO_close(IoOFP(io2));
2554 if (!IoIFP(io2) && !IoOFP(io2)) PerlLIO_close(fd[1]);
2557 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2558 /* ensure close-on-exec */
2559 if ((fd[0] > PL_maxsysfd && fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) ||
2560 (fd[1] > PL_maxsysfd && fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0))
2566 DIE(aTHX_ PL_no_sock_func, "socketpair");
2572 /* also used for: pp_connect() */
2577 SV * const addrsv = POPs;
2578 /* OK, so on what platform does bind modify addr? */
2580 GV * const gv = MUTABLE_GV(POPs);
2581 IO * const io = GvIOn(gv);
2588 fd = PerlIO_fileno(IoIFP(io));
2592 addr = SvPV_const(addrsv, len);
2593 op_type = PL_op->op_type;
2594 TAINT_PROPER(PL_op_desc[op_type]);
2595 if ((op_type == OP_BIND
2596 ? PerlSock_bind(fd, (struct sockaddr *)addr, len)
2597 : PerlSock_connect(fd, (struct sockaddr *)addr, len))
2605 SETERRNO(EBADF,SS_IVCHAN);
2612 const int backlog = POPi;
2613 GV * const gv = MUTABLE_GV(POPs);
2614 IO * const io = GvIOn(gv);
2619 if (PerlSock_listen(PerlIO_fileno(IoIFP(io)), backlog) >= 0)
2626 SETERRNO(EBADF,SS_IVCHAN);
2634 char namebuf[MAXPATHLEN];
2635 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
2636 Sock_size_t len = sizeof (struct sockaddr_in);
2638 Sock_size_t len = sizeof namebuf;
2640 GV * const ggv = MUTABLE_GV(POPs);
2641 GV * const ngv = MUTABLE_GV(POPs);
2644 IO * const gstio = GvIO(ggv);
2645 if (!gstio || !IoIFP(gstio))
2649 fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *) namebuf, &len);
2652 /* Some platforms indicate zero length when an AF_UNIX client is
2653 * not bound. Simulate a non-zero-length sockaddr structure in
2655 namebuf[0] = 0; /* sun_len */
2656 namebuf[1] = AF_UNIX; /* sun_family */
2664 do_close(ngv, FALSE);
2665 IoIFP(nstio) = PerlIO_fdopen(fd, "r"SOCKET_OPEN_MODE);
2666 IoOFP(nstio) = PerlIO_fdopen(fd, "w"SOCKET_OPEN_MODE);
2667 IoTYPE(nstio) = IoTYPE_SOCKET;
2668 if (!IoIFP(nstio) || !IoOFP(nstio)) {
2669 if (IoIFP(nstio)) PerlIO_close(IoIFP(nstio));
2670 if (IoOFP(nstio)) PerlIO_close(IoOFP(nstio));
2671 if (!IoIFP(nstio) && !IoOFP(nstio)) PerlLIO_close(fd);
2674 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2675 /* ensure close-on-exec */
2676 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2680 #ifdef __SCO_VERSION__
2681 len = sizeof (struct sockaddr_in); /* OpenUNIX 8 somehow truncates info */
2684 PUSHp(namebuf, len);
2688 report_evil_fh(ggv);
2689 SETERRNO(EBADF,SS_IVCHAN);
2699 const int how = POPi;
2700 GV * const gv = MUTABLE_GV(POPs);
2701 IO * const io = GvIOn(gv);
2706 PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
2711 SETERRNO(EBADF,SS_IVCHAN);
2716 /* also used for: pp_gsockopt() */
2721 const int optype = PL_op->op_type;
2722 SV * const sv = (optype == OP_GSOCKOPT) ? sv_2mortal(newSV(257)) : POPs;
2723 const unsigned int optname = (unsigned int) POPi;
2724 const unsigned int lvl = (unsigned int) POPi;
2725 GV * const gv = MUTABLE_GV(POPs);
2726 IO * const io = GvIOn(gv);
2733 fd = PerlIO_fileno(IoIFP(io));
2739 (void)SvPOK_only(sv);
2743 if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
2746 /* XXX Configure test: does getsockopt set the length properly? */
2755 #if defined(__SYMBIAN32__)
2756 # define SETSOCKOPT_OPTION_VALUE_T void *
2758 # define SETSOCKOPT_OPTION_VALUE_T const char *
2760 /* XXX TODO: We need to have a proper type (a Configure probe,
2761 * etc.) for what the C headers think of the third argument of
2762 * setsockopt(), the option_value read-only buffer: is it
2763 * a "char *", or a "void *", const or not. Some compilers
2764 * don't take kindly to e.g. assuming that "char *" implicitly
2765 * promotes to a "void *", or to explicitly promoting/demoting
2766 * consts to non/vice versa. The "const void *" is the SUS
2767 * definition, but that does not fly everywhere for the above
2769 SETSOCKOPT_OPTION_VALUE_T buf;
2773 buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
2777 aint = (int)SvIV(sv);
2778 buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
2781 if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
2791 SETERRNO(EBADF,SS_IVCHAN);
2798 /* also used for: pp_getsockname() */
2803 const int optype = PL_op->op_type;
2804 GV * const gv = MUTABLE_GV(POPs);
2805 IO * const io = GvIOn(gv);
2813 sv = sv_2mortal(newSV(257));
2814 (void)SvPOK_only(sv);
2818 fd = PerlIO_fileno(IoIFP(io));
2822 case OP_GETSOCKNAME:
2823 if (PerlSock_getsockname(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2826 case OP_GETPEERNAME:
2827 if (PerlSock_getpeername(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2829 #if defined(VMS_DO_SOCKETS) && defined (DECCRTL_SOCKETS)
2831 static const char nowhere[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
2832 /* If the call succeeded, make sure we don't have a zeroed port/addr */
2833 if (((struct sockaddr *)SvPVX_const(sv))->sa_family == AF_INET &&
2834 !memcmp(SvPVX_const(sv) + sizeof(u_short), nowhere,
2835 sizeof(u_short) + sizeof(struct in_addr))) {
2842 #ifdef BOGUS_GETNAME_RETURN
2843 /* Interactive Unix, getpeername() and getsockname()
2844 does not return valid namelen */
2845 if (len == BOGUS_GETNAME_RETURN)
2846 len = sizeof(struct sockaddr);
2855 SETERRNO(EBADF,SS_IVCHAN);
2864 /* also used for: pp_lstat() */
2875 if (PL_op->op_flags & OPf_REF ? (gv = cGVOP_gv, 1)
2876 : !!(sv=POPs, gv = MAYBE_DEREF_GV(sv))) {
2877 if (PL_op->op_type == OP_LSTAT) {
2878 if (gv != PL_defgv) {
2879 do_fstat_warning_check:
2880 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
2881 "lstat() on filehandle%s%"SVf,
2884 ? sv_2mortal(newSVhek(GvENAME_HEK(gv)))
2886 } else if (PL_laststype != OP_LSTAT)
2887 /* diag_listed_as: The stat preceding %s wasn't an lstat */
2888 Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat");
2891 if (gv != PL_defgv) {
2895 PL_laststype = OP_STAT;
2896 PL_statgv = gv ? gv : (GV *)io;
2897 sv_setpvs(PL_statname, "");
2903 int fd = PerlIO_fileno(IoIFP(io));
2905 PL_laststatval = -1;
2906 SETERRNO(EBADF,RMS_IFI);
2908 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
2911 } else if (IoDIRP(io)) {
2913 PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache);
2916 PL_laststatval = -1;
2919 else PL_laststatval = -1;
2920 if (PL_laststatval < 0 && !havefp) report_evil_fh(gv);
2923 if (PL_laststatval < 0) {
2929 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2930 io = MUTABLE_IO(SvRV(sv));
2931 if (PL_op->op_type == OP_LSTAT)
2932 goto do_fstat_warning_check;
2933 goto do_fstat_have_io;
2936 SvTAINTED_off(PL_statname); /* previous tainting irrelevant */
2937 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
2939 PL_laststype = PL_op->op_type;
2940 file = SvPV_nolen_const(PL_statname);
2941 if (PL_op->op_type == OP_LSTAT)
2942 PL_laststatval = PerlLIO_lstat(file, &PL_statcache);
2944 PL_laststatval = PerlLIO_stat(file, &PL_statcache);
2945 if (PL_laststatval < 0) {
2946 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
2947 /* PL_warn_nl is constant */
2948 GCC_DIAG_IGNORE(-Wformat-nonliteral);
2949 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
2957 if (gimme != G_ARRAY) {
2958 if (gimme != G_VOID)
2959 XPUSHs(boolSV(max));
2965 mPUSHi(PL_statcache.st_dev);
2966 #if ST_INO_SIZE > IVSIZE
2967 mPUSHn(PL_statcache.st_ino);
2969 # if ST_INO_SIGN <= 0
2970 mPUSHi(PL_statcache.st_ino);
2972 mPUSHu(PL_statcache.st_ino);
2975 mPUSHu(PL_statcache.st_mode);
2976 mPUSHu(PL_statcache.st_nlink);
2978 sv_setuid(PUSHmortal, PL_statcache.st_uid);
2979 sv_setgid(PUSHmortal, PL_statcache.st_gid);
2981 #ifdef USE_STAT_RDEV
2982 mPUSHi(PL_statcache.st_rdev);
2984 PUSHs(newSVpvs_flags("", SVs_TEMP));
2986 #if Off_t_size > IVSIZE
2987 mPUSHn(PL_statcache.st_size);
2989 mPUSHi(PL_statcache.st_size);
2992 mPUSHn(PL_statcache.st_atime);
2993 mPUSHn(PL_statcache.st_mtime);
2994 mPUSHn(PL_statcache.st_ctime);
2996 mPUSHi(PL_statcache.st_atime);
2997 mPUSHi(PL_statcache.st_mtime);
2998 mPUSHi(PL_statcache.st_ctime);
3000 #ifdef USE_STAT_BLOCKS
3001 mPUSHu(PL_statcache.st_blksize);
3002 mPUSHu(PL_statcache.st_blocks);
3004 PUSHs(newSVpvs_flags("", SVs_TEMP));
3005 PUSHs(newSVpvs_flags("", SVs_TEMP));
3011 /* All filetest ops avoid manipulating the perl stack pointer in their main
3012 bodies (since commit d2c4d2d1e22d3125), and return using either
3013 S_ft_return_false() or S_ft_return_true(). These two helper functions are
3014 the only two which manipulate the perl stack. To ensure that no stack
3015 manipulation macros are used, the filetest ops avoid defining a local copy
3016 of the stack pointer with dSP. */
3018 /* If the next filetest is stacked up with this one
3019 (PL_op->op_private & OPpFT_STACKING), we leave
3020 the original argument on the stack for success,
3021 and skip the stacked operators on failure.
3022 The next few macros/functions take care of this.
3026 S_ft_return_false(pTHX_ SV *ret) {
3030 if (PL_op->op_flags & OPf_REF) XPUSHs(ret);
3034 if (PL_op->op_private & OPpFT_STACKING) {
3035 while (OP_IS_FILETEST(next->op_type)
3036 && next->op_private & OPpFT_STACKED)
3037 next = next->op_next;
3042 PERL_STATIC_INLINE OP *
3043 S_ft_return_true(pTHX_ SV *ret) {
3045 if (PL_op->op_flags & OPf_REF)
3046 XPUSHs(PL_op->op_private & OPpFT_STACKING ? (SV *)cGVOP_gv : (ret));
3047 else if (!(PL_op->op_private & OPpFT_STACKING))
3053 #define FT_RETURNNO return S_ft_return_false(aTHX_ &PL_sv_no)
3054 #define FT_RETURNUNDEF return S_ft_return_false(aTHX_ &PL_sv_undef)
3055 #define FT_RETURNYES return S_ft_return_true(aTHX_ &PL_sv_yes)
3057 #define tryAMAGICftest_MG(chr) STMT_START { \
3058 if ( (SvFLAGS(*PL_stack_sp) & (SVf_ROK|SVs_GMG)) \
3059 && PL_op->op_flags & OPf_KIDS) { \
3060 OP *next = S_try_amagic_ftest(aTHX_ chr); \
3061 if (next) return next; \
3066 S_try_amagic_ftest(pTHX_ char chr) {
3067 SV *const arg = *PL_stack_sp;
3070 if (!(PL_op->op_private & OPpFT_STACKING)) SvGETMAGIC(arg);
3074 const char tmpchr = chr;
3075 SV * const tmpsv = amagic_call(arg,
3076 newSVpvn_flags(&tmpchr, 1, SVs_TEMP),
3077 ftest_amg, AMGf_unary);
3082 return SvTRUE(tmpsv)
3083 ? S_ft_return_true(aTHX_ tmpsv) : S_ft_return_false(aTHX_ tmpsv);
3089 /* also used for: pp_fteexec() pp_fteread() pp_ftewrite() pp_ftrexec()
3095 /* Not const, because things tweak this below. Not bool, because there's
3096 no guarantee that OPpFT_ACCESS is <= CHAR_MAX */
3097 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3098 I32 use_access = PL_op->op_private & OPpFT_ACCESS;
3099 /* Giving some sort of initial value silences compilers. */
3101 int access_mode = R_OK;
3103 int access_mode = 0;
3106 /* access_mode is never used, but leaving use_access in makes the
3107 conditional compiling below much clearer. */
3110 Mode_t stat_mode = S_IRUSR;
3112 bool effective = FALSE;
3115 switch (PL_op->op_type) {
3116 case OP_FTRREAD: opchar = 'R'; break;
3117 case OP_FTRWRITE: opchar = 'W'; break;
3118 case OP_FTREXEC: opchar = 'X'; break;
3119 case OP_FTEREAD: opchar = 'r'; break;
3120 case OP_FTEWRITE: opchar = 'w'; break;
3121 case OP_FTEEXEC: opchar = 'x'; break;
3123 tryAMAGICftest_MG(opchar);
3125 switch (PL_op->op_type) {
3127 #if !(defined(HAS_ACCESS) && defined(R_OK))
3133 #if defined(HAS_ACCESS) && defined(W_OK)
3138 stat_mode = S_IWUSR;
3142 #if defined(HAS_ACCESS) && defined(X_OK)
3147 stat_mode = S_IXUSR;
3151 #ifdef PERL_EFF_ACCESS
3154 stat_mode = S_IWUSR;
3158 #ifndef PERL_EFF_ACCESS
3165 #ifdef PERL_EFF_ACCESS
3170 stat_mode = S_IXUSR;
3176 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3177 const char *name = SvPV_nolen(*PL_stack_sp);
3179 # ifdef PERL_EFF_ACCESS
3180 result = PERL_EFF_ACCESS(name, access_mode);
3182 DIE(aTHX_ "panic: attempt to call PERL_EFF_ACCESS in %s",
3188 result = access(name, access_mode);
3190 DIE(aTHX_ "panic: attempt to call access() in %s", OP_NAME(PL_op));
3201 result = my_stat_flags(0);
3204 if (cando(stat_mode, effective, &PL_statcache))
3210 /* also used for: pp_ftatime() pp_ftctime() pp_ftmtime() pp_ftsize() */
3215 const int op_type = PL_op->op_type;
3219 case OP_FTIS: opchar = 'e'; break;
3220 case OP_FTSIZE: opchar = 's'; break;
3221 case OP_FTMTIME: opchar = 'M'; break;
3222 case OP_FTCTIME: opchar = 'C'; break;
3223 case OP_FTATIME: opchar = 'A'; break;
3225 tryAMAGICftest_MG(opchar);
3227 result = my_stat_flags(0);
3230 if (op_type == OP_FTIS)
3233 /* You can't dTARGET inside OP_FTIS, because you'll get
3234 "panic: pad_sv po" - the op is not flagged to have a target. */
3238 #if Off_t_size > IVSIZE
3239 sv_setnv(TARG, (NV)PL_statcache.st_size);
3241 sv_setiv(TARG, (IV)PL_statcache.st_size);
3246 ((NV)PL_basetime - PL_statcache.st_mtime) / 86400.0 );
3250 ((NV)PL_basetime - PL_statcache.st_atime) / 86400.0 );
3254 ((NV)PL_basetime - PL_statcache.st_ctime) / 86400.0 );
3258 return SvTRUE_nomg(TARG)
3259 ? S_ft_return_true(aTHX_ TARG) : S_ft_return_false(aTHX_ TARG);
3264 /* also used for: pp_ftblk() pp_ftchr() pp_ftdir() pp_fteowned()
3265 * pp_ftfile() pp_ftpipe() pp_ftsgid() pp_ftsock()
3266 * pp_ftsuid() pp_ftsvtx() pp_ftzero() */
3273 switch (PL_op->op_type) {
3274 case OP_FTROWNED: opchar = 'O'; break;
3275 case OP_FTEOWNED: opchar = 'o'; break;
3276 case OP_FTZERO: opchar = 'z'; break;
3277 case OP_FTSOCK: opchar = 'S'; break;
3278 case OP_FTCHR: opchar = 'c'; break;
3279 case OP_FTBLK: opchar = 'b'; break;
3280 case OP_FTFILE: opchar = 'f'; break;
3281 case OP_FTDIR: opchar = 'd'; break;
3282 case OP_FTPIPE: opchar = 'p'; break;
3283 case OP_FTSUID: opchar = 'u'; break;
3284 case OP_FTSGID: opchar = 'g'; break;
3285 case OP_FTSVTX: opchar = 'k'; break;
3287 tryAMAGICftest_MG(opchar);
3289 /* I believe that all these three are likely to be defined on most every
3290 system these days. */
3292 if(PL_op->op_type == OP_FTSUID) {
3297 if(PL_op->op_type == OP_FTSGID) {
3302 if(PL_op->op_type == OP_FTSVTX) {
3307 result = my_stat_flags(0);
3310 switch (PL_op->op_type) {
3312 if (PL_statcache.st_uid == PerlProc_getuid())
3316 if (PL_statcache.st_uid == PerlProc_geteuid())
3320 if (PL_statcache.st_size == 0)
3324 if (S_ISSOCK(PL_statcache.st_mode))
3328 if (S_ISCHR(PL_statcache.st_mode))
3332 if (S_ISBLK(PL_statcache.st_mode))
3336 if (S_ISREG(PL_statcache.st_mode))
3340 if (S_ISDIR(PL_statcache.st_mode))
3344 if (S_ISFIFO(PL_statcache.st_mode))
3349 if (PL_statcache.st_mode & S_ISUID)
3355 if (PL_statcache.st_mode & S_ISGID)
3361 if (PL_statcache.st_mode & S_ISVTX)
3373 tryAMAGICftest_MG('l');
3374 result = my_lstat_flags(0);
3378 if (S_ISLNK(PL_statcache.st_mode))
3391 tryAMAGICftest_MG('t');
3393 if (PL_op->op_flags & OPf_REF)
3396 SV *tmpsv = *PL_stack_sp;
3397 if (!(gv = MAYBE_DEREF_GV_nomg(tmpsv))) {
3398 name = SvPV_nomg(tmpsv, namelen);
3399 gv = gv_fetchpvn_flags(name, namelen, SvUTF8(tmpsv), SVt_PVIO);
3403 if (GvIO(gv) && IoIFP(GvIOp(gv)))
3404 fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
3405 else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX)
3410 SETERRNO(EBADF,RMS_IFI);
3413 if (PerlLIO_isatty(fd))
3419 /* also used for: pp_ftbinary() */
3433 tryAMAGICftest_MG(PL_op->op_type == OP_FTTEXT ? 'T' : 'B');
3435 if (PL_op->op_flags & OPf_REF)
3437 else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
3442 gv = MAYBE_DEREF_GV_nomg(sv);
3446 if (gv == PL_defgv) {
3448 io = SvTYPE(PL_statgv) == SVt_PVIO
3452 goto really_filename;
3457 sv_setpvs(PL_statname, "");
3458 io = GvIO(PL_statgv);
3460 PL_laststatval = -1;
3461 PL_laststype = OP_STAT;
3462 if (io && IoIFP(io)) {
3464 if (! PerlIO_has_base(IoIFP(io)))
3465 DIE(aTHX_ "-T and -B not implemented on filehandles");
3466 fd = PerlIO_fileno(IoIFP(io));
3468 SETERRNO(EBADF,RMS_IFI);
3471 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3472 if (PL_laststatval < 0)
3474 if (S_ISDIR(PL_statcache.st_mode)) { /* handle NFS glitch */
3475 if (PL_op->op_type == OP_FTTEXT)
3480 if (PerlIO_get_cnt(IoIFP(io)) <= 0) {
3481 i = PerlIO_getc(IoIFP(io));
3483 (void)PerlIO_ungetc(IoIFP(io),i);
3485 /* null file is anything */
3488 len = PerlIO_get_bufsiz(IoIFP(io));
3489 s = (STDCHAR *) PerlIO_get_base(IoIFP(io));
3490 /* sfio can have large buffers - limit to 512 */
3495 SETERRNO(EBADF,RMS_IFI);
3497 SETERRNO(EBADF,RMS_IFI);
3506 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
3508 file = SvPVX_const(PL_statname);
3510 if (!(fp = PerlIO_open(file, "r"))) {
3512 PL_laststatval = -1;
3513 PL_laststype = OP_STAT;
3515 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
3516 /* PL_warn_nl is constant */
3517 GCC_DIAG_IGNORE(-Wformat-nonliteral);
3518 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open");
3523 PL_laststype = OP_STAT;
3524 fd = PerlIO_fileno(fp);
3526 (void)PerlIO_close(fp);
3527 SETERRNO(EBADF,RMS_IFI);
3530 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3531 if (PL_laststatval < 0) {
3532 (void)PerlIO_close(fp);
3533 SETERRNO(EBADF,RMS_IFI);
3536 PerlIO_binmode(aTHX_ fp, '<', O_BINARY, NULL);
3537 len = PerlIO_read(fp, tbuf, sizeof(tbuf));
3538 (void)PerlIO_close(fp);
3540 if (S_ISDIR(PL_statcache.st_mode) && PL_op->op_type == OP_FTTEXT)
3541 FT_RETURNNO; /* special case NFS directories */
3542 FT_RETURNYES; /* null file is anything */
3547 /* now scan s to look for textiness */
3549 #if defined(DOSISH) || defined(USEMYBINMODE)
3550 /* ignore trailing ^Z on short files */
3551 if (len && len < (I32)sizeof(tbuf) && tbuf[len-1] == 26)
3556 if (! is_invariant_string((U8 *) s, len)) {
3559 /* Here contains a variant under UTF-8 . See if the entire string is
3560 * UTF-8. But the buffer may end in a partial character, so consider
3561 * it UTF-8 if the first non-UTF8 char is an ending partial */
3562 if (is_utf8_string_loc((U8 *) s, len, &ep)
3563 || ep + UTF8SKIP(ep) > (U8 *) (s + len))
3565 if (PL_op->op_type == OP_FTTEXT) {
3574 /* Here, is not UTF-8 or is entirely ASCII. Look through the buffer for
3575 * things that wouldn't be in ASCII text or rich ASCII text. Count these
3577 for (i = 0; i < len; i++, s++) {
3578 if (!*s) { /* null never allowed in text */
3582 #ifdef USE_LOCALE_CTYPE
3583 if (IN_LC_RUNTIME(LC_CTYPE)) {
3584 if ( isPRINT_LC(*s) || isSPACE_LC(*s)) {
3591 /* VT occurs so rarely in text, that we consider it odd */
3592 || (isSPACE_A(*s) && *s != VT_NATIVE)
3594 /* But there is a fair amount of backspaces and escapes in
3597 || *s == ESC_NATIVE)
3604 if ((odd * 3 > len) == (PL_op->op_type == OP_FTTEXT)) /* allow 1/3 odd */
3615 const char *tmps = NULL;
3619 SV * const sv = POPs;
3620 if (PL_op->op_flags & OPf_SPECIAL) {
3621 gv = gv_fetchsv(sv, 0, SVt_PVIO);
3623 if (ckWARN(WARN_UNOPENED)) {
3624 Perl_warner(aTHX_ packWARN(WARN_UNOPENED),
3625 "chdir() on unopened filehandle %" SVf, sv);
3627 SETERRNO(EBADF,RMS_IFI);
3629 TAINT_PROPER("chdir");
3633 else if (!(gv = MAYBE_DEREF_GV(sv)))
3634 tmps = SvPV_nomg_const_nolen(sv);
3637 HV * const table = GvHVn(PL_envgv);
3640 if ( (svp = hv_fetchs(table, "HOME", FALSE))
3641 || (svp = hv_fetchs(table, "LOGDIR", FALSE))
3643 || (svp = hv_fetchs(table, "SYS$LOGIN", FALSE))
3647 tmps = SvPV_nolen_const(*svp);
3651 SETERRNO(EINVAL, LIB_INVARG);
3652 TAINT_PROPER("chdir");
3657 TAINT_PROPER("chdir");
3660 IO* const io = GvIO(gv);
3663 PUSHi(fchdir(my_dirfd(IoDIRP(io))) >= 0);
3664 } else if (IoIFP(io)) {
3665 int fd = PerlIO_fileno(IoIFP(io));
3669 PUSHi(fchdir(fd) >= 0);
3679 DIE(aTHX_ PL_no_func, "fchdir");
3683 PUSHi( PerlDir_chdir(tmps) >= 0 );
3685 /* Clear the DEFAULT element of ENV so we'll get the new value
3687 hv_delete(GvHVn(PL_envgv),"DEFAULT",7,G_DISCARD);
3694 SETERRNO(EBADF,RMS_IFI);
3701 /* also used for: pp_chmod() pp_kill() pp_unlink() pp_utime() */
3705 dSP; dMARK; dTARGET;
3706 const I32 value = (I32)apply(PL_op->op_type, MARK, SP);
3717 char * const tmps = POPpx;
3718 TAINT_PROPER("chroot");
3719 PUSHi( chroot(tmps) >= 0 );
3722 DIE(aTHX_ PL_no_func, "chroot");
3733 const char * const tmps2 = POPpconstx;
3734 const char * const tmps = SvPV_nolen_const(TOPs);
3735 TAINT_PROPER("rename");
3737 anum = PerlLIO_rename(tmps, tmps2);
3739 if (!(anum = PerlLIO_stat(tmps, &statbuf))) {
3740 if (same_dirent(tmps2, tmps)) /* can always rename to same name */
3743 if (PerlProc_geteuid() || PerlLIO_stat(tmps2, &statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
3744 (void)UNLINK(tmps2);
3745 if (!(anum = link(tmps, tmps2)))
3746 anum = UNLINK(tmps);
3755 /* also used for: pp_symlink() */
3757 #if defined(HAS_LINK) || defined(HAS_SYMLINK)
3761 const int op_type = PL_op->op_type;
3765 if (op_type == OP_LINK)
3766 DIE(aTHX_ PL_no_func, "link");
3768 # ifndef HAS_SYMLINK
3769 if (op_type == OP_SYMLINK)
3770 DIE(aTHX_ PL_no_func, "symlink");
3774 const char * const tmps2 = POPpconstx;
3775 const char * const tmps = SvPV_nolen_const(TOPs);
3776 TAINT_PROPER(PL_op_desc[op_type]);
3778 # if defined(HAS_LINK)
3779 # if defined(HAS_SYMLINK)
3780 /* Both present - need to choose which. */
3781 (op_type == OP_LINK) ?
3782 PerlLIO_link(tmps, tmps2) : symlink(tmps, tmps2);
3784 /* Only have link, so calls to pp_symlink will have DIE()d above. */
3785 PerlLIO_link(tmps, tmps2);
3788 # if defined(HAS_SYMLINK)
3789 /* Only have symlink, so calls to pp_link will have DIE()d above. */
3790 symlink(tmps, tmps2);
3795 SETi( result >= 0 );
3800 /* also used for: pp_symlink() */
3805 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
3815 char buf[MAXPATHLEN];
3820 /* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
3821 * it is impossible to know whether the result was truncated. */
3822 len = readlink(tmps, buf, sizeof(buf) - 1);
3831 RETSETUNDEF; /* just pretend it's a normal file */
3835 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
3837 S_dooneliner(pTHX_ const char *cmd, const char *filename)
3839 char * const save_filename = filename;
3844 Size_t size = strlen(cmd) + (strlen(filename) * 2) + 10;
3846 PERL_ARGS_ASSERT_DOONELINER;
3848 Newx(cmdline, size, char);
3849 my_strlcpy(cmdline, cmd, size);
3850 my_strlcat(cmdline, " ", size);
3851 for (s = cmdline + strlen(cmdline); *filename; ) {
3855 if (s - cmdline < size)
3856 my_strlcpy(s, " 2>&1", size - (s - cmdline));
3857 myfp = PerlProc_popen(cmdline, "r");
3861 SV * const tmpsv = sv_newmortal();
3862 /* Need to save/restore 'PL_rs' ?? */
3863 s = sv_gets(tmpsv, myfp, 0);
3864 (void)PerlProc_pclose(myfp);
3868 #ifdef HAS_SYS_ERRLIST
3873 /* you don't see this */
3874 const char * const errmsg = Strerror(e) ;
3877 if (instr(s, errmsg)) {
3884 #define EACCES EPERM
3886 if (instr(s, "cannot make"))
3887 SETERRNO(EEXIST,RMS_FEX);
3888 else if (instr(s, "existing file"))
3889 SETERRNO(EEXIST,RMS_FEX);
3890 else if (instr(s, "ile exists"))
3891 SETERRNO(EEXIST,RMS_FEX);
3892 else if (instr(s, "non-exist"))
3893 SETERRNO(ENOENT,RMS_FNF);
3894 else if (instr(s, "does not exist"))
3895 SETERRNO(ENOENT,RMS_FNF);
3896 else if (instr(s, "not empty"))
3897 SETERRNO(EBUSY,SS_DEVOFFLINE);
3898 else if (instr(s, "cannot access"))
3899 SETERRNO(EACCES,RMS_PRV);
3901 SETERRNO(EPERM,RMS_PRV);
3904 else { /* some mkdirs return no failure indication */
3906 anum = (PerlLIO_stat(save_filename, &statbuf) >= 0);
3907 if (PL_op->op_type == OP_RMDIR)
3912 SETERRNO(EACCES,RMS_PRV); /* a guess */
3921 /* This macro removes trailing slashes from a directory name.
3922 * Different operating and file systems take differently to
3923 * trailing slashes. According to POSIX 1003.1 1996 Edition
3924 * any number of trailing slashes should be allowed.
3925 * Thusly we snip them away so that even non-conforming
3926 * systems are happy.
3927 * We should probably do this "filtering" for all
3928 * the functions that expect (potentially) directory names:
3929 * -d, chdir(), chmod(), chown(), chroot(), fcntl()?,
3930 * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */
3932 #define TRIMSLASHES(tmps,len,copy) (tmps) = SvPV_const(TOPs, (len)); \
3933 if ((len) > 1 && (tmps)[(len)-1] == '/') { \
3936 } while ((len) > 1 && (tmps)[(len)-1] == '/'); \
3937 (tmps) = savepvn((tmps), (len)); \
3947 const unsigned int mode = (MAXARG > 1 && (TOPs||((void)POPs,0))) ? POPu : 0777;
3949 TRIMSLASHES(tmps,len,copy);
3951 TAINT_PROPER("mkdir");
3953 SETi( PerlDir_mkdir(tmps, mode) >= 0 );
3957 SETi( dooneliner("mkdir", tmps) );
3958 oldumask = PerlLIO_umask(0);
3959 PerlLIO_umask(oldumask);
3960 PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
3975 TRIMSLASHES(tmps,len,copy);
3976 TAINT_PROPER("rmdir");
3978 SETi( PerlDir_rmdir(tmps) >= 0 );
3980 SETi( dooneliner("rmdir", tmps) );
3987 /* Directory calls. */
3991 #if defined(Direntry_t) && defined(HAS_READDIR)
3993 const char * const dirname = POPpconstx;
3994 GV * const gv = MUTABLE_GV(POPs);
3995 IO * const io = GvIOn(gv);
3997 if ((IoIFP(io) || IoOFP(io)))
3998 Perl_ck_warner_d(aTHX_ packWARN2(WARN_IO, WARN_DEPRECATED),
3999 "Opening filehandle %"HEKf" also as a directory",
4000 HEKfARG(GvENAME_HEK(gv)) );
4002 PerlDir_close(IoDIRP(io));
4003 if (!(IoDIRP(io) = PerlDir_open(dirname)))
4009 SETERRNO(EBADF,RMS_DIR);
4012 DIE(aTHX_ PL_no_dir_func, "opendir");
4018 #if !defined(Direntry_t) || !defined(HAS_READDIR)
4019 DIE(aTHX_ PL_no_dir_func, "readdir");
4021 #if !defined(I_DIRENT) && !defined(VMS)
4022 Direntry_t *readdir (DIR *);
4027 const I32 gimme = GIMME_V;
4028 GV * const gv = MUTABLE_GV(POPs);
4029 const Direntry_t *dp;
4030 IO * const io = GvIOn(gv);
4033 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4034 "readdir() attempted on invalid dirhandle %"HEKf,
4035 HEKfARG(GvENAME_HEK(gv)));
4040 dp = (Direntry_t *)PerlDir_read(IoDIRP(io));
4044 sv = newSVpvn(dp->d_name, dp->d_namlen);
4046 sv = newSVpv(dp->d_name, 0);
4048 if (!(IoFLAGS(io) & IOf_UNTAINT))
4051 } while (gimme == G_ARRAY);
4053 if (!dp && gimme != G_ARRAY)
4060 SETERRNO(EBADF,RMS_ISI);
4061 if (gimme == G_ARRAY)
4070 #if defined(HAS_TELLDIR) || defined(telldir)
4072 /* XXX does _anyone_ need this? --AD 2/20/1998 */
4073 /* XXX netbsd still seemed to.
4074 XXX HAS_TELLDIR_PROTO is new style, NEED_TELLDIR_PROTO is old style.
4075 --JHI 1999-Feb-02 */
4076 # if !defined(HAS_TELLDIR_PROTO) || defined(NEED_TELLDIR_PROTO)
4077 long telldir (DIR *);
4079 GV * const gv = MUTABLE_GV(POPs);
4080 IO * const io = GvIOn(gv);
4083 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4084 "telldir() attempted on invalid dirhandle %"HEKf,
4085 HEKfARG(GvENAME_HEK(gv)));
4089 PUSHi( PerlDir_tell(IoDIRP(io)) );
4093 SETERRNO(EBADF,RMS_ISI);
4096 DIE(aTHX_ PL_no_dir_func, "telldir");
4102 #if defined(HAS_SEEKDIR) || defined(seekdir)
4104 const long along = POPl;
4105 GV * const gv = MUTABLE_GV(POPs);
4106 IO * const io = GvIOn(gv);
4109 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4110 "seekdir() attempted on invalid dirhandle %"HEKf,
4111 HEKfARG(GvENAME_HEK(gv)));
4114 (void)PerlDir_seek(IoDIRP(io), along);
4119 SETERRNO(EBADF,RMS_ISI);
4122 DIE(aTHX_ PL_no_dir_func, "seekdir");
4128 #if defined(HAS_REWINDDIR) || defined(rewinddir)
4130 GV * const gv = MUTABLE_GV(POPs);
4131 IO * const io = GvIOn(gv);
4134 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4135 "rewinddir() attempted on invalid dirhandle %"HEKf,
4136 HEKfARG(GvENAME_HEK(gv)));
4139 (void)PerlDir_rewind(IoDIRP(io));
4143 SETERRNO(EBADF,RMS_ISI);
4146 DIE(aTHX_ PL_no_dir_func, "rewinddir");
4152 #if defined(Direntry_t) && defined(HAS_READDIR)
4154 GV * const gv = MUTABLE_GV(POPs);
4155 IO * const io = GvIOn(gv);
4158 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4159 "closedir() attempted on invalid dirhandle %"HEKf,
4160 HEKfARG(GvENAME_HEK(gv)));
4163 #ifdef VOID_CLOSEDIR
4164 PerlDir_close(IoDIRP(io));
4166 if (PerlDir_close(IoDIRP(io)) < 0) {
4167 IoDIRP(io) = 0; /* Don't try to close again--coredumps on SysV */
4176 SETERRNO(EBADF,RMS_IFI);
4179 DIE(aTHX_ PL_no_dir_func, "closedir");
4183 /* Process control. */
4190 #ifdef HAS_SIGPROCMASK
4191 sigset_t oldmask, newmask;
4195 PERL_FLUSHALL_FOR_CHILD;
4196 #ifdef HAS_SIGPROCMASK
4197 sigfillset(&newmask);
4198 sigprocmask(SIG_SETMASK, &newmask, &oldmask);
4200 childpid = PerlProc_fork();
4201 if (childpid == 0) {
4205 for (sig = 1; sig < SIG_SIZE; sig++)
4206 PL_psig_pend[sig] = 0;
4208 #ifdef HAS_SIGPROCMASK
4211 sigprocmask(SIG_SETMASK, &oldmask, NULL);
4218 #ifdef PERL_USES_PL_PIDSTATUS
4219 hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
4225 # if (defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)) || defined(__amigaos4__)
4230 PERL_FLUSHALL_FOR_CHILD;
4231 childpid = PerlProc_fork();
4237 DIE(aTHX_ PL_no_func, "fork");
4244 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4249 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4250 childpid = wait4pid(-1, &argflags, 0);
4252 while ((childpid = wait4pid(-1, &argflags, 0)) == -1 &&
4257 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4258 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4259 STATUS_NATIVE_CHILD_SET((childpid && childpid != -1) ? argflags : -1);
4261 STATUS_NATIVE_CHILD_SET((childpid > 0) ? argflags : -1);
4266 DIE(aTHX_ PL_no_func, "wait");
4272 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4274 const int optype = POPi;
4275 const Pid_t pid = TOPi;
4279 result = amigaos_waitpid(aTHX_ optype, pid, &argflags);
4280 STATUS_NATIVE_CHILD_SET((result >= 0) ? argflags : -1);
4281 result = result == 0 ? pid : -1;
4285 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4286 result = wait4pid(pid, &argflags, optype);
4288 while ((result = wait4pid(pid, &argflags, optype)) == -1 &&
4293 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4294 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4295 STATUS_NATIVE_CHILD_SET((result && result != -1) ? argflags : -1);
4297 STATUS_NATIVE_CHILD_SET((result > 0) ? argflags : -1);
4299 # endif /* __amigaos4__ */
4303 DIE(aTHX_ PL_no_func, "waitpid");
4309 dSP; dMARK; dORIGMARK; dTARGET;
4310 #if defined(__LIBCATAMOUNT__)
4311 PL_statusvalue = -1;
4316 # ifdef __amigaos4__
4324 while (++MARK <= SP) {
4325 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4330 TAINT_PROPER("system");
4332 PERL_FLUSHALL_FOR_CHILD;
4333 #if (defined(HAS_FORK) || defined(__amigaos4__)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO)
4336 struct UserData userdata;
4343 bool child_success = FALSE;
4344 #ifdef HAS_SIGPROCMASK
4345 sigset_t newset, oldset;
4348 if (PerlProc_pipe(pp) >= 0)
4351 amigaos_fork_set_userdata(aTHX_
4357 pthread_create(&proc,NULL,amigaos_system_child,(void *)&userdata);
4358 child_success = proc > 0;
4360 #ifdef HAS_SIGPROCMASK
4361 sigemptyset(&newset);
4362 sigaddset(&newset, SIGCHLD);
4363 sigprocmask(SIG_BLOCK, &newset, &oldset);
4365 while ((childpid = PerlProc_fork()) == -1) {
4366 if (errno != EAGAIN) {
4371 PerlLIO_close(pp[0]);
4372 PerlLIO_close(pp[1]);
4374 #ifdef HAS_SIGPROCMASK
4375 sigprocmask(SIG_SETMASK, &oldset, NULL);
4381 child_success = childpid > 0;
4383 if (child_success) {
4384 Sigsave_t ihand,qhand; /* place to save signals during system() */
4387 #ifndef __amigaos4__
4389 PerlLIO_close(pp[1]);
4392 rsignal_save(SIGINT, (Sighandler_t) SIG_IGN, &ihand);
4393 rsignal_save(SIGQUIT, (Sighandler_t) SIG_IGN, &qhand);
4396 result = pthread_join(proc, (void **)&status);
4399 result = wait4pid(childpid, &status, 0);
4400 } while (result == -1 && errno == EINTR);
4403 #ifdef HAS_SIGPROCMASK
4404 sigprocmask(SIG_SETMASK, &oldset, NULL);
4406 (void)rsignal_restore(SIGINT, &ihand);
4407 (void)rsignal_restore(SIGQUIT, &qhand);
4409 STATUS_NATIVE_CHILD_SET(result == -1 ? -1 : status);
4410 do_execfree(); /* free any memory child malloced on fork */
4417 while (n < sizeof(int)) {
4418 n1 = PerlLIO_read(pp[0],
4419 (void*)(((char*)&errkid)+n),
4425 PerlLIO_close(pp[0]);
4426 if (n) { /* Error */
4427 if (n != sizeof(int))
4428 DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
4429 errno = errkid; /* Propagate errno from kid */
4431 /* The pipe always has something in it
4432 * so n alone is not enough. */
4436 STATUS_NATIVE_CHILD_SET(-1);
4440 XPUSHi(STATUS_CURRENT);
4443 #ifndef __amigaos4__
4444 #ifdef HAS_SIGPROCMASK
4445 sigprocmask(SIG_SETMASK, &oldset, NULL);
4448 PerlLIO_close(pp[0]);
4449 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
4450 if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
4454 if (PL_op->op_flags & OPf_STACKED) {
4455 SV * const really = *++MARK;
4456 value = (I32)do_aexec5(really, MARK, SP, pp[1], did_pipes);
4458 else if (SP - MARK != 1)
4459 value = (I32)do_aexec5(NULL, MARK, SP, pp[1], did_pipes);
4461 value = (I32)do_exec3(SvPVx_nolen(sv_mortalcopy(*SP)), pp[1], did_pipes);
4463 #endif /* __amigaos4__ */
4466 #else /* ! FORK or VMS or OS/2 */
4469 if (PL_op->op_flags & OPf_STACKED) {
4470 SV * const really = *++MARK;
4471 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4472 value = (I32)do_aspawn(really, MARK, SP);
4474 value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
4477 else if (SP - MARK != 1) {
4478 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4479 value = (I32)do_aspawn(NULL, MARK, SP);
4481 value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
4485 value = (I32)do_spawn(SvPVx_nolen(sv_mortalcopy(*SP)));
4487 if (PL_statusvalue == -1) /* hint that value must be returned as is */
4489 STATUS_NATIVE_CHILD_SET(value);
4492 XPUSHi(result ? value : STATUS_CURRENT);
4493 #endif /* !FORK or VMS or OS/2 */
4500 dSP; dMARK; dORIGMARK; dTARGET;
4505 while (++MARK <= SP) {
4506 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4511 TAINT_PROPER("exec");
4514 PERL_FLUSHALL_FOR_CHILD;
4515 if (PL_op->op_flags & OPf_STACKED) {
4516 SV * const really = *++MARK;
4517 value = (I32)do_aexec(really, MARK, SP);
4519 else if (SP - MARK != 1)
4521 value = (I32)vms_do_aexec(NULL, MARK, SP);
4523 value = (I32)do_aexec(NULL, MARK, SP);
4527 value = (I32)vms_do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4529 value = (I32)do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4541 XPUSHi( getppid() );
4544 DIE(aTHX_ PL_no_func, "getppid");
4554 (MAXARG < 1) ? 0 : TOPs ? SvIVx(POPs) : ((void)POPs, 0);
4557 pgrp = (I32)BSD_GETPGRP(pid);
4559 if (pid != 0 && pid != PerlProc_getpid())
4560 DIE(aTHX_ "POSIX getpgrp can't take an argument");
4566 DIE(aTHX_ PL_no_func, "getpgrp");
4576 pgrp = MAXARG == 2 && (TOPs||POPs) ? POPi : 0;
4577 if (MAXARG > 0) pid = TOPs ? TOPi : 0;
4584 TAINT_PROPER("setpgrp");
4586 SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
4588 if ((pgrp != 0 && pgrp != PerlProc_getpid())
4589 || (pid != 0 && pid != PerlProc_getpid()))
4591 DIE(aTHX_ "setpgrp can't take arguments");
4593 SETi( setpgrp() >= 0 );
4594 #endif /* USE_BSDPGRP */
4597 DIE(aTHX_ PL_no_func, "setpgrp");
4601 #if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2))
4602 # define PRIORITY_WHICH_T(which) (__priority_which_t)which
4604 # define PRIORITY_WHICH_T(which) which
4609 #ifdef HAS_GETPRIORITY
4611 const int who = POPi;
4612 const int which = TOPi;
4613 SETi( getpriority(PRIORITY_WHICH_T(which), who) );
4616 DIE(aTHX_ PL_no_func, "getpriority");
4622 #ifdef HAS_SETPRIORITY
4624 const int niceval = POPi;
4625 const int who = POPi;
4626 const int which = TOPi;
4627 TAINT_PROPER("setpriority");
4628 SETi( setpriority(PRIORITY_WHICH_T(which), who, niceval) >= 0 );
4631 DIE(aTHX_ PL_no_func, "setpriority");
4635 #undef PRIORITY_WHICH_T
4643 XPUSHn( time(NULL) );
4645 XPUSHi( time(NULL) );
4654 struct tms timesbuf;
4657 (void)PerlProc_times(×buf);
4659 mPUSHn(((NV)timesbuf.tms_utime)/(NV)PL_clocktick);
4660 if (GIMME_V == G_ARRAY) {
4661 mPUSHn(((NV)timesbuf.tms_stime)/(NV)PL_clocktick);
4662 mPUSHn(((NV)timesbuf.tms_cutime)/(NV)PL_clocktick);
4663 mPUSHn(((NV)timesbuf.tms_cstime)/(NV)PL_clocktick);
4671 if (GIMME_V == G_ARRAY) {
4678 DIE(aTHX_ "times not implemented");
4680 #endif /* HAS_TIMES */
4683 /* The 32 bit int year limits the times we can represent to these
4684 boundaries with a few days wiggle room to account for time zone
4687 /* Sat Jan 3 00:00:00 -2147481748 */
4688 #define TIME_LOWER_BOUND -67768100567755200.0
4689 /* Sun Dec 29 12:00:00 2147483647 */
4690 #define TIME_UPPER_BOUND 67767976233316800.0
4693 /* also used for: pp_localtime() */
4701 const char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
4702 static const char * const dayname[] =
4703 {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
4704 static const char * const monname[] =
4705 {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
4706 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
4708 if (MAXARG < 1 || (!TOPs && ((void)POPs, 1))) {
4711 when = (Time64_T)now;
4714 NV input = Perl_floor(POPn);
4715 const bool pl_isnan = Perl_isnan(input);
4716 when = (Time64_T)input;
4717 if (UNLIKELY(pl_isnan || when != input)) {
4718 /* diag_listed_as: gmtime(%f) too large */
4719 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4720 "%s(%.0" NVff ") too large", opname, input);
4728 if ( TIME_LOWER_BOUND > when ) {
4729 /* diag_listed_as: gmtime(%f) too small */
4730 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4731 "%s(%.0" NVff ") too small", opname, when);
4734 else if( when > TIME_UPPER_BOUND ) {
4735 /* diag_listed_as: gmtime(%f) too small */
4736 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4737 "%s(%.0" NVff ") too large", opname, when);
4741 if (PL_op->op_type == OP_LOCALTIME)
4742 err = Perl_localtime64_r(&when, &tmbuf);
4744 err = Perl_gmtime64_r(&when, &tmbuf);
4748 /* diag_listed_as: gmtime(%f) failed */
4749 /* XXX %lld broken for quads */
4751 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4752 "%s(%.0" NVff ") failed", opname, when);
4755 if (GIMME_V != G_ARRAY) { /* scalar context */
4762 Perl_sv_setpvf_mg(aTHX_ TARG, "%s %s %2d %02d:%02d:%02d %"IVdf,
4763 dayname[tmbuf.tm_wday],
4764 monname[tmbuf.tm_mon],
4769 (IV)tmbuf.tm_year + 1900);
4772 else { /* list context */
4778 mPUSHi(tmbuf.tm_sec);
4779 mPUSHi(tmbuf.tm_min);
4780 mPUSHi(tmbuf.tm_hour);
4781 mPUSHi(tmbuf.tm_mday);
4782 mPUSHi(tmbuf.tm_mon);
4783 mPUSHn(tmbuf.tm_year);
4784 mPUSHi(tmbuf.tm_wday);
4785 mPUSHi(tmbuf.tm_yday);
4786 mPUSHi(tmbuf.tm_isdst);
4795 /* alarm() takes an unsigned int number of seconds, and return the
4796 * unsigned int number of seconds remaining in the previous alarm
4797 * (alarms don't stack). Therefore negative return values are not
4801 /* Note that while the C library function alarm() as such has
4802 * no errors defined (or in other words, properly behaving client
4803 * code shouldn't expect any), alarm() being obsoleted by
4804 * setitimer() and often being implemented in terms of
4805 * setitimer(), can fail. */
4806 /* diag_listed_as: %s() with negative argument */
4807 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4808 "alarm() with negative argument");
4809 SETERRNO(EINVAL, LIB_INVARG);
4813 unsigned int retval = alarm(anum);
4814 if ((int)retval < 0) /* Strictly speaking "cannot happen". */
4820 DIE(aTHX_ PL_no_func, "alarm");
4831 (void)time(&lasttime);
4832 if (MAXARG < 1 || (!TOPs && !POPs))
4837 /* diag_listed_as: %s() with negative argument */
4838 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4839 "sleep() with negative argument");
4840 SETERRNO(EINVAL, LIB_INVARG);
4844 PerlProc_sleep((unsigned int)duration);
4848 XPUSHi(when - lasttime);
4852 /* Shared memory. */
4853 /* Merged with some message passing. */
4855 /* also used for: pp_msgrcv() pp_msgsnd() pp_semop() pp_shmread() */
4859 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4860 dSP; dMARK; dTARGET;
4861 const int op_type = PL_op->op_type;
4866 value = (I32)(do_msgsnd(MARK, SP) >= 0);
4869 value = (I32)(do_msgrcv(MARK, SP) >= 0);
4872 value = (I32)(do_semop(MARK, SP) >= 0);
4875 value = (I32)(do_shmio(op_type, MARK, SP) >= 0);
4883 return Perl_pp_semget(aTHX);
4889 /* also used for: pp_msgget() pp_shmget() */
4893 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4894 dSP; dMARK; dTARGET;
4895 const int anum = do_ipcget(PL_op->op_type, MARK, SP);
4902 DIE(aTHX_ "System V IPC is not implemented on this machine");
4906 /* also used for: pp_msgctl() pp_shmctl() */
4910 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4911 dSP; dMARK; dTARGET;
4912 const int anum = do_ipcctl(PL_op->op_type, MARK, SP);
4920 PUSHp(zero_but_true, ZBTLEN);
4924 return Perl_pp_semget(aTHX);
4928 /* I can't const this further without getting warnings about the types of
4929 various arrays passed in from structures. */
4931 S_space_join_names_mortal(pTHX_ char *const *array)
4935 PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL;
4938 target = newSVpvs_flags("", SVs_TEMP);
4940 sv_catpv(target, *array);
4943 sv_catpvs(target, " ");
4946 target = sv_mortalcopy(&PL_sv_no);
4951 /* Get system info. */
4953 /* also used for: pp_ghbyaddr() pp_ghbyname() */
4957 #if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT)
4959 I32 which = PL_op->op_type;
4962 #ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
4963 struct hostent *gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
4964 struct hostent *gethostbyname(Netdb_name_t);
4965 struct hostent *gethostent(void);
4967 struct hostent *hent = NULL;
4971 if (which == OP_GHBYNAME) {
4972 #ifdef HAS_GETHOSTBYNAME
4973 const char* const name = POPpbytex;
4974 hent = PerlSock_gethostbyname(name);
4976 DIE(aTHX_ PL_no_sock_func, "gethostbyname");
4979 else if (which == OP_GHBYADDR) {
4980 #ifdef HAS_GETHOSTBYADDR
4981 const int addrtype = POPi;
4982 SV * const addrsv = POPs;