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 U8 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 SvPVCLEAR(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. This will be a fatal error in Perl 5.28",
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);
957 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\"",
958 methname, SVfARG(*MARK));
959 else if (isGV(*MARK)) {
960 /* If the glob doesn't name an existing package, using
961 * SVfARG(*MARK) would yield "*Foo::Bar" or *main::Foo. So
962 * generate the name for the error message explicitly. */
963 SV *stashname = newSV(0);
964 gv_fullname4(stashname, (GV *) *MARK, NULL, FALSE);
965 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\"",
966 methname, SVfARG(stashname));
969 SV *stashname = !SvPOK(*MARK) ? &PL_sv_no
970 : SvCUR(*MARK) ? *MARK
971 : sv_2mortal(newSVpvs("main"));
972 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\""
973 " (perhaps you forgot to load \"%" SVf "\"?)",
974 methname, SVfARG(stashname), SVfARG(stashname));
977 else if (!(gv = gv_fetchmethod(stash, methname))) {
978 /* The effective name can only be NULL for stashes that have
979 * been deleted from the symbol table, which this one can't
980 * be, since we just looked it up by name.
982 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" HEKf "\"",
983 methname, HvENAME_HEK_NN(stash));
985 ENTER_with_name("call_TIE");
986 PUSHSTACKi(PERLSI_MAGIC);
988 EXTEND(SP,(I32)items);
992 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
998 if (sv_isobject(sv)) {
999 sv_unmagic(varsv, how);
1000 /* Croak if a self-tie on an aggregate is attempted. */
1001 if (varsv == SvRV(sv) &&
1002 (SvTYPE(varsv) == SVt_PVAV ||
1003 SvTYPE(varsv) == SVt_PVHV))
1005 "Self-ties of arrays and hashes are not supported");
1006 sv_magic(varsv, (SvRV(sv) == varsv ? NULL : sv), how, NULL, 0);
1008 LEAVE_with_name("call_TIE");
1009 SP = PL_stack_base + markoff;
1015 /* also used for: pp_dbmclose() */
1022 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
1023 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
1025 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1028 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1029 !(sv = defelem_target(sv, NULL))) RETPUSHUNDEF;
1031 if ((mg = SvTIED_mg(sv, how))) {
1032 SV * const obj = SvRV(SvTIED_obj(sv, mg));
1034 GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE);
1036 if (gv && isGV(gv) && (cv = GvCV(gv))) {
1038 PUSHs(SvTIED_obj(MUTABLE_SV(gv), mg));
1039 mXPUSHi(SvREFCNT(obj) - 1);
1041 ENTER_with_name("call_UNTIE");
1042 call_sv(MUTABLE_SV(cv), G_VOID);
1043 LEAVE_with_name("call_UNTIE");
1046 else if (mg && SvREFCNT(obj) > 1) {
1047 Perl_ck_warner(aTHX_ packWARN(WARN_UNTIE),
1048 "untie attempted while %" UVuf " inner references still exist",
1049 (UV)SvREFCNT(obj) - 1 ) ;
1053 sv_unmagic(sv, how) ;
1062 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
1063 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
1065 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1068 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1069 !(sv = defelem_target(sv, NULL))) goto ret_undef;
1071 if ((mg = SvTIED_mg(sv, how))) {
1072 SETs(SvTIED_obj(sv, mg));
1073 return NORMAL; /* PUTBACK not needed, pp_tied never moves SP */
1087 HV * const hv = MUTABLE_HV(POPs);
1088 SV * const sv = newSVpvs_flags("AnyDBM_File", SVs_TEMP);
1089 stash = gv_stashsv(sv, 0);
1090 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
1092 require_pv("AnyDBM_File.pm");
1094 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH")))
1095 DIE(aTHX_ "No dbm on this machine");
1105 mPUSHu(O_RDWR|O_CREAT);
1109 if (!SvOK(right)) right = &PL_sv_no;
1113 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1116 if (!sv_isobject(TOPs)) {
1124 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1126 if (sv_isobject(TOPs))
1131 sv_unmagic(MUTABLE_SV(hv), PERL_MAGIC_tied);
1132 sv_magic(MUTABLE_SV(hv), TOPs, PERL_MAGIC_tied, NULL, 0);
1149 struct timeval timebuf;
1150 struct timeval *tbuf = &timebuf;
1153 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1158 # if BYTEORDER & 0xf0000
1159 # define ORDERBYTE (0x88888888 - BYTEORDER)
1161 # define ORDERBYTE (0x4444 - BYTEORDER)
1167 for (i = 1; i <= 3; i++) {
1168 SV * const sv = SP[i];
1172 if (SvREADONLY(sv)) {
1173 if (!(SvPOK(sv) && SvCUR(sv) == 0))
1174 Perl_croak_no_modify();
1176 else if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
1179 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
1180 "Non-string passed as bitmask");
1181 SvPV_force_nomg_nolen(sv); /* force string conversion */
1188 /* little endians can use vecs directly */
1189 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1196 masksize = NFDBITS / NBBY;
1198 masksize = sizeof(long); /* documented int, everyone seems to use long */
1200 Zero(&fd_sets[0], 4, char*);
1203 # if SELECT_MIN_BITS == 1
1204 growsize = sizeof(fd_set);
1206 # if defined(__GLIBC__) && defined(__FD_SETSIZE)
1207 # undef SELECT_MIN_BITS
1208 # define SELECT_MIN_BITS __FD_SETSIZE
1210 /* If SELECT_MIN_BITS is greater than one we most probably will want
1211 * to align the sizes with SELECT_MIN_BITS/8 because for example
1212 * in many little-endian (Intel, Alpha) systems (Linux, OS/2, Digital
1213 * UNIX, Solaris, Darwin) the smallest quantum select() operates
1214 * on (sets/tests/clears bits) is 32 bits. */
1215 growsize = maxlen + (SELECT_MIN_BITS/8 - (maxlen % (SELECT_MIN_BITS/8)));
1221 value = SvNV_nomg(sv);
1224 timebuf.tv_sec = (long)value;
1225 value -= (NV)timebuf.tv_sec;
1226 timebuf.tv_usec = (long)(value * 1000000.0);
1231 for (i = 1; i <= 3; i++) {
1233 if (!SvOK(sv) || SvCUR(sv) == 0) {
1240 Sv_Grow(sv, growsize);
1244 while (++j <= growsize) {
1248 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1250 Newx(fd_sets[i], growsize, char);
1251 for (offset = 0; offset < growsize; offset += masksize) {
1252 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1253 fd_sets[i][j+offset] = s[(k % masksize) + offset];
1256 fd_sets[i] = SvPVX(sv);
1260 #ifdef PERL_IRIX5_SELECT_TIMEVAL_VOID_CAST
1261 /* Can't make just the (void*) conditional because that would be
1262 * cpp #if within cpp macro, and not all compilers like that. */
1263 nfound = PerlSock_select(
1265 (Select_fd_set_t) fd_sets[1],
1266 (Select_fd_set_t) fd_sets[2],
1267 (Select_fd_set_t) fd_sets[3],
1268 (void*) tbuf); /* Workaround for compiler bug. */
1270 nfound = PerlSock_select(
1272 (Select_fd_set_t) fd_sets[1],
1273 (Select_fd_set_t) fd_sets[2],
1274 (Select_fd_set_t) fd_sets[3],
1277 for (i = 1; i <= 3; i++) {
1280 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1282 for (offset = 0; offset < growsize; offset += masksize) {
1283 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1284 s[(k % masksize) + offset] = fd_sets[i][j+offset];
1286 Safefree(fd_sets[i]);
1293 if (GIMME_V == G_ARRAY && tbuf) {
1294 value = (NV)(timebuf.tv_sec) +
1295 (NV)(timebuf.tv_usec) / 1000000.0;
1300 DIE(aTHX_ "select not implemented");
1308 =for apidoc setdefout
1310 Sets C<PL_defoutgv>, the default file handle for output, to the passed in
1311 typeglob. As C<PL_defoutgv> "owns" a reference on its typeglob, the reference
1312 count of the passed in typeglob is increased by one, and the reference count
1313 of the typeglob that C<PL_defoutgv> points to is decreased by one.
1319 Perl_setdefout(pTHX_ GV *gv)
1321 GV *oldgv = PL_defoutgv;
1323 PERL_ARGS_ASSERT_SETDEFOUT;
1325 SvREFCNT_inc_simple_void_NN(gv);
1327 SvREFCNT_dec(oldgv);
1334 GV * const newdefout = (PL_op->op_private > 0) ? (MUTABLE_GV(POPs)) : NULL;
1335 GV * egv = GvEGVx(PL_defoutgv);
1340 hv = isGV_with_GP(egv) ? GvSTASH(egv) : NULL;
1341 gvp = hv && HvENAME(hv)
1342 ? (GV**)hv_fetch(hv, GvNAME(egv), HEK_UTF8(GvNAME_HEK(egv)) ? -GvNAMELEN(egv) : GvNAMELEN(egv), FALSE)
1344 if (gvp && *gvp == egv) {
1345 gv_efullname4(TARG, PL_defoutgv, NULL, TRUE);
1349 mXPUSHs(newRV(MUTABLE_SV(egv)));
1353 if (!GvIO(newdefout))
1354 gv_IOadd(newdefout);
1355 setdefout(newdefout);
1365 MAXARG==0 || (!TOPs && !POPs) ? PL_stdingv : MUTABLE_GV(POPs);
1366 IO *const io = GvIO(gv);
1372 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1374 const U8 gimme = GIMME_V;
1375 Perl_tied_method(aTHX_ SV_CONST(GETC), SP, MUTABLE_SV(io), mg, gimme, 0);
1376 if (gimme == G_SCALAR) {
1378 SvSetMagicSV_nosteal(TARG, TOPs);
1383 if (!gv || do_eof(gv)) { /* make sure we have fp with something */
1384 if (!io || (!IoIFP(io) && IoTYPE(io) != IoTYPE_WRONLY))
1386 SETERRNO(EBADF,RMS_IFI);
1390 sv_setpvs(TARG, " ");
1391 *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
1392 if (PerlIO_isutf8(IoIFP(GvIOp(gv)))) {
1393 /* Find out how many bytes the char needs */
1394 Size_t len = UTF8SKIP(SvPVX_const(TARG));
1397 len = PerlIO_read(IoIFP(GvIOp(gv)),SvPVX(TARG)+1,len-1);
1398 SvCUR_set(TARG,1+len);
1402 else SvUTF8_off(TARG);
1408 S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
1411 const U8 gimme = GIMME_V;
1413 PERL_ARGS_ASSERT_DOFORM;
1416 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
1418 cx = cx_pushblock(CXt_FORMAT, gimme, PL_stack_sp, PL_savestack_ix);
1419 cx_pushformat(cx, cv, retop, gv);
1420 if (CvDEPTH(cv) >= 2)
1421 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1422 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1424 setdefout(gv); /* locally select filehandle so $% et al work */
1442 gv = MUTABLE_GV(POPs);
1459 tmpsv = sv_newmortal();
1460 gv_efullname4(tmpsv, fgv, NULL, FALSE);
1461 DIE(aTHX_ "Undefined format \"%" SVf "\" called", SVfARG(tmpsv));
1463 IoFLAGS(io) &= ~IOf_DIDTOP;
1464 RETURNOP(doform(cv,gv,PL_op->op_next));
1470 GV * const gv = CX_CUR()->blk_format.gv;
1471 IO * const io = GvIOp(gv);
1476 bool is_return = cBOOL(PL_op->op_type == OP_RETURN);
1478 if (is_return || !io || !(ofp = IoOFP(io)))
1481 DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
1482 (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
1484 if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
1485 PL_formtarget != PL_toptarget)
1489 if (!IoTOP_GV(io)) {
1492 if (!IoTOP_NAME(io)) {
1494 if (!IoFMT_NAME(io))
1495 IoFMT_NAME(io) = savepv(GvNAME(gv));
1496 topname = sv_2mortal(Perl_newSVpvf(aTHX_ "%" HEKf "_TOP",
1497 HEKfARG(GvNAME_HEK(gv))));
1498 topgv = gv_fetchsv(topname, 0, SVt_PVFM);
1499 if ((topgv && GvFORM(topgv)) ||
1500 !gv_fetchpvs("top", GV_NOTQUAL, SVt_PVFM))
1501 IoTOP_NAME(io) = savesvpv(topname);
1503 IoTOP_NAME(io) = savepvs("top");
1505 topgv = gv_fetchpv(IoTOP_NAME(io), 0, SVt_PVFM);
1506 if (!topgv || !GvFORM(topgv)) {
1507 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1510 IoTOP_GV(io) = topgv;
1512 if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear. It still doesn't fit. */
1513 I32 lines = IoLINES_LEFT(io);
1514 const char *s = SvPVX_const(PL_formtarget);
1515 if (lines <= 0) /* Yow, header didn't even fit!!! */
1517 while (lines-- > 0) {
1518 s = strchr(s, '\n');
1524 const STRLEN save = SvCUR(PL_formtarget);
1525 SvCUR_set(PL_formtarget, s - SvPVX_const(PL_formtarget));
1526 do_print(PL_formtarget, ofp);
1527 SvCUR_set(PL_formtarget, save);
1528 sv_chop(PL_formtarget, s);
1529 FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
1532 if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
1533 do_print(GvSV(gv_fetchpvs("\f", GV_ADD, SVt_PV)), ofp);
1534 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1536 PL_formtarget = PL_toptarget;
1537 IoFLAGS(io) |= IOf_DIDTOP;
1539 assert(fgv); /* IoTOP_GV(io) should have been set above */
1542 SV * const sv = sv_newmortal();
1543 gv_efullname4(sv, fgv, NULL, FALSE);
1544 DIE(aTHX_ "Undefined top format \"%" SVf "\" called", SVfARG(sv));
1546 return doform(cv, gv, PL_op);
1551 assert(CxTYPE(cx) == CXt_FORMAT);
1552 SP = PL_stack_base + cx->blk_oldsp; /* ignore retval of formline */
1556 retop = cx->blk_sub.retop;
1560 /* XXX the semantics of doing 'return' in a format aren't documented.
1561 * Currently we ignore any args to 'return' and just return
1562 * a single undef in both scalar and list contexts
1564 PUSHs(&PL_sv_undef);
1565 else if (!io || !(fp = IoOFP(io))) {
1566 if (io && IoIFP(io))
1567 report_wrongway_fh(gv, '<');
1573 if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
1574 Perl_ck_warner(aTHX_ packWARN(WARN_IO), "page overflow");
1576 if (!do_print(PL_formtarget, fp))
1579 FmLINES(PL_formtarget) = 0;
1580 SvCUR_set(PL_formtarget, 0);
1581 *SvEND(PL_formtarget) = '\0';
1582 if (IoFLAGS(io) & IOf_FLUSH)
1583 (void)PerlIO_flush(fp);
1587 PL_formtarget = PL_bodytarget;
1593 dSP; dMARK; dORIGMARK;
1597 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
1598 IO *const io = GvIO(gv);
1600 /* Treat empty list as "" */
1601 if (MARK == SP) XPUSHs(&PL_sv_no);
1604 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1606 if (MARK == ORIGMARK) {
1609 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
1612 return Perl_tied_method(aTHX_ SV_CONST(PRINTF), mark - 1, MUTABLE_SV(io),
1614 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1621 SETERRNO(EBADF,RMS_IFI);
1624 else if (!(fp = IoOFP(io))) {
1626 report_wrongway_fh(gv, '<');
1627 else if (ckWARN(WARN_CLOSED))
1629 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
1633 SV *sv = sv_newmortal();
1634 do_sprintf(sv, SP - MARK, MARK + 1);
1635 if (!do_print(sv, fp))
1638 if (IoFLAGS(io) & IOf_FLUSH)
1639 if (PerlIO_flush(fp) == EOF)
1648 PUSHs(&PL_sv_undef);
1655 const int perm = (MAXARG > 3 && (TOPs || POPs)) ? POPi : 0666;
1656 const int mode = POPi;
1657 SV * const sv = POPs;
1658 GV * const gv = MUTABLE_GV(POPs);
1661 /* Need TIEHANDLE method ? */
1662 const char * const tmps = SvPV_const(sv, len);
1663 if (do_open_raw(gv, tmps, len, mode, perm)) {
1664 IoLINES(GvIOp(gv)) = 0;
1668 PUSHs(&PL_sv_undef);
1674 /* also used for: pp_read() and pp_recv() (where supported) */
1678 dSP; dMARK; dORIGMARK; dTARGET;
1692 bool charstart = FALSE;
1693 STRLEN charskip = 0;
1695 GV * const gv = MUTABLE_GV(*++MARK);
1698 if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD)
1699 && gv && (io = GvIO(gv)) )
1701 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1703 return Perl_tied_method(aTHX_ SV_CONST(READ), mark - 1, MUTABLE_SV(io), mg,
1704 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1714 length = SvIVx(*++MARK);
1716 DIE(aTHX_ "Negative length");
1719 offset = SvIVx(*++MARK);
1723 if (!io || !IoIFP(io)) {
1725 SETERRNO(EBADF,RMS_IFI);
1729 /* Note that fd can here validly be -1, don't check it yet. */
1730 fd = PerlIO_fileno(IoIFP(io));
1732 if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
1733 if (PL_op->op_type == OP_SYSREAD || PL_op->op_type == OP_RECV) {
1734 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1735 "%s() is deprecated on :utf8 handles. "
1736 "This will be a fatal error in Perl 5.30",
1739 buffer = SvPVutf8_force(bufsv, blen);
1740 /* UTF-8 may not have been set if they are all low bytes */
1745 buffer = SvPV_force(bufsv, blen);
1746 buffer_utf8 = !IN_BYTES && SvUTF8(bufsv);
1748 if (DO_UTF8(bufsv)) {
1749 blen = sv_len_utf8_nomg(bufsv);
1758 if (PL_op->op_type == OP_RECV) {
1759 Sock_size_t bufsize;
1760 char namebuf[MAXPATHLEN];
1762 SETERRNO(EBADF,SS_IVCHAN);
1765 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
1766 bufsize = sizeof (struct sockaddr_in);
1768 bufsize = sizeof namebuf;
1770 #ifdef OS2 /* At least Warp3+IAK: only the first byte of bufsize set */
1774 buffer = SvGROW(bufsv, (STRLEN)(length+1));
1775 /* 'offset' means 'flags' here */
1776 count = PerlSock_recvfrom(fd, buffer, length, offset,
1777 (struct sockaddr *)namebuf, &bufsize);
1780 /* MSG_TRUNC can give oversized count; quietly lose it */
1783 SvCUR_set(bufsv, count);
1784 *SvEND(bufsv) = '\0';
1785 (void)SvPOK_only(bufsv);
1789 /* This should not be marked tainted if the fp is marked clean */
1790 if (!(IoFLAGS(io) & IOf_UNTAINT))
1791 SvTAINTED_on(bufsv);
1793 #if defined(__CYGWIN__)
1794 /* recvfrom() on cygwin doesn't set bufsize at all for
1795 connected sockets, leaving us with trash in the returned
1796 name, so use the same test as the Win32 code to check if it
1797 wasn't set, and set it [perl #118843] */
1798 if (bufsize == sizeof namebuf)
1801 sv_setpvn(TARG, namebuf, bufsize);
1807 if (-offset > (SSize_t)blen)
1808 DIE(aTHX_ "Offset outside string");
1811 if (DO_UTF8(bufsv)) {
1812 /* convert offset-as-chars to offset-as-bytes */
1813 if (offset >= (SSize_t)blen)
1814 offset += SvCUR(bufsv) - blen;
1816 offset = utf8_hop((U8 *)buffer,offset) - (U8 *) buffer;
1820 /* Reestablish the fd in case it shifted from underneath us. */
1821 fd = PerlIO_fileno(IoIFP(io));
1823 orig_size = SvCUR(bufsv);
1824 /* Allocating length + offset + 1 isn't perfect in the case of reading
1825 bytes from a byte file handle into a UTF8 buffer, but it won't harm us
1827 (should be 2 * length + offset + 1, or possibly something longer if
1828 IN_ENCODING Is true) */
1829 buffer = SvGROW(bufsv, (STRLEN)(length+offset+1));
1830 if (offset > 0 && offset > (SSize_t)orig_size) { /* Zero any newly allocated space */
1831 Zero(buffer+orig_size, offset-orig_size, char);
1833 buffer = buffer + offset;
1835 read_target = bufsv;
1837 /* Best to read the bytes into a new SV, upgrade that to UTF8, then
1838 concatenate it to the current buffer. */
1840 /* Truncate the existing buffer to the start of where we will be
1842 SvCUR_set(bufsv, offset);
1844 read_target = sv_newmortal();
1845 SvUPGRADE(read_target, SVt_PV);
1846 buffer = SvGROW(read_target, (STRLEN)(length + 1));
1849 if (PL_op->op_type == OP_SYSREAD) {
1850 #ifdef PERL_SOCK_SYSREAD_IS_RECV
1851 if (IoTYPE(io) == IoTYPE_SOCKET) {
1853 SETERRNO(EBADF,SS_IVCHAN);
1857 count = PerlSock_recv(fd, buffer, length, 0);
1863 SETERRNO(EBADF,RMS_IFI);
1867 count = PerlLIO_read(fd, buffer, length);
1872 count = PerlIO_read(IoIFP(io), buffer, length);
1873 /* PerlIO_read() - like fread() returns 0 on both error and EOF */
1874 if (count == 0 && PerlIO_error(IoIFP(io)))
1878 if (IoTYPE(io) == IoTYPE_WRONLY)
1879 report_wrongway_fh(gv, '>');
1882 SvCUR_set(read_target, count+(buffer - SvPVX_const(read_target)));
1883 *SvEND(read_target) = '\0';
1884 (void)SvPOK_only(read_target);
1885 if (fp_utf8 && !IN_BYTES) {
1886 /* Look at utf8 we got back and count the characters */
1887 const char *bend = buffer + count;
1888 while (buffer < bend) {
1890 skip = UTF8SKIP(buffer);
1893 if (buffer - charskip + skip > bend) {
1894 /* partial character - try for rest of it */
1895 length = skip - (bend-buffer);
1896 offset = bend - SvPVX_const(bufsv);
1908 /* If we have not 'got' the number of _characters_ we 'wanted' get some more
1909 provided amount read (count) was what was requested (length)
1911 if (got < wanted && count == length) {
1912 length = wanted - got;
1913 offset = bend - SvPVX_const(bufsv);
1916 /* return value is character count */
1920 else if (buffer_utf8) {
1921 /* Let svcatsv upgrade the bytes we read in to utf8.
1922 The buffer is a mortal so will be freed soon. */
1923 sv_catsv_nomg(bufsv, read_target);
1926 /* This should not be marked tainted if the fp is marked clean */
1927 if (!(IoFLAGS(io) & IOf_UNTAINT))
1928 SvTAINTED_on(bufsv);
1939 /* also used for: pp_send() where defined */
1943 dSP; dMARK; dORIGMARK; dTARGET;
1948 STRLEN orig_blen_bytes;
1949 const int op_type = PL_op->op_type;
1952 GV *const gv = MUTABLE_GV(*++MARK);
1953 IO *const io = GvIO(gv);
1956 if (op_type == OP_SYSWRITE && io) {
1957 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1959 if (MARK == SP - 1) {
1961 mXPUSHi(sv_len(sv));
1965 return Perl_tied_method(aTHX_ SV_CONST(WRITE), mark - 1, MUTABLE_SV(io), mg,
1966 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1976 if (!io || !IoIFP(io) || IoTYPE(io) == IoTYPE_RDONLY) {
1978 if (io && IoIFP(io))
1979 report_wrongway_fh(gv, '<');
1982 SETERRNO(EBADF,RMS_IFI);
1985 fd = PerlIO_fileno(IoIFP(io));
1987 SETERRNO(EBADF,SS_IVCHAN);
1992 /* Do this first to trigger any overloading. */
1993 buffer = SvPV_const(bufsv, blen);
1994 orig_blen_bytes = blen;
1995 doing_utf8 = DO_UTF8(bufsv);
1997 if (PerlIO_isutf8(IoIFP(io))) {
1998 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1999 "%s() is deprecated on :utf8 handles. "
2000 "This will be a fatal error in Perl 5.30",
2002 if (!SvUTF8(bufsv)) {
2003 /* We don't modify the original scalar. */
2004 tmpbuf = bytes_to_utf8((const U8*) buffer, &blen);
2005 buffer = (char *) tmpbuf;
2009 else if (doing_utf8) {
2010 STRLEN tmplen = blen;
2011 U8 * const result = bytes_from_utf8((const U8*) buffer, &tmplen, &doing_utf8);
2014 buffer = (char *) tmpbuf;
2018 assert((char *)result == buffer);
2019 Perl_croak(aTHX_ "Wide character in %s", OP_DESC(PL_op));
2024 if (op_type == OP_SEND) {
2025 const int flags = SvIVx(*++MARK);
2028 char * const sockbuf = SvPVx(*++MARK, mlen);
2029 retval = PerlSock_sendto(fd, buffer, blen,
2030 flags, (struct sockaddr *)sockbuf, mlen);
2033 retval = PerlSock_send(fd, buffer, blen, flags);
2039 Size_t length = 0; /* This length is in characters. */
2045 /* The SV is bytes, and we've had to upgrade it. */
2046 blen_chars = orig_blen_bytes;
2048 /* The SV really is UTF-8. */
2049 /* Don't call sv_len_utf8 on a magical or overloaded
2050 scalar, as we might get back a different result. */
2051 blen_chars = sv_or_pv_len_utf8(bufsv, buffer, blen);
2058 length = blen_chars;
2060 #if Size_t_size > IVSIZE
2061 length = (Size_t)SvNVx(*++MARK);
2063 length = (Size_t)SvIVx(*++MARK);
2065 if ((SSize_t)length < 0) {
2067 DIE(aTHX_ "Negative length");
2072 offset = SvIVx(*++MARK);
2074 if (-offset > (IV)blen_chars) {
2076 DIE(aTHX_ "Offset outside string");
2078 offset += blen_chars;
2079 } else if (offset > (IV)blen_chars) {
2081 DIE(aTHX_ "Offset outside string");
2085 if (length > blen_chars - offset)
2086 length = blen_chars - offset;
2088 /* Here we convert length from characters to bytes. */
2089 if (tmpbuf || SvGMAGICAL(bufsv) || SvAMAGIC(bufsv)) {
2090 /* Either we had to convert the SV, or the SV is magical, or
2091 the SV has overloading, in which case we can't or mustn't
2092 or mustn't call it again. */
2094 buffer = (const char*)utf8_hop((const U8 *)buffer, offset);
2095 length = utf8_hop((U8 *)buffer, length) - (U8 *)buffer;
2097 /* It's a real UTF-8 SV, and it's not going to change under
2098 us. Take advantage of any cache. */
2100 I32 len_I32 = length;
2102 /* Convert the start and end character positions to bytes.
2103 Remember that the second argument to sv_pos_u2b is relative
2105 sv_pos_u2b(bufsv, &start, &len_I32);
2112 buffer = buffer+offset;
2114 #ifdef PERL_SOCK_SYSWRITE_IS_SEND
2115 if (IoTYPE(io) == IoTYPE_SOCKET) {
2116 retval = PerlSock_send(fd, buffer, length, 0);
2121 /* See the note at doio.c:do_print about filesize limits. --jhi */
2122 retval = PerlLIO_write(fd, buffer, length);
2130 retval = utf8_length((U8*)buffer, (U8*)buffer + retval);
2133 #if Size_t_size > IVSIZE
2153 * in Perl 5.12 and later, the additional parameter is a bitmask:
2156 * 2 = eof() <- ARGV magic
2158 * I'll rely on the compiler's trace flow analysis to decide whether to
2159 * actually assign this out here, or punt it into the only block where it is
2160 * used. Doing it out here is DRY on the condition logic.
2165 gv = PL_last_in_gv = MUTABLE_GV(POPs); /* eof(FH) */
2171 if (PL_op->op_flags & OPf_SPECIAL) {
2172 gv = PL_last_in_gv = GvEGVx(PL_argvgv); /* eof() - ARGV magic */
2176 gv = PL_last_in_gv; /* eof */
2184 if ((io = GvIO(gv)) && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) {
2185 return tied_method1(SV_CONST(EOF), SP, MUTABLE_SV(io), mg, newSVuv(which));
2188 if (!MAXARG && (PL_op->op_flags & OPf_SPECIAL)) { /* eof() */
2189 if (io && !IoIFP(io)) {
2190 if ((IoFLAGS(io) & IOf_START) && av_tindex(GvAVn(gv)) < 0) {
2193 IoFLAGS(io) &= ~IOf_START;
2194 do_open6(gv, "-", 1, NULL, NULL, 0);
2202 *svp = newSVpvs("-");
2204 else if (!nextargv(gv, FALSE))
2209 PUSHs(boolSV(do_eof(gv)));
2219 if (MAXARG != 0 && (TOPs || POPs))
2220 PL_last_in_gv = MUTABLE_GV(POPs);
2227 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2229 return tied_method0(SV_CONST(TELL), SP, MUTABLE_SV(io), mg);
2234 SETERRNO(EBADF,RMS_IFI);
2239 #if LSEEKSIZE > IVSIZE
2240 PUSHn( do_tell(gv) );
2242 PUSHi( do_tell(gv) );
2248 /* also used for: pp_seek() */
2253 const int whence = POPi;
2254 #if LSEEKSIZE > IVSIZE
2255 const Off_t offset = (Off_t)SvNVx(POPs);
2257 const Off_t offset = (Off_t)SvIVx(POPs);
2260 GV * const gv = PL_last_in_gv = MUTABLE_GV(POPs);
2261 IO *const io = GvIO(gv);
2264 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2266 #if LSEEKSIZE > IVSIZE
2267 SV *const offset_sv = newSVnv((NV) offset);
2269 SV *const offset_sv = newSViv(offset);
2272 return tied_method2(SV_CONST(SEEK), SP, MUTABLE_SV(io), mg, offset_sv,
2277 if (PL_op->op_type == OP_SEEK)
2278 PUSHs(boolSV(do_seek(gv, offset, whence)));
2280 const Off_t sought = do_sysseek(gv, offset, whence);
2282 PUSHs(&PL_sv_undef);
2284 SV* const sv = sought ?
2285 #if LSEEKSIZE > IVSIZE
2290 : newSVpvn(zero_but_true, ZBTLEN);
2300 /* There seems to be no consensus on the length type of truncate()
2301 * and ftruncate(), both off_t and size_t have supporters. In
2302 * general one would think that when using large files, off_t is
2303 * at least as wide as size_t, so using an off_t should be okay. */
2304 /* XXX Configure probe for the length type of *truncate() needed XXX */
2307 #if Off_t_size > IVSIZE
2312 /* Checking for length < 0 is problematic as the type might or
2313 * might not be signed: if it is not, clever compilers will moan. */
2314 /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
2317 SV * const sv = POPs;
2322 if (PL_op->op_flags & OPf_SPECIAL
2323 ? (tmpgv = gv_fetchsv(sv, 0, SVt_PVIO), 1)
2324 : !!(tmpgv = MAYBE_DEREF_GV(sv)) ) {
2331 TAINT_PROPER("truncate");
2332 if (!(fp = IoIFP(io))) {
2336 int fd = PerlIO_fileno(fp);
2338 SETERRNO(EBADF,RMS_IFI);
2342 SETERRNO(EINVAL, LIB_INVARG);
2347 if (ftruncate(fd, len) < 0)
2349 if (my_chsize(fd, len) < 0)
2357 else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2358 io = MUTABLE_IO(SvRV(sv)); /* *main::FRED{IO} for example */
2359 goto do_ftruncate_io;
2362 const char * const name = SvPV_nomg_const_nolen(sv);
2363 TAINT_PROPER("truncate");
2365 if (truncate(name, len) < 0)
2372 #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
2373 mode |= O_LARGEFILE; /* Transparently largefiley. */
2376 /* On open(), the Win32 CRT tries to seek around text
2377 * files using 32-bit offsets, which causes the open()
2378 * to fail on large files, so open in binary mode.
2382 tmpfd = PerlLIO_open(name, mode);
2387 if (my_chsize(tmpfd, len) < 0)
2389 PerlLIO_close(tmpfd);
2398 SETERRNO(EBADF,RMS_IFI);
2404 /* also used for: pp_fcntl() */
2409 SV * const argsv = POPs;
2410 const unsigned int func = POPu;
2412 GV * const gv = MUTABLE_GV(POPs);
2413 IO * const io = GvIOn(gv);
2419 SETERRNO(EBADF,RMS_IFI); /* well, sort of... */
2423 if (SvPOK(argsv) || !SvNIOK(argsv)) {
2426 s = SvPV_force(argsv, len);
2427 need = IOCPARM_LEN(func);
2429 s = Sv_Grow(argsv, need + 1);
2430 SvCUR_set(argsv, need);
2433 s[SvCUR(argsv)] = 17; /* a little sanity check here */
2436 retval = SvIV(argsv);
2437 s = INT2PTR(char*,retval); /* ouch */
2440 optype = PL_op->op_type;
2441 TAINT_PROPER(PL_op_desc[optype]);
2443 if (optype == OP_IOCTL)
2445 retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
2447 DIE(aTHX_ "ioctl is not implemented");
2451 DIE(aTHX_ "fcntl is not implemented");
2453 #if defined(OS2) && defined(__EMX__)
2454 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
2456 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, s);
2460 #if defined(HAS_IOCTL) || defined(HAS_FCNTL)
2462 if (s[SvCUR(argsv)] != 17)
2463 DIE(aTHX_ "Possible memory corruption: %s overflowed 3rd argument",
2465 s[SvCUR(argsv)] = 0; /* put our null back */
2466 SvSETMAGIC(argsv); /* Assume it has changed */
2475 PUSHp(zero_but_true, ZBTLEN);
2486 const int argtype = POPi;
2487 GV * const gv = MUTABLE_GV(POPs);
2488 IO *const io = GvIO(gv);
2489 PerlIO *const fp = io ? IoIFP(io) : NULL;
2491 /* XXX Looks to me like io is always NULL at this point */
2493 (void)PerlIO_flush(fp);
2494 value = (I32)(PerlLIO_flock(PerlIO_fileno(fp), argtype) >= 0);
2499 SETERRNO(EBADF,RMS_IFI);
2504 DIE(aTHX_ PL_no_func, "flock");
2515 const int protocol = POPi;
2516 const int type = POPi;
2517 const int domain = POPi;
2518 GV * const gv = MUTABLE_GV(POPs);
2519 IO * const io = GvIOn(gv);
2523 do_close(gv, FALSE);
2525 TAINT_PROPER("socket");
2526 fd = PerlSock_socket(domain, type, protocol);
2530 IoIFP(io) = PerlIO_fdopen(fd, "r" SOCKET_OPEN_MODE); /* stdio gets confused about sockets */
2531 IoOFP(io) = PerlIO_fdopen(fd, "w" SOCKET_OPEN_MODE);
2532 IoTYPE(io) = IoTYPE_SOCKET;
2533 if (!IoIFP(io) || !IoOFP(io)) {
2534 if (IoIFP(io)) PerlIO_close(IoIFP(io));
2535 if (IoOFP(io)) PerlIO_close(IoOFP(io));
2536 if (!IoIFP(io) && !IoOFP(io)) PerlLIO_close(fd);
2539 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2540 /* ensure close-on-exec */
2541 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2551 #if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
2554 const int protocol = POPi;
2555 const int type = POPi;
2556 const int domain = POPi;
2558 GV * const gv2 = MUTABLE_GV(POPs);
2559 IO * const io2 = GvIOn(gv2);
2560 GV * const gv1 = MUTABLE_GV(POPs);
2561 IO * const io1 = GvIOn(gv1);
2564 do_close(gv1, FALSE);
2566 do_close(gv2, FALSE);
2568 TAINT_PROPER("socketpair");
2569 if (PerlSock_socketpair(domain, type, protocol, fd) < 0)
2571 IoIFP(io1) = PerlIO_fdopen(fd[0], "r" SOCKET_OPEN_MODE);
2572 IoOFP(io1) = PerlIO_fdopen(fd[0], "w" SOCKET_OPEN_MODE);
2573 IoTYPE(io1) = IoTYPE_SOCKET;
2574 IoIFP(io2) = PerlIO_fdopen(fd[1], "r" SOCKET_OPEN_MODE);
2575 IoOFP(io2) = PerlIO_fdopen(fd[1], "w" SOCKET_OPEN_MODE);
2576 IoTYPE(io2) = IoTYPE_SOCKET;
2577 if (!IoIFP(io1) || !IoOFP(io1) || !IoIFP(io2) || !IoOFP(io2)) {
2578 if (IoIFP(io1)) PerlIO_close(IoIFP(io1));
2579 if (IoOFP(io1)) PerlIO_close(IoOFP(io1));
2580 if (!IoIFP(io1) && !IoOFP(io1)) PerlLIO_close(fd[0]);
2581 if (IoIFP(io2)) PerlIO_close(IoIFP(io2));
2582 if (IoOFP(io2)) PerlIO_close(IoOFP(io2));
2583 if (!IoIFP(io2) && !IoOFP(io2)) PerlLIO_close(fd[1]);
2586 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2587 /* ensure close-on-exec */
2588 if ((fd[0] > PL_maxsysfd && fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) ||
2589 (fd[1] > PL_maxsysfd && fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0))
2595 DIE(aTHX_ PL_no_sock_func, "socketpair");
2601 /* also used for: pp_connect() */
2606 SV * const addrsv = POPs;
2607 /* OK, so on what platform does bind modify addr? */
2609 GV * const gv = MUTABLE_GV(POPs);
2610 IO * const io = GvIOn(gv);
2617 fd = PerlIO_fileno(IoIFP(io));
2621 addr = SvPV_const(addrsv, len);
2622 op_type = PL_op->op_type;
2623 TAINT_PROPER(PL_op_desc[op_type]);
2624 if ((op_type == OP_BIND
2625 ? PerlSock_bind(fd, (struct sockaddr *)addr, len)
2626 : PerlSock_connect(fd, (struct sockaddr *)addr, len))
2634 SETERRNO(EBADF,SS_IVCHAN);
2641 const int backlog = POPi;
2642 GV * const gv = MUTABLE_GV(POPs);
2643 IO * const io = GvIOn(gv);
2648 if (PerlSock_listen(PerlIO_fileno(IoIFP(io)), backlog) >= 0)
2655 SETERRNO(EBADF,SS_IVCHAN);
2663 char namebuf[MAXPATHLEN];
2664 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
2665 Sock_size_t len = sizeof (struct sockaddr_in);
2667 Sock_size_t len = sizeof namebuf;
2669 GV * const ggv = MUTABLE_GV(POPs);
2670 GV * const ngv = MUTABLE_GV(POPs);
2673 IO * const gstio = GvIO(ggv);
2674 if (!gstio || !IoIFP(gstio))
2678 fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *) namebuf, &len);
2681 /* Some platforms indicate zero length when an AF_UNIX client is
2682 * not bound. Simulate a non-zero-length sockaddr structure in
2684 namebuf[0] = 0; /* sun_len */
2685 namebuf[1] = AF_UNIX; /* sun_family */
2693 do_close(ngv, FALSE);
2694 IoIFP(nstio) = PerlIO_fdopen(fd, "r" SOCKET_OPEN_MODE);
2695 IoOFP(nstio) = PerlIO_fdopen(fd, "w" SOCKET_OPEN_MODE);
2696 IoTYPE(nstio) = IoTYPE_SOCKET;
2697 if (!IoIFP(nstio) || !IoOFP(nstio)) {
2698 if (IoIFP(nstio)) PerlIO_close(IoIFP(nstio));
2699 if (IoOFP(nstio)) PerlIO_close(IoOFP(nstio));
2700 if (!IoIFP(nstio) && !IoOFP(nstio)) PerlLIO_close(fd);
2703 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2704 /* ensure close-on-exec */
2705 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2709 #ifdef __SCO_VERSION__
2710 len = sizeof (struct sockaddr_in); /* OpenUNIX 8 somehow truncates info */
2713 PUSHp(namebuf, len);
2717 report_evil_fh(ggv);
2718 SETERRNO(EBADF,SS_IVCHAN);
2728 const int how = POPi;
2729 GV * const gv = MUTABLE_GV(POPs);
2730 IO * const io = GvIOn(gv);
2735 PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
2740 SETERRNO(EBADF,SS_IVCHAN);
2745 /* also used for: pp_gsockopt() */
2750 const int optype = PL_op->op_type;
2751 SV * const sv = (optype == OP_GSOCKOPT) ? sv_2mortal(newSV(257)) : POPs;
2752 const unsigned int optname = (unsigned int) POPi;
2753 const unsigned int lvl = (unsigned int) POPi;
2754 GV * const gv = MUTABLE_GV(POPs);
2755 IO * const io = GvIOn(gv);
2762 fd = PerlIO_fileno(IoIFP(io));
2768 (void)SvPOK_only(sv);
2772 if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
2775 /* XXX Configure test: does getsockopt set the length properly? */
2784 #if defined(__SYMBIAN32__)
2785 # define SETSOCKOPT_OPTION_VALUE_T void *
2787 # define SETSOCKOPT_OPTION_VALUE_T const char *
2789 /* XXX TODO: We need to have a proper type (a Configure probe,
2790 * etc.) for what the C headers think of the third argument of
2791 * setsockopt(), the option_value read-only buffer: is it
2792 * a "char *", or a "void *", const or not. Some compilers
2793 * don't take kindly to e.g. assuming that "char *" implicitly
2794 * promotes to a "void *", or to explicitly promoting/demoting
2795 * consts to non/vice versa. The "const void *" is the SUS
2796 * definition, but that does not fly everywhere for the above
2798 SETSOCKOPT_OPTION_VALUE_T buf;
2802 buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
2806 aint = (int)SvIV(sv);
2807 buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
2810 if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
2820 SETERRNO(EBADF,SS_IVCHAN);
2827 /* also used for: pp_getsockname() */
2832 const int optype = PL_op->op_type;
2833 GV * const gv = MUTABLE_GV(POPs);
2834 IO * const io = GvIOn(gv);
2842 sv = sv_2mortal(newSV(257));
2843 (void)SvPOK_only(sv);
2847 fd = PerlIO_fileno(IoIFP(io));
2851 case OP_GETSOCKNAME:
2852 if (PerlSock_getsockname(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2855 case OP_GETPEERNAME:
2856 if (PerlSock_getpeername(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2858 #if defined(VMS_DO_SOCKETS) && defined (DECCRTL_SOCKETS)
2860 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";
2861 /* If the call succeeded, make sure we don't have a zeroed port/addr */
2862 if (((struct sockaddr *)SvPVX_const(sv))->sa_family == AF_INET &&
2863 !memcmp(SvPVX_const(sv) + sizeof(u_short), nowhere,
2864 sizeof(u_short) + sizeof(struct in_addr))) {
2871 #ifdef BOGUS_GETNAME_RETURN
2872 /* Interactive Unix, getpeername() and getsockname()
2873 does not return valid namelen */
2874 if (len == BOGUS_GETNAME_RETURN)
2875 len = sizeof(struct sockaddr);
2884 SETERRNO(EBADF,SS_IVCHAN);
2893 /* also used for: pp_lstat() */
2904 if (PL_op->op_flags & OPf_REF ? (gv = cGVOP_gv, 1)
2905 : !!(sv=POPs, gv = MAYBE_DEREF_GV(sv))) {
2906 if (PL_op->op_type == OP_LSTAT) {
2907 if (gv != PL_defgv) {
2908 do_fstat_warning_check:
2909 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
2910 "lstat() on filehandle%s%" SVf,
2913 ? sv_2mortal(newSVhek(GvENAME_HEK(gv)))
2915 } else if (PL_laststype != OP_LSTAT)
2916 /* diag_listed_as: The stat preceding %s wasn't an lstat */
2917 Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat");
2920 if (gv != PL_defgv) {
2924 PL_laststype = OP_STAT;
2925 PL_statgv = gv ? gv : (GV *)io;
2926 SvPVCLEAR(PL_statname);
2932 int fd = PerlIO_fileno(IoIFP(io));
2934 PL_laststatval = -1;
2935 SETERRNO(EBADF,RMS_IFI);
2937 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
2940 } else if (IoDIRP(io)) {
2942 PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache);
2945 PL_laststatval = -1;
2948 else PL_laststatval = -1;
2949 if (PL_laststatval < 0 && !havefp) report_evil_fh(gv);
2952 if (PL_laststatval < 0) {
2958 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2959 io = MUTABLE_IO(SvRV(sv));
2960 if (PL_op->op_type == OP_LSTAT)
2961 goto do_fstat_warning_check;
2962 goto do_fstat_have_io;
2965 SvTAINTED_off(PL_statname); /* previous tainting irrelevant */
2966 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
2968 PL_laststype = PL_op->op_type;
2969 file = SvPV_nolen_const(PL_statname);
2970 if (PL_op->op_type == OP_LSTAT)
2971 PL_laststatval = PerlLIO_lstat(file, &PL_statcache);
2973 PL_laststatval = PerlLIO_stat(file, &PL_statcache);
2974 if (PL_laststatval < 0) {
2975 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
2976 /* PL_warn_nl is constant */
2977 GCC_DIAG_IGNORE(-Wformat-nonliteral);
2978 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
2986 if (gimme != G_ARRAY) {
2987 if (gimme != G_VOID)
2988 XPUSHs(boolSV(max));
2994 mPUSHi(PL_statcache.st_dev);
2995 #if ST_INO_SIZE > IVSIZE
2996 mPUSHn(PL_statcache.st_ino);
2998 # if ST_INO_SIGN <= 0
2999 mPUSHi(PL_statcache.st_ino);
3001 mPUSHu(PL_statcache.st_ino);
3004 mPUSHu(PL_statcache.st_mode);
3005 mPUSHu(PL_statcache.st_nlink);
3007 sv_setuid(PUSHmortal, PL_statcache.st_uid);
3008 sv_setgid(PUSHmortal, PL_statcache.st_gid);
3010 #ifdef USE_STAT_RDEV
3011 mPUSHi(PL_statcache.st_rdev);
3013 PUSHs(newSVpvs_flags("", SVs_TEMP));
3015 #if Off_t_size > IVSIZE
3016 mPUSHn(PL_statcache.st_size);
3018 mPUSHi(PL_statcache.st_size);
3021 mPUSHn(PL_statcache.st_atime);
3022 mPUSHn(PL_statcache.st_mtime);
3023 mPUSHn(PL_statcache.st_ctime);
3025 mPUSHi(PL_statcache.st_atime);
3026 mPUSHi(PL_statcache.st_mtime);
3027 mPUSHi(PL_statcache.st_ctime);
3029 #ifdef USE_STAT_BLOCKS
3030 mPUSHu(PL_statcache.st_blksize);
3031 mPUSHu(PL_statcache.st_blocks);
3033 PUSHs(newSVpvs_flags("", SVs_TEMP));
3034 PUSHs(newSVpvs_flags("", SVs_TEMP));
3040 /* All filetest ops avoid manipulating the perl stack pointer in their main
3041 bodies (since commit d2c4d2d1e22d3125), and return using either
3042 S_ft_return_false() or S_ft_return_true(). These two helper functions are
3043 the only two which manipulate the perl stack. To ensure that no stack
3044 manipulation macros are used, the filetest ops avoid defining a local copy
3045 of the stack pointer with dSP. */
3047 /* If the next filetest is stacked up with this one
3048 (PL_op->op_private & OPpFT_STACKING), we leave
3049 the original argument on the stack for success,
3050 and skip the stacked operators on failure.
3051 The next few macros/functions take care of this.
3055 S_ft_return_false(pTHX_ SV *ret) {
3059 if (PL_op->op_flags & OPf_REF) XPUSHs(ret);
3063 if (PL_op->op_private & OPpFT_STACKING) {
3064 while (OP_IS_FILETEST(next->op_type)
3065 && next->op_private & OPpFT_STACKED)
3066 next = next->op_next;
3071 PERL_STATIC_INLINE OP *
3072 S_ft_return_true(pTHX_ SV *ret) {
3074 if (PL_op->op_flags & OPf_REF)
3075 XPUSHs(PL_op->op_private & OPpFT_STACKING ? (SV *)cGVOP_gv : (ret));
3076 else if (!(PL_op->op_private & OPpFT_STACKING))
3082 #define FT_RETURNNO return S_ft_return_false(aTHX_ &PL_sv_no)
3083 #define FT_RETURNUNDEF return S_ft_return_false(aTHX_ &PL_sv_undef)
3084 #define FT_RETURNYES return S_ft_return_true(aTHX_ &PL_sv_yes)
3086 #define tryAMAGICftest_MG(chr) STMT_START { \
3087 if ( (SvFLAGS(*PL_stack_sp) & (SVf_ROK|SVs_GMG)) \
3088 && PL_op->op_flags & OPf_KIDS) { \
3089 OP *next = S_try_amagic_ftest(aTHX_ chr); \
3090 if (next) return next; \
3095 S_try_amagic_ftest(pTHX_ char chr) {
3096 SV *const arg = *PL_stack_sp;
3099 if (!(PL_op->op_private & OPpFT_STACKING)) SvGETMAGIC(arg);
3103 const char tmpchr = chr;
3104 SV * const tmpsv = amagic_call(arg,
3105 newSVpvn_flags(&tmpchr, 1, SVs_TEMP),
3106 ftest_amg, AMGf_unary);
3111 return SvTRUE(tmpsv)
3112 ? S_ft_return_true(aTHX_ tmpsv) : S_ft_return_false(aTHX_ tmpsv);
3118 /* also used for: pp_fteexec() pp_fteread() pp_ftewrite() pp_ftrexec()
3124 /* Not const, because things tweak this below. Not bool, because there's
3125 no guarantee that OPpFT_ACCESS is <= CHAR_MAX */
3126 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3127 I32 use_access = PL_op->op_private & OPpFT_ACCESS;
3128 /* Giving some sort of initial value silences compilers. */
3130 int access_mode = R_OK;
3132 int access_mode = 0;
3135 /* access_mode is never used, but leaving use_access in makes the
3136 conditional compiling below much clearer. */
3139 Mode_t stat_mode = S_IRUSR;
3141 bool effective = FALSE;
3144 switch (PL_op->op_type) {
3145 case OP_FTRREAD: opchar = 'R'; break;
3146 case OP_FTRWRITE: opchar = 'W'; break;
3147 case OP_FTREXEC: opchar = 'X'; break;
3148 case OP_FTEREAD: opchar = 'r'; break;
3149 case OP_FTEWRITE: opchar = 'w'; break;
3150 case OP_FTEEXEC: opchar = 'x'; break;
3152 tryAMAGICftest_MG(opchar);
3154 switch (PL_op->op_type) {
3156 #if !(defined(HAS_ACCESS) && defined(R_OK))
3162 #if defined(HAS_ACCESS) && defined(W_OK)
3167 stat_mode = S_IWUSR;
3171 #if defined(HAS_ACCESS) && defined(X_OK)
3176 stat_mode = S_IXUSR;
3180 #ifdef PERL_EFF_ACCESS
3183 stat_mode = S_IWUSR;
3187 #ifndef PERL_EFF_ACCESS
3194 #ifdef PERL_EFF_ACCESS
3199 stat_mode = S_IXUSR;
3205 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3206 const char *name = SvPV_nolen(*PL_stack_sp);
3208 # ifdef PERL_EFF_ACCESS
3209 result = PERL_EFF_ACCESS(name, access_mode);
3211 DIE(aTHX_ "panic: attempt to call PERL_EFF_ACCESS in %s",
3217 result = access(name, access_mode);
3219 DIE(aTHX_ "panic: attempt to call access() in %s", OP_NAME(PL_op));
3230 result = my_stat_flags(0);
3233 if (cando(stat_mode, effective, &PL_statcache))
3239 /* also used for: pp_ftatime() pp_ftctime() pp_ftmtime() pp_ftsize() */
3244 const int op_type = PL_op->op_type;
3248 case OP_FTIS: opchar = 'e'; break;
3249 case OP_FTSIZE: opchar = 's'; break;
3250 case OP_FTMTIME: opchar = 'M'; break;
3251 case OP_FTCTIME: opchar = 'C'; break;
3252 case OP_FTATIME: opchar = 'A'; break;
3254 tryAMAGICftest_MG(opchar);
3256 result = my_stat_flags(0);
3259 if (op_type == OP_FTIS)
3262 /* You can't dTARGET inside OP_FTIS, because you'll get
3263 "panic: pad_sv po" - the op is not flagged to have a target. */
3267 #if Off_t_size > IVSIZE
3268 sv_setnv(TARG, (NV)PL_statcache.st_size);
3270 sv_setiv(TARG, (IV)PL_statcache.st_size);
3275 ((NV)PL_basetime - PL_statcache.st_mtime) / 86400.0 );
3279 ((NV)PL_basetime - PL_statcache.st_atime) / 86400.0 );
3283 ((NV)PL_basetime - PL_statcache.st_ctime) / 86400.0 );
3287 return SvTRUE_nomg(TARG)
3288 ? S_ft_return_true(aTHX_ TARG) : S_ft_return_false(aTHX_ TARG);
3293 /* also used for: pp_ftblk() pp_ftchr() pp_ftdir() pp_fteowned()
3294 * pp_ftfile() pp_ftpipe() pp_ftsgid() pp_ftsock()
3295 * pp_ftsuid() pp_ftsvtx() pp_ftzero() */
3302 switch (PL_op->op_type) {
3303 case OP_FTROWNED: opchar = 'O'; break;
3304 case OP_FTEOWNED: opchar = 'o'; break;
3305 case OP_FTZERO: opchar = 'z'; break;
3306 case OP_FTSOCK: opchar = 'S'; break;
3307 case OP_FTCHR: opchar = 'c'; break;
3308 case OP_FTBLK: opchar = 'b'; break;
3309 case OP_FTFILE: opchar = 'f'; break;
3310 case OP_FTDIR: opchar = 'd'; break;
3311 case OP_FTPIPE: opchar = 'p'; break;
3312 case OP_FTSUID: opchar = 'u'; break;
3313 case OP_FTSGID: opchar = 'g'; break;
3314 case OP_FTSVTX: opchar = 'k'; break;
3316 tryAMAGICftest_MG(opchar);
3318 /* I believe that all these three are likely to be defined on most every
3319 system these days. */
3321 if(PL_op->op_type == OP_FTSUID) {
3326 if(PL_op->op_type == OP_FTSGID) {
3331 if(PL_op->op_type == OP_FTSVTX) {
3336 result = my_stat_flags(0);
3339 switch (PL_op->op_type) {
3341 if (PL_statcache.st_uid == PerlProc_getuid())
3345 if (PL_statcache.st_uid == PerlProc_geteuid())
3349 if (PL_statcache.st_size == 0)
3353 if (S_ISSOCK(PL_statcache.st_mode))
3357 if (S_ISCHR(PL_statcache.st_mode))
3361 if (S_ISBLK(PL_statcache.st_mode))
3365 if (S_ISREG(PL_statcache.st_mode))
3369 if (S_ISDIR(PL_statcache.st_mode))
3373 if (S_ISFIFO(PL_statcache.st_mode))
3378 if (PL_statcache.st_mode & S_ISUID)
3384 if (PL_statcache.st_mode & S_ISGID)
3390 if (PL_statcache.st_mode & S_ISVTX)
3402 tryAMAGICftest_MG('l');
3403 result = my_lstat_flags(0);
3407 if (S_ISLNK(PL_statcache.st_mode))
3420 tryAMAGICftest_MG('t');
3422 if (PL_op->op_flags & OPf_REF)
3425 SV *tmpsv = *PL_stack_sp;
3426 if (!(gv = MAYBE_DEREF_GV_nomg(tmpsv))) {
3427 name = SvPV_nomg(tmpsv, namelen);
3428 gv = gv_fetchpvn_flags(name, namelen, SvUTF8(tmpsv), SVt_PVIO);
3432 if (GvIO(gv) && IoIFP(GvIOp(gv)))
3433 fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
3434 else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX)
3439 SETERRNO(EBADF,RMS_IFI);
3442 if (PerlLIO_isatty(fd))
3448 /* also used for: pp_ftbinary() */
3462 tryAMAGICftest_MG(PL_op->op_type == OP_FTTEXT ? 'T' : 'B');
3464 if (PL_op->op_flags & OPf_REF)
3466 else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
3471 gv = MAYBE_DEREF_GV_nomg(sv);
3475 if (gv == PL_defgv) {
3477 io = SvTYPE(PL_statgv) == SVt_PVIO
3481 goto really_filename;
3486 SvPVCLEAR(PL_statname);
3487 io = GvIO(PL_statgv);
3489 PL_laststatval = -1;
3490 PL_laststype = OP_STAT;
3491 if (io && IoIFP(io)) {
3493 if (! PerlIO_has_base(IoIFP(io)))
3494 DIE(aTHX_ "-T and -B not implemented on filehandles");
3495 fd = PerlIO_fileno(IoIFP(io));
3497 SETERRNO(EBADF,RMS_IFI);
3500 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3501 if (PL_laststatval < 0)
3503 if (S_ISDIR(PL_statcache.st_mode)) { /* handle NFS glitch */
3504 if (PL_op->op_type == OP_FTTEXT)
3509 if (PerlIO_get_cnt(IoIFP(io)) <= 0) {
3510 i = PerlIO_getc(IoIFP(io));
3512 (void)PerlIO_ungetc(IoIFP(io),i);
3514 /* null file is anything */
3517 len = PerlIO_get_bufsiz(IoIFP(io));
3518 s = (STDCHAR *) PerlIO_get_base(IoIFP(io));
3519 /* sfio can have large buffers - limit to 512 */
3524 SETERRNO(EBADF,RMS_IFI);
3526 SETERRNO(EBADF,RMS_IFI);
3535 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
3537 file = SvPVX_const(PL_statname);
3539 if (!(fp = PerlIO_open(file, "r"))) {
3541 PL_laststatval = -1;
3542 PL_laststype = OP_STAT;
3544 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
3545 /* PL_warn_nl is constant */
3546 GCC_DIAG_IGNORE(-Wformat-nonliteral);
3547 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open");
3552 PL_laststype = OP_STAT;
3553 fd = PerlIO_fileno(fp);
3555 (void)PerlIO_close(fp);
3556 SETERRNO(EBADF,RMS_IFI);
3559 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3560 if (PL_laststatval < 0) {
3562 (void)PerlIO_close(fp);
3566 PerlIO_binmode(aTHX_ fp, '<', O_BINARY, NULL);
3567 len = PerlIO_read(fp, tbuf, sizeof(tbuf));
3568 (void)PerlIO_close(fp);
3570 if (S_ISDIR(PL_statcache.st_mode) && PL_op->op_type == OP_FTTEXT)
3571 FT_RETURNNO; /* special case NFS directories */
3572 FT_RETURNYES; /* null file is anything */
3577 /* now scan s to look for textiness */
3579 #if defined(DOSISH) || defined(USEMYBINMODE)
3580 /* ignore trailing ^Z on short files */
3581 if (len && len < (I32)sizeof(tbuf) && tbuf[len-1] == 26)
3586 if (! is_utf8_invariant_string((U8 *) s, len)) {
3588 /* Here contains a variant under UTF-8 . See if the entire string is
3590 if (is_utf8_fixed_width_buf_flags((U8 *) s, len, 0)) {
3591 if (PL_op->op_type == OP_FTTEXT) {
3600 /* Here, is not UTF-8 or is entirely ASCII. Look through the buffer for
3601 * things that wouldn't be in ASCII text or rich ASCII text. Count these
3603 for (i = 0; i < len; i++, s++) {
3604 if (!*s) { /* null never allowed in text */
3608 #ifdef USE_LOCALE_CTYPE
3609 if (IN_LC_RUNTIME(LC_CTYPE)) {
3610 if ( isPRINT_LC(*s) || isSPACE_LC(*s)) {
3617 /* VT occurs so rarely in text, that we consider it odd */
3618 || (isSPACE_A(*s) && *s != VT_NATIVE)
3620 /* But there is a fair amount of backspaces and escapes in
3623 || *s == ESC_NATIVE)
3630 if ((odd * 3 > len) == (PL_op->op_type == OP_FTTEXT)) /* allow 1/3 odd */
3641 const char *tmps = NULL;
3645 SV * const sv = POPs;
3646 if (PL_op->op_flags & OPf_SPECIAL) {
3647 gv = gv_fetchsv(sv, 0, SVt_PVIO);
3649 if (ckWARN(WARN_UNOPENED)) {
3650 Perl_warner(aTHX_ packWARN(WARN_UNOPENED),
3651 "chdir() on unopened filehandle %" SVf, sv);
3653 SETERRNO(EBADF,RMS_IFI);
3655 TAINT_PROPER("chdir");
3659 else if (!(gv = MAYBE_DEREF_GV(sv)))
3660 tmps = SvPV_nomg_const_nolen(sv);
3663 HV * const table = GvHVn(PL_envgv);
3667 if ( (svp = hv_fetchs(table, "HOME", FALSE))
3668 || (svp = hv_fetchs(table, "LOGDIR", FALSE))
3670 || (svp = hv_fetchs(table, "SYS$LOGIN", FALSE))
3674 tmps = SvPV_nolen_const(*svp);
3678 SETERRNO(EINVAL, LIB_INVARG);
3679 TAINT_PROPER("chdir");
3684 TAINT_PROPER("chdir");
3687 IO* const io = GvIO(gv);
3690 PUSHi(fchdir(my_dirfd(IoDIRP(io))) >= 0);
3691 } else if (IoIFP(io)) {
3692 int fd = PerlIO_fileno(IoIFP(io));
3696 PUSHi(fchdir(fd) >= 0);
3706 DIE(aTHX_ PL_no_func, "fchdir");
3710 PUSHi( PerlDir_chdir(tmps) >= 0 );
3712 /* Clear the DEFAULT element of ENV so we'll get the new value
3714 hv_delete(GvHVn(PL_envgv),"DEFAULT",7,G_DISCARD);
3721 SETERRNO(EBADF,RMS_IFI);
3728 /* also used for: pp_chmod() pp_kill() pp_unlink() pp_utime() */
3732 dSP; dMARK; dTARGET;
3733 const I32 value = (I32)apply(PL_op->op_type, MARK, SP);
3744 char * const tmps = POPpx;
3745 TAINT_PROPER("chroot");
3746 PUSHi( chroot(tmps) >= 0 );
3749 DIE(aTHX_ PL_no_func, "chroot");
3760 const char * const tmps2 = POPpconstx;
3761 const char * const tmps = SvPV_nolen_const(TOPs);
3762 TAINT_PROPER("rename");
3764 anum = PerlLIO_rename(tmps, tmps2);
3766 if (!(anum = PerlLIO_stat(tmps, &statbuf))) {
3767 if (same_dirent(tmps2, tmps)) /* can always rename to same name */
3770 if (PerlProc_geteuid() || PerlLIO_stat(tmps2, &statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
3771 (void)UNLINK(tmps2);
3772 if (!(anum = link(tmps, tmps2)))
3773 anum = UNLINK(tmps);
3782 /* also used for: pp_symlink() */
3784 #if defined(HAS_LINK) || defined(HAS_SYMLINK)
3788 const int op_type = PL_op->op_type;
3792 if (op_type == OP_LINK)
3793 DIE(aTHX_ PL_no_func, "link");
3795 # ifndef HAS_SYMLINK
3796 if (op_type == OP_SYMLINK)
3797 DIE(aTHX_ PL_no_func, "symlink");
3801 const char * const tmps2 = POPpconstx;
3802 const char * const tmps = SvPV_nolen_const(TOPs);
3803 TAINT_PROPER(PL_op_desc[op_type]);
3805 # if defined(HAS_LINK)
3806 # if defined(HAS_SYMLINK)
3807 /* Both present - need to choose which. */
3808 (op_type == OP_LINK) ?
3809 PerlLIO_link(tmps, tmps2) : symlink(tmps, tmps2);
3811 /* Only have link, so calls to pp_symlink will have DIE()d above. */
3812 PerlLIO_link(tmps, tmps2);
3815 # if defined(HAS_SYMLINK)
3816 /* Only have symlink, so calls to pp_link will have DIE()d above. */
3817 symlink(tmps, tmps2);
3822 SETi( result >= 0 );
3827 /* also used for: pp_symlink() */
3832 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
3842 char buf[MAXPATHLEN];
3847 /* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
3848 * it is impossible to know whether the result was truncated. */
3849 len = readlink(tmps, buf, sizeof(buf) - 1);
3858 RETSETUNDEF; /* just pretend it's a normal file */
3862 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
3864 S_dooneliner(pTHX_ const char *cmd, const char *filename)
3866 char * const save_filename = filename;
3871 Size_t size = strlen(cmd) + (strlen(filename) * 2) + 10;
3873 PERL_ARGS_ASSERT_DOONELINER;
3875 Newx(cmdline, size, char);
3876 my_strlcpy(cmdline, cmd, size);
3877 my_strlcat(cmdline, " ", size);
3878 for (s = cmdline + strlen(cmdline); *filename; ) {
3882 if (s - cmdline < size)
3883 my_strlcpy(s, " 2>&1", size - (s - cmdline));
3884 myfp = PerlProc_popen(cmdline, "r");
3888 SV * const tmpsv = sv_newmortal();
3889 /* Need to save/restore 'PL_rs' ?? */
3890 s = sv_gets(tmpsv, myfp, 0);
3891 (void)PerlProc_pclose(myfp);
3895 #ifdef HAS_SYS_ERRLIST
3900 /* you don't see this */
3901 const char * const errmsg = Strerror(e) ;
3904 if (instr(s, errmsg)) {
3911 #define EACCES EPERM
3913 if (instr(s, "cannot make"))
3914 SETERRNO(EEXIST,RMS_FEX);
3915 else if (instr(s, "existing file"))
3916 SETERRNO(EEXIST,RMS_FEX);
3917 else if (instr(s, "ile exists"))
3918 SETERRNO(EEXIST,RMS_FEX);
3919 else if (instr(s, "non-exist"))
3920 SETERRNO(ENOENT,RMS_FNF);
3921 else if (instr(s, "does not exist"))
3922 SETERRNO(ENOENT,RMS_FNF);
3923 else if (instr(s, "not empty"))
3924 SETERRNO(EBUSY,SS_DEVOFFLINE);
3925 else if (instr(s, "cannot access"))
3926 SETERRNO(EACCES,RMS_PRV);
3928 SETERRNO(EPERM,RMS_PRV);
3931 else { /* some mkdirs return no failure indication */
3933 anum = (PerlLIO_stat(save_filename, &statbuf) >= 0);
3934 if (PL_op->op_type == OP_RMDIR)
3939 SETERRNO(EACCES,RMS_PRV); /* a guess */
3948 /* This macro removes trailing slashes from a directory name.
3949 * Different operating and file systems take differently to
3950 * trailing slashes. According to POSIX 1003.1 1996 Edition
3951 * any number of trailing slashes should be allowed.
3952 * Thusly we snip them away so that even non-conforming
3953 * systems are happy.
3954 * We should probably do this "filtering" for all
3955 * the functions that expect (potentially) directory names:
3956 * -d, chdir(), chmod(), chown(), chroot(), fcntl()?,
3957 * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */
3959 #define TRIMSLASHES(tmps,len,copy) (tmps) = SvPV_const(TOPs, (len)); \
3960 if ((len) > 1 && (tmps)[(len)-1] == '/') { \
3963 } while ((len) > 1 && (tmps)[(len)-1] == '/'); \
3964 (tmps) = savepvn((tmps), (len)); \
3974 const unsigned int mode = (MAXARG > 1 && (TOPs||((void)POPs,0))) ? POPu : 0777;
3976 TRIMSLASHES(tmps,len,copy);
3978 TAINT_PROPER("mkdir");
3980 SETi( PerlDir_mkdir(tmps, mode) >= 0 );
3984 SETi( dooneliner("mkdir", tmps) );
3985 oldumask = PerlLIO_umask(0);
3986 PerlLIO_umask(oldumask);
3987 PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
4002 TRIMSLASHES(tmps,len,copy);
4003 TAINT_PROPER("rmdir");
4005 SETi( PerlDir_rmdir(tmps) >= 0 );
4007 SETi( dooneliner("rmdir", tmps) );
4014 /* Directory calls. */
4018 #if defined(Direntry_t) && defined(HAS_READDIR)
4020 const char * const dirname = POPpconstx;
4021 GV * const gv = MUTABLE_GV(POPs);
4022 IO * const io = GvIOn(gv);
4024 if ((IoIFP(io) || IoOFP(io)))
4025 Perl_ck_warner_d(aTHX_ packWARN2(WARN_IO, WARN_DEPRECATED),
4026 "Opening filehandle %" HEKf " also as a directory. This will be a fatal error in Perl 5.28",
4027 HEKfARG(GvENAME_HEK(gv)) );
4029 PerlDir_close(IoDIRP(io));
4030 if (!(IoDIRP(io) = PerlDir_open(dirname)))
4036 SETERRNO(EBADF,RMS_DIR);
4039 DIE(aTHX_ PL_no_dir_func, "opendir");
4045 #if !defined(Direntry_t) || !defined(HAS_READDIR)
4046 DIE(aTHX_ PL_no_dir_func, "readdir");
4048 #if !defined(I_DIRENT) && !defined(VMS)
4049 Direntry_t *readdir (DIR *);
4054 const U8 gimme = GIMME_V;
4055 GV * const gv = MUTABLE_GV(POPs);
4056 const Direntry_t *dp;
4057 IO * const io = GvIOn(gv);
4060 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4061 "readdir() attempted on invalid dirhandle %" HEKf,
4062 HEKfARG(GvENAME_HEK(gv)));
4067 dp = (Direntry_t *)PerlDir_read(IoDIRP(io));
4071 sv = newSVpvn(dp->d_name, dp->d_namlen);
4073 sv = newSVpv(dp->d_name, 0);
4075 if (!(IoFLAGS(io) & IOf_UNTAINT))
4078 } while (gimme == G_ARRAY);
4080 if (!dp && gimme != G_ARRAY)
4087 SETERRNO(EBADF,RMS_ISI);
4088 if (gimme == G_ARRAY)
4097 #if defined(HAS_TELLDIR) || defined(telldir)
4099 /* XXX does _anyone_ need this? --AD 2/20/1998 */
4100 /* XXX netbsd still seemed to.
4101 XXX HAS_TELLDIR_PROTO is new style, NEED_TELLDIR_PROTO is old style.
4102 --JHI 1999-Feb-02 */
4103 # if !defined(HAS_TELLDIR_PROTO) || defined(NEED_TELLDIR_PROTO)
4104 long telldir (DIR *);
4106 GV * const gv = MUTABLE_GV(POPs);
4107 IO * const io = GvIOn(gv);
4110 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4111 "telldir() attempted on invalid dirhandle %" HEKf,
4112 HEKfARG(GvENAME_HEK(gv)));
4116 PUSHi( PerlDir_tell(IoDIRP(io)) );
4120 SETERRNO(EBADF,RMS_ISI);
4123 DIE(aTHX_ PL_no_dir_func, "telldir");
4129 #if defined(HAS_SEEKDIR) || defined(seekdir)
4131 const long along = POPl;
4132 GV * const gv = MUTABLE_GV(POPs);
4133 IO * const io = GvIOn(gv);
4136 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4137 "seekdir() attempted on invalid dirhandle %" HEKf,
4138 HEKfARG(GvENAME_HEK(gv)));
4141 (void)PerlDir_seek(IoDIRP(io), along);
4146 SETERRNO(EBADF,RMS_ISI);
4149 DIE(aTHX_ PL_no_dir_func, "seekdir");
4155 #if defined(HAS_REWINDDIR) || defined(rewinddir)
4157 GV * const gv = MUTABLE_GV(POPs);
4158 IO * const io = GvIOn(gv);
4161 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4162 "rewinddir() attempted on invalid dirhandle %" HEKf,
4163 HEKfARG(GvENAME_HEK(gv)));
4166 (void)PerlDir_rewind(IoDIRP(io));
4170 SETERRNO(EBADF,RMS_ISI);
4173 DIE(aTHX_ PL_no_dir_func, "rewinddir");
4179 #if defined(Direntry_t) && defined(HAS_READDIR)
4181 GV * const gv = MUTABLE_GV(POPs);
4182 IO * const io = GvIOn(gv);
4185 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4186 "closedir() attempted on invalid dirhandle %" HEKf,
4187 HEKfARG(GvENAME_HEK(gv)));
4190 #ifdef VOID_CLOSEDIR
4191 PerlDir_close(IoDIRP(io));
4193 if (PerlDir_close(IoDIRP(io)) < 0) {
4194 IoDIRP(io) = 0; /* Don't try to close again--coredumps on SysV */
4203 SETERRNO(EBADF,RMS_IFI);
4206 DIE(aTHX_ PL_no_dir_func, "closedir");
4210 /* Process control. */
4217 #ifdef HAS_SIGPROCMASK
4218 sigset_t oldmask, newmask;
4222 PERL_FLUSHALL_FOR_CHILD;
4223 #ifdef HAS_SIGPROCMASK
4224 sigfillset(&newmask);
4225 sigprocmask(SIG_SETMASK, &newmask, &oldmask);
4227 childpid = PerlProc_fork();
4228 if (childpid == 0) {
4232 for (sig = 1; sig < SIG_SIZE; sig++)
4233 PL_psig_pend[sig] = 0;
4235 #ifdef HAS_SIGPROCMASK
4238 sigprocmask(SIG_SETMASK, &oldmask, NULL);
4245 #ifdef PERL_USES_PL_PIDSTATUS
4246 hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
4252 # if (defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)) || defined(__amigaos4__)
4257 PERL_FLUSHALL_FOR_CHILD;
4258 childpid = PerlProc_fork();
4264 DIE(aTHX_ PL_no_func, "fork");
4271 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4276 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4277 childpid = wait4pid(-1, &argflags, 0);
4279 while ((childpid = wait4pid(-1, &argflags, 0)) == -1 &&
4284 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4285 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4286 STATUS_NATIVE_CHILD_SET((childpid && childpid != -1) ? argflags : -1);
4288 STATUS_NATIVE_CHILD_SET((childpid > 0) ? argflags : -1);
4293 DIE(aTHX_ PL_no_func, "wait");
4299 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4301 const int optype = POPi;
4302 const Pid_t pid = TOPi;
4306 result = amigaos_waitpid(aTHX_ optype, pid, &argflags);
4307 STATUS_NATIVE_CHILD_SET((result >= 0) ? argflags : -1);
4308 result = result == 0 ? pid : -1;
4312 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4313 result = wait4pid(pid, &argflags, optype);
4315 while ((result = wait4pid(pid, &argflags, optype)) == -1 &&
4320 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4321 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4322 STATUS_NATIVE_CHILD_SET((result && result != -1) ? argflags : -1);
4324 STATUS_NATIVE_CHILD_SET((result > 0) ? argflags : -1);
4326 # endif /* __amigaos4__ */
4330 DIE(aTHX_ PL_no_func, "waitpid");
4336 dSP; dMARK; dORIGMARK; dTARGET;
4337 #if defined(__LIBCATAMOUNT__)
4338 PL_statusvalue = -1;
4343 # ifdef __amigaos4__
4351 while (++MARK <= SP) {
4352 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4357 TAINT_PROPER("system");
4359 PERL_FLUSHALL_FOR_CHILD;
4360 #if (defined(HAS_FORK) || defined(__amigaos4__)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO)
4363 struct UserData userdata;
4370 bool child_success = FALSE;
4371 #ifdef HAS_SIGPROCMASK
4372 sigset_t newset, oldset;
4375 if (PerlProc_pipe(pp) >= 0)
4378 amigaos_fork_set_userdata(aTHX_
4384 pthread_create(&proc,NULL,amigaos_system_child,(void *)&userdata);
4385 child_success = proc > 0;
4387 #ifdef HAS_SIGPROCMASK
4388 sigemptyset(&newset);
4389 sigaddset(&newset, SIGCHLD);
4390 sigprocmask(SIG_BLOCK, &newset, &oldset);
4392 while ((childpid = PerlProc_fork()) == -1) {
4393 if (errno != EAGAIN) {
4398 PerlLIO_close(pp[0]);
4399 PerlLIO_close(pp[1]);
4401 #ifdef HAS_SIGPROCMASK
4402 sigprocmask(SIG_SETMASK, &oldset, NULL);
4408 child_success = childpid > 0;
4410 if (child_success) {
4411 Sigsave_t ihand,qhand; /* place to save signals during system() */
4414 #ifndef __amigaos4__
4416 PerlLIO_close(pp[1]);
4419 rsignal_save(SIGINT, (Sighandler_t) SIG_IGN, &ihand);
4420 rsignal_save(SIGQUIT, (Sighandler_t) SIG_IGN, &qhand);
4423 result = pthread_join(proc, (void **)&status);
4426 result = wait4pid(childpid, &status, 0);
4427 } while (result == -1 && errno == EINTR);
4430 #ifdef HAS_SIGPROCMASK
4431 sigprocmask(SIG_SETMASK, &oldset, NULL);
4433 (void)rsignal_restore(SIGINT, &ihand);
4434 (void)rsignal_restore(SIGQUIT, &qhand);
4436 STATUS_NATIVE_CHILD_SET(result == -1 ? -1 : status);
4437 do_execfree(); /* free any memory child malloced on fork */
4444 while (n < sizeof(int)) {
4445 n1 = PerlLIO_read(pp[0],
4446 (void*)(((char*)&errkid)+n),
4452 PerlLIO_close(pp[0]);
4453 if (n) { /* Error */
4454 if (n != sizeof(int))
4455 DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
4456 errno = errkid; /* Propagate errno from kid */
4458 /* The pipe always has something in it
4459 * so n alone is not enough. */
4463 STATUS_NATIVE_CHILD_SET(-1);
4467 XPUSHi(STATUS_CURRENT);
4470 #ifndef __amigaos4__
4471 #ifdef HAS_SIGPROCMASK
4472 sigprocmask(SIG_SETMASK, &oldset, NULL);
4475 PerlLIO_close(pp[0]);
4476 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
4477 if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
4481 if (PL_op->op_flags & OPf_STACKED) {
4482 SV * const really = *++MARK;
4483 value = (I32)do_aexec5(really, MARK, SP, pp[1], did_pipes);
4485 else if (SP - MARK != 1)
4486 value = (I32)do_aexec5(NULL, MARK, SP, pp[1], did_pipes);
4488 value = (I32)do_exec3(SvPVx_nolen(sv_mortalcopy(*SP)), pp[1], did_pipes);
4490 #endif /* __amigaos4__ */
4493 #else /* ! FORK or VMS or OS/2 */
4496 if (PL_op->op_flags & OPf_STACKED) {
4497 SV * const really = *++MARK;
4498 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4499 value = (I32)do_aspawn(really, MARK, SP);
4501 value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
4504 else if (SP - MARK != 1) {
4505 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4506 value = (I32)do_aspawn(NULL, MARK, SP);
4508 value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
4512 value = (I32)do_spawn(SvPVx_nolen(sv_mortalcopy(*SP)));
4514 if (PL_statusvalue == -1) /* hint that value must be returned as is */
4516 STATUS_NATIVE_CHILD_SET(value);
4519 XPUSHi(result ? value : STATUS_CURRENT);
4520 #endif /* !FORK or VMS or OS/2 */
4527 dSP; dMARK; dORIGMARK; dTARGET;
4532 while (++MARK <= SP) {
4533 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4538 TAINT_PROPER("exec");
4541 PERL_FLUSHALL_FOR_CHILD;
4542 if (PL_op->op_flags & OPf_STACKED) {
4543 SV * const really = *++MARK;
4544 value = (I32)do_aexec(really, MARK, SP);
4546 else if (SP - MARK != 1)
4548 value = (I32)vms_do_aexec(NULL, MARK, SP);
4550 value = (I32)do_aexec(NULL, MARK, SP);
4554 value = (I32)vms_do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4556 value = (I32)do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4568 XPUSHi( getppid() );
4571 DIE(aTHX_ PL_no_func, "getppid");
4581 (MAXARG < 1) ? 0 : TOPs ? SvIVx(POPs) : ((void)POPs, 0);
4584 pgrp = (I32)BSD_GETPGRP(pid);
4586 if (pid != 0 && pid != PerlProc_getpid())
4587 DIE(aTHX_ "POSIX getpgrp can't take an argument");
4593 DIE(aTHX_ PL_no_func, "getpgrp");
4603 pgrp = MAXARG == 2 && (TOPs||POPs) ? POPi : 0;
4604 if (MAXARG > 0) pid = TOPs ? TOPi : 0;
4611 TAINT_PROPER("setpgrp");
4613 SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
4615 if ((pgrp != 0 && pgrp != PerlProc_getpid())
4616 || (pid != 0 && pid != PerlProc_getpid()))
4618 DIE(aTHX_ "setpgrp can't take arguments");
4620 SETi( setpgrp() >= 0 );
4621 #endif /* USE_BSDPGRP */
4624 DIE(aTHX_ PL_no_func, "setpgrp");
4628 #if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2))
4629 # define PRIORITY_WHICH_T(which) (__priority_which_t)which
4631 # define PRIORITY_WHICH_T(which) which
4636 #ifdef HAS_GETPRIORITY
4638 const int who = POPi;
4639 const int which = TOPi;
4640 SETi( getpriority(PRIORITY_WHICH_T(which), who) );
4643 DIE(aTHX_ PL_no_func, "getpriority");
4649 #ifdef HAS_SETPRIORITY
4651 const int niceval = POPi;
4652 const int who = POPi;
4653 const int which = TOPi;
4654 TAINT_PROPER("setpriority");
4655 SETi( setpriority(PRIORITY_WHICH_T(which), who, niceval) >= 0 );
4658 DIE(aTHX_ PL_no_func, "setpriority");
4662 #undef PRIORITY_WHICH_T
4670 XPUSHn( time(NULL) );
4672 XPUSHi( time(NULL) );
4681 struct tms timesbuf;
4684 (void)PerlProc_times(×buf);
4686 mPUSHn(((NV)timesbuf.tms_utime)/(NV)PL_clocktick);
4687 if (GIMME_V == G_ARRAY) {
4688 mPUSHn(((NV)timesbuf.tms_stime)/(NV)PL_clocktick);
4689 mPUSHn(((NV)timesbuf.tms_cutime)/(NV)PL_clocktick);
4690 mPUSHn(((NV)timesbuf.tms_cstime)/(NV)PL_clocktick);
4698 if (GIMME_V == G_ARRAY) {
4705 DIE(aTHX_ "times not implemented");
4707 #endif /* HAS_TIMES */
4710 /* The 32 bit int year limits the times we can represent to these
4711 boundaries with a few days wiggle room to account for time zone
4714 /* Sat Jan 3 00:00:00 -2147481748 */
4715 #define TIME_LOWER_BOUND -67768100567755200.0
4716 /* Sun Dec 29 12:00:00 2147483647 */
4717 #define TIME_UPPER_BOUND 67767976233316800.0
4720 /* also used for: pp_localtime() */
4728 const char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
4729 static const char * const dayname[] =
4730 {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
4731 static const char * const monname[] =
4732 {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
4733 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
4735 if (MAXARG < 1 || (!TOPs && ((void)POPs, 1))) {
4738 when = (Time64_T)now;
4741 NV input = Perl_floor(POPn);
4742 const bool pl_isnan = Perl_isnan(input);
4743 when = (Time64_T)input;
4744 if (UNLIKELY(pl_isnan || when != input)) {
4745 /* diag_listed_as: gmtime(%f) too large */
4746 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4747 "%s(%.0" NVff ") too large", opname, input);
4755 if ( TIME_LOWER_BOUND > when ) {
4756 /* diag_listed_as: gmtime(%f) too small */
4757 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4758 "%s(%.0" NVff ") too small", opname, when);
4761 else if( when > TIME_UPPER_BOUND ) {
4762 /* diag_listed_as: gmtime(%f) too small */
4763 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4764 "%s(%.0" NVff ") too large", opname, when);
4768 if (PL_op->op_type == OP_LOCALTIME)
4769 err = Perl_localtime64_r(&when, &tmbuf);
4771 err = Perl_gmtime64_r(&when, &tmbuf);
4775 /* diag_listed_as: gmtime(%f) failed */
4776 /* XXX %lld broken for quads */
4778 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4779 "%s(%.0" NVff ") failed", opname, when);
4782 if (GIMME_V != G_ARRAY) { /* scalar context */
4789 Perl_sv_setpvf_mg(aTHX_ TARG, "%s %s %2d %02d:%02d:%02d %" IVdf,
4790 dayname[tmbuf.tm_wday],
4791 monname[tmbuf.tm_mon],
4796 (IV)tmbuf.tm_year + 1900);
4799 else { /* list context */
4805 mPUSHi(tmbuf.tm_sec);
4806 mPUSHi(tmbuf.tm_min);
4807 mPUSHi(tmbuf.tm_hour);
4808 mPUSHi(tmbuf.tm_mday);
4809 mPUSHi(tmbuf.tm_mon);
4810 mPUSHn(tmbuf.tm_year);
4811 mPUSHi(tmbuf.tm_wday);
4812 mPUSHi(tmbuf.tm_yday);
4813 mPUSHi(tmbuf.tm_isdst);
4822 /* alarm() takes an unsigned int number of seconds, and return the
4823 * unsigned int number of seconds remaining in the previous alarm
4824 * (alarms don't stack). Therefore negative return values are not
4828 /* Note that while the C library function alarm() as such has
4829 * no errors defined (or in other words, properly behaving client
4830 * code shouldn't expect any), alarm() being obsoleted by
4831 * setitimer() and often being implemented in terms of
4832 * setitimer(), can fail. */
4833 /* diag_listed_as: %s() with negative argument */
4834 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4835 "alarm() with negative argument");
4836 SETERRNO(EINVAL, LIB_INVARG);
4840 unsigned int retval = alarm(anum);
4841 if ((int)retval < 0) /* Strictly speaking "cannot happen". */
4847 DIE(aTHX_ PL_no_func, "alarm");
4858 (void)time(&lasttime);
4859 if (MAXARG < 1 || (!TOPs && !POPs))
4864 /* diag_listed_as: %s() with negative argument */
4865 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4866 "sleep() with negative argument");
4867 SETERRNO(EINVAL, LIB_INVARG);
4871 PerlProc_sleep((unsigned int)duration);
4875 XPUSHi(when - lasttime);
4879 /* Shared memory. */
4880 /* Merged with some message passing. */
4882 /* also used for: pp_msgrcv() pp_msgsnd() pp_semop() pp_shmread() */
4886 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4887 dSP; dMARK; dTARGET;
4888 const int op_type = PL_op->op_type;
4893 value = (I32)(do_msgsnd(MARK, SP) >= 0);
4896 value = (I32)(do_msgrcv(MARK, SP) >= 0);
4899 value = (I32)(do_semop(MARK, SP) >= 0);
4902 value = (I32)(do_shmio(op_type, MARK, SP) >= 0);
4910 return Perl_pp_semget(aTHX);
4916 /* also used for: pp_msgget() pp_shmget() */
4920 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4921 dSP; dMARK; dTARGET;
4922 const int anum = do_ipcget(PL_op->op_type, MARK, SP);
4929 DIE(aTHX_ "System V IPC is not implemented on this machine");
4933 /* also used for: pp_msgctl() pp_shmctl() */
4937 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4938 dSP; dMARK; dTARGET;
4939 const int anum = do_ipcctl(PL_op->op_type, MARK, SP);
4947 PUSHp(zero_but_true, ZBTLEN);
4951 return Perl_pp_semget(aTHX);
4955 /* I can't const this further without getting warnings about the types of
4956 various arrays passed in from structures. */
4958 S_space_join_names_mortal(pTHX_ char *const *array)
4962 if (array && *array) {
4963 target = newSVpvs_flags("", SVs_TEMP);
4965 sv_catpv(target, *array);
4968 sv_catpvs(target, " ");
4971 target = sv_mortalcopy(&PL_sv_no);
4976 /* Get system info. */
4978 /* also used for: pp_ghbyaddr() pp_ghbyname() */
4982 #if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT)
4984 I32 which = PL_op->op_type;
4987 #ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
4988 struct hostent *gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
4989 struct hostent *gethostbyname(Netdb_name_t);
4990 struct hostent *gethostent(void);
4992 struct hostent *hent = NULL;
4996 if (which == OP_GHBYNAME) {
4997 #ifdef HAS_GETHOSTBYNAME
4998 const char* const name = POPpbytex;
4999 hent = PerlSock_gethostbyname(name);
5001 DIE(aTHX_ PL_no_sock_func, "gethostbyname");
5004 else if (which == OP_GHBYADDR) {
5005 #ifdef HAS_GETHOSTBYADDR
5006 const int addrtype = POPi;
5007 SV * const addrsv = POPs;
5009 const char *addr = (char *)SvPVbyte(addrsv, addrlen);
5011 hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
5013 DIE(aTHX_ PL_no_sock_func, "gethostbyaddr");
5017 #ifdef HAS_GETHOSTENT
5018 hent = PerlSock_gethostent();
5020 DIE(aTHX_ PL_no_sock_func, "gethostent");
5023 #ifdef HOST_NOT_FOUND
5025 #ifdef USE_REENTRANT_API
5026 # ifdef USE_GETHOSTENT_ERRNO
5027 h_errno = PL_reentrant_buffer->_gethostent_errno;
5030 STATUS_UNIX_SET(h_errno);
5034 if (GIMME_V != G_ARRAY) {
5035 PUSHs(sv = sv_newmortal());
5037 if (which == OP_GHBYNAME) {
5039 sv_setpvn(sv, hent->h_addr, hent->h_length);
5042 sv_setpv(sv, (char*)hent->h_name);
5048 mPUSHs(newSVpv((char*)hent->h_name, 0));
5049 PUSHs(space_join_names_mortal(hent->h_aliases));
5050 mPUSHi(hent->h_addrtype);
5051 len = hent->h_length;
5054 for (elem = hent->h_addr_list; elem && *elem; elem++) {
5055 mXPUSHp(*elem, len);
5059 mPUSHp(hent->h_addr, len);
5061 PUSHs(sv_mortalcopy(&PL_sv_no));
5066 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5070 /* also used for: pp_gnbyaddr() pp_gnbyname() */
5074 #if defined(HAS_GETNETBYNAME) || defined(HAS_GETNETBYADDR) || defined(HAS_GETNETENT)
5076 I32 which = PL_op->op_type;
5078 #ifndef HAS_GETNET_PROTOS /* XXX Do we need individual probes? */
5079 struct netent *getnetbyaddr(Netdb_net_t, int);
5080 struct netent *getnetbyname(Netdb_name_t);
5081 struct netent *getnetent(void);
5083 struct netent *nent;
5085 if (which == OP_GNBYNAME){
5086 #ifdef HAS_GETNETBYNAME
5087 const char * const name = POPpbytex;
5088 nent = PerlSock_getnetbyname(name);
5090 DIE(aTHX_ PL_no_sock_func, "getnetbyname");
5093 else if (which == OP_GNBYADDR) {
5094 #ifdef HAS_GETNETBYADDR
5095 const int addrtype = POPi;
5096 const Netdb_net_t addr = (Netdb_net_t) (U32)POPu;
5097 nent = PerlSock_getnetbyaddr(addr, addrtype);
5099 DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");
5103 #ifdef HAS_GETNETENT
5104 nent = PerlSock_getnetent();
5106 DIE(aTHX_ PL_no_sock_func, "getnetent");
5109 #ifdef HOST_NOT_FOUND
5111 #ifdef USE_REENTRANT_API
5112 # ifdef USE_GETNETENT_ERRNO
5113 h_errno = PL_reentrant_buffer->_getnetent_errno;
5116 STATUS_UNIX_SET(h_errno);
5121 if (GIMME_V != G_ARRAY) {
5122 PUSHs(sv = sv_newmortal());
5124 if (which == OP_GNBYNAME)
5125 sv_setiv(sv, (IV)nent->n_net);
5127 sv_setpv(sv, nent->n_name);
5133 mPUSHs(newSVpv(nent->n_name, 0));
5134 PUSHs(space_join_names_mortal(nent->n_aliases));
5135 mPUSHi(nent->n_addrtype);
5136 mPUSHi(nent->n_net);
5141 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5146 /* also used for: pp_gpbyname() pp_gpbynumber() */
5150 #if defined(HAS_GETPROTOBYNAME) || defined(HAS_GETPROTOBYNUMBER) || defined(HAS_GETPROTOENT)
5152 I32 which = PL_op->op_type;
5154 #ifndef HAS_GETPROTO_PROTOS /* XXX Do we need individual probes? */
5155 struct protoent *getprotobyname(Netdb_name_t);
5156 struct protoent *getprotobynumber(int);
5157 struct protoent *getprotoent(void);
5159 struct protoent *pent;
5161 if (which == OP_GPBYNAME) {
5162 #ifdef HAS_GETPROTOBYNAME
5163 const char* const name = POPpbytex;
5164 pent = PerlSock_getprotobyname(name);
5166 DIE(aTHX_ PL_no_sock_func, "getprotobyname");
5169 else if (which == OP_GPBYNUMBER) {
5170 #ifdef HAS_GETPROTOBYNUMBER
5171 const int number = POPi;
5172 pent = PerlSock_getprotobynumber(number);
5174 DIE(aTHX_ PL_no_sock_func, "getprotobynumber");
5178 #ifdef HAS_GETPROTOENT
5179 pent = PerlSock_getprotoent();
5181 DIE(aTHX_ PL_no_sock_func, "getprotoent");
5185 if (GIMME_V != G_ARRAY) {
5186 PUSHs(sv = sv_newmortal());
5188 if (which == OP_GPBYNAME)
5189 sv_setiv(sv, (IV)pent->p_proto);
5191 sv_setpv(sv, pent->p_name);
5197 mPUSHs(newSVpv(pent->p_name, 0));
5198 PUSHs(space_join_names_mortal(pent->p_aliases));
5199 mPUSHi(pent->p_proto);
5204 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5209 /* also used for: pp_gsbyname() pp_gsbyport() */
5213 #if defined(HAS_GETSERVBYNAME) || defined(HAS_GETSERVBYPORT) || defined(HAS_GETSERVENT)
5215 I32 which = PL_op->op_type;
5217 #ifndef HAS_GETSERV_PROTOS /* XXX Do we need individual probes? */
5218 struct servent *getservbyname(Netdb_name_t, Netdb_name_t);
5219 struct servent *getservbyport(int, Netdb_name_t);
5220 struct servent *getservent(void);
5222 struct servent *sent;
5224 if (which == OP_GSBYNAME) {
5225 #ifdef HAS_GETSERVBYNAME
5226 const char * const proto = POPpbytex;
5227 const char * const name = POPpbytex;
5228 sent = PerlSock_getservbyname(name, (proto && !*proto) ? NULL : proto);
5230 DIE(aTHX_ PL_no_sock_func, "getservbyname");
5233 else if (which == OP_GSBYPORT) {
5234 #ifdef HAS_GETSERVBYPORT
5235 const char * const proto = POPpbytex;
5236 unsigned short port = (unsigned short)POPu;
5237 port = PerlSock_htons(port);
5238 sent = PerlSock_getservbyport(port, (proto && !*proto) ? NULL : proto);
5240 DIE(aTHX_ PL_no_sock_func, "getservbyport");
5244 #ifdef HAS_GETSERVENT
5245 sent = PerlSock_getservent();
5247 DIE(aTHX_ PL_no_sock_func, "getservent");
5251 if (GIMME_V != G_ARRAY) {
5252 PUSHs(sv = sv_newmortal());
5254 if (which == OP_GSBYNAME) {
5255 sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
5258 sv_setpv(sv, sent->s_name);
5264 mPUSHs(newSVpv(sent->s_name, 0));
5265 PUSHs(space_join_names_mortal(sent->s_aliases));
5266 mPUSHi(PerlSock_ntohs(sent->s_port));
5267 mPUSHs(newSVpv(sent->s_proto, 0));
5272 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5277 /* also used for: pp_snetent() pp_sprotoent() pp_sservent() */
5282 const int stayopen = TOPi;
5283 switch(PL_op->op_type) {
5285 #ifdef HAS_SETHOSTENT
5286 PerlSock_sethostent(stayopen);
5288 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5291 #ifdef HAS_SETNETENT
5293 PerlSock_setnetent(stayopen);
5295 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5299 #ifdef HAS_SETPROTOENT
5300 PerlSock_setprotoent(stayopen);
5302 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5306 #ifdef HAS_SETSERVENT
5307 PerlSock_setservent(stayopen);
5309 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5317 /* also used for: pp_egrent() pp_enetent() pp_eprotoent() pp_epwent()
5318 * pp_eservent() pp_sgrent() pp_spwent() */
5323 switch(PL_op->op_type) {
5325 #ifdef HAS_ENDHOSTENT
5326 PerlSock_endhostent();
5328 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5332 #ifdef HAS_ENDNETENT
5333 PerlSock_endnetent();
5335 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5339 #ifdef HAS_ENDPROTOENT
5340 PerlSock_endprotoent();
5342 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5346 #ifdef HAS_ENDSERVENT
5347 PerlSock_endservent();
5349 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5353 #if defined(HAS_GROUP) && defined(HAS_SETGRENT)
5356 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5360 #if defined(HAS_GROUP) && defined(HAS_ENDGRENT)
5363 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5367 #if defined(HAS_PASSWD) && defined(HAS_SETPWENT)
5370 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5374 #if defined(HAS_PASSWD) && defined(HAS_ENDPWENT)
5377 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5386 /* also used for: pp_gpwnam() pp_gpwuid() */
5392 I32 which = PL_op->op_type;
5394 struct passwd *pwent = NULL;
5396 * We currently support only the SysV getsp* shadow password interface.
5397 * The interface is declared in <shadow.h> and often one needs to link
5398 * with -lsecurity or some such.
5399 * This interface is used at least by Solaris, HP-UX, IRIX, and Linux.
5402 * AIX getpwnam() is clever enough to return the encrypted password
5403 * only if the caller (euid?) is root.
5405 * There are at least three other shadow password APIs. Many platforms
5406 * seem to contain more than one interface for accessing the shadow
5407 * password databases, possibly for compatibility reasons.
5408 * The getsp*() is by far he simplest one, the other two interfaces
5409 * are much more complicated, but also very similar to each other.
5414 * struct pr_passwd *getprpw*();
5415 * The password is in
5416 * char getprpw*(...).ufld.fd_encrypt[]
5417 * Mention HAS_GETPRPWNAM here so that Configure probes for it.
5422 * struct es_passwd *getespw*();
5423 * The password is in
5424 * char *(getespw*(...).ufld.fd_encrypt)
5425 * Mention HAS_GETESPWNAM here so that Configure probes for it.
5428 * struct userpw *getuserpw();
5429 * The password is in
5430 * char *(getuserpw(...)).spw_upw_passwd
5431 * (but the de facto standard getpwnam() should work okay)
5433 * Mention I_PROT here so that Configure probes for it.
5435 * In HP-UX for getprpw*() the manual page claims that one should include
5436 * <hpsecurity.h> instead of <sys/security.h>, but that is not needed
5437 * if one includes <shadow.h> as that includes <hpsecurity.h>,
5438 * and pp_sys.c already includes <shadow.h> if there is such.
5440 * Note that <sys/security.h> is already probed for, but currently
5441 * it is only included in special cases.
5443 * In Digital UNIX/Tru64 if using the getespw*() (which seems to be
5444 * be preferred interface, even though also the getprpw*() interface
5445 * is available) one needs to link with -lsecurity -ldb -laud -lm.
5446 * One also needs to call set_auth_parameters() in main() before
5447 * doing anything else, whether one is using getespw*() or getprpw*().
5449 * Note that accessing the shadow databases can be magnitudes
5450 * slower than accessing the standard databases.
5455 # if defined(__CYGWIN__) && defined(USE_REENTRANT_API)
5456 /* Cygwin 1.5.3-1 has buggy getpwnam_r() and getpwuid_r():
5457 * the pw_comment is left uninitialized. */
5458 PL_reentrant_buffer->_pwent_struct.pw_comment = NULL;
5464 const char* const name = POPpbytex;
5465 pwent = getpwnam(name);
5471 pwent = getpwuid(uid);
5475 # ifdef HAS_GETPWENT
5477 #ifdef POSIX_BC /* In some cases pw_passwd has invalid addresses */
5478 if (pwent) pwent = getpwnam(pwent->pw_name);
5481 DIE(aTHX_ PL_no_func, "getpwent");
5487 if (GIMME_V != G_ARRAY) {
5488 PUSHs(sv = sv_newmortal());
5490 if (which == OP_GPWNAM)
5491 sv_setuid(sv, pwent->pw_uid);
5493 sv_setpv(sv, pwent->pw_name);
5499 mPUSHs(newSVpv(pwent->pw_name, 0));
5503 /* If we have getspnam(), we try to dig up the shadow
5504 * password. If we are underprivileged, the shadow
5505 * interface will set the errno to EACCES or similar,
5506 * and return a null pointer. If this happens, we will
5507 * use the dummy password (usually "*" or "x") from the
5508 * standard password database.
5510 * In theory we could skip the shadow call completely
5511 * if euid != 0 but in practice we cannot know which
5512 * security measures are guarding the shadow databases
5513 * on a random platform.
5515 * Resist the urge to use additional shadow interfaces.
5516 * Divert the urge to writing an extension instead.
5519 /* Some AIX setups falsely(?) detect some getspnam(), which
5520 * has a different API than the Solaris/IRIX one. */
5521 # if defined(HAS_GETSPNAM) && !defined(_AIX)
5524 const struct spwd * const spwent = getspnam(pwent->pw_name);
5525 /* Save and restore errno so that
5526 * underprivileged attempts seem
5527 * to have never made the unsuccessful
5528 * attempt to retrieve the shadow password. */
5530 if (spwent && spwent->sp_pwdp)
5531 sv_setpv(sv, spwent->sp_pwdp);
5535 if (!SvPOK(sv)) /* Use the standard password, then. */
5536 sv_setpv(sv, pwent->pw_passwd);
5539 /* passwd is tainted because user himself can diddle with it.
5540 * admittedly not much and in a very limited way, but nevertheless. */
5543 sv_setuid(PUSHmortal, pwent->pw_uid);
5544 sv_setgid(PUSHmortal, pwent->pw_gid);
5546 /* pw_change, pw_quota, and pw_age are mutually exclusive--
5547 * because of the poor interface of the Perl getpw*(),
5548 * not because there's some standard/convention saying so.
5549 * A better interface would have been to return a hash,
5550 * but we are accursed by our history, alas. --jhi. */
5552 mPUSHi(pwent->pw_change);
5555 mPUSHi(pwent->pw_quota);
5558 mPUSHs(newSVpv(pwent->pw_age, 0));
5560 /* I think that you can never get this compiled, but just in case. */
5561 PUSHs(sv_mortalcopy(&PL_sv_no));
5566 /* pw_class and pw_comment are mutually exclusive--.
5567 * see the above note for pw_change, pw_quota, and pw_age. */
5569 mPUSHs(newSVpv(pwent->pw_class, 0));
5572 mPUSHs(newSVpv(pwent->pw_comment, 0));
5574 /* I think that you can never get this compiled, but just in case. */
5575 PUSHs(sv_mortalcopy(&PL_sv_no));
5580 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_gecos, 0)));
5582 PUSHs(sv = sv_mortalcopy(&PL_sv_no));
5584 /* pw_gecos is tainted because user himself can diddle with it. */
5587 mPUSHs(newSVpv(pwent->pw_dir, 0));
5589 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_shell, 0)));
5590 /* pw_shell is tainted because user himself can diddle with it. */
5594 mPUSHi(pwent->pw_expire);
5599 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5604 /* also used for: pp_ggrgid() pp_ggrnam() */
5610 const I32 which = PL_op->op_type;
5611 const struct group *grent;
5613 if (which == OP_GGRNAM) {
5614 const char* const name = POPpbytex;
5615 grent = (const struct group *)getgrnam(name);
5617 else if (which == OP_GGRGID) {
5619 const Gid_t gid = POPu;
5620 #elif Gid_t_sign == -1
5621 const Gid_t gid = POPi;
5623 # error "Unexpected Gid_t_sign"
5625 grent = (const struct group *)getgrgid(gid);
5629 grent = (struct group *)getgrent();
5631 DIE(aTHX_ PL_no_func, "getgrent");
5635 if (GIMME_V != G_ARRAY) {
5636 SV * const sv = sv_newmortal();
5640 if (which == OP_GGRNAM)
5641 sv_setgid(sv, grent->gr_gid);
5643 sv_setpv(sv, grent->gr_name);
5649 mPUSHs(newSVpv(grent->gr_name, 0));
5652 mPUSHs(newSVpv(grent->gr_passwd, 0));
5654 PUSHs(sv_mortalcopy(&PL_sv_no));
5657 sv_setgid(PUSHmortal, grent->gr_gid);
5659 #if !(defined(_CRAYMPP) && defined(USE_REENTRANT_API))
5660 /* In UNICOS/mk (_CRAYMPP) the multithreading
5661 * versions (getgrnam_r, getgrgid_r)
5662 * seem to return an illegal pointer
5663 * as the group members list, gr_mem.
5664 * getgrent() doesn't even have a _r version
5665 * but the gr_mem is poisonous anyway.
5666 * So yes, you cannot get the list of group
5667 * members if building multithreaded in UNICOS/mk. */
5668 PUSHs(space_join_names_mortal(grent->gr_mem));
5674 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5684 if (!(tmps = PerlProc_getlogin()))
5686 sv_setpv_mg(TARG, tmps);
5690 DIE(aTHX_ PL_no_func, "getlogin");
5694 /* Miscellaneous. */
5699 dSP; dMARK; dORIGMARK; dTARGET;
5700 I32 items = SP - MARK;
5701 unsigned long a[20];
5706 while (++MARK <= SP) {
5707 if (SvTAINTED(*MARK)) {
5713 TAINT_PROPER("syscall");
5716 /* This probably won't work on machines where sizeof(long) != sizeof(int)
5717 * or where sizeof(long) != sizeof(char*). But such machines will
5718 * not likely have syscall implemented either, so who cares?
5720 while (++MARK <= SP) {
5721 if (SvNIOK(*MARK) || !i)
5722 a[i++] = SvIV(*MARK);
5723 else if (*MARK == &PL_sv_undef)
5726 a[i++] = (unsigned long)SvPV_force_nolen(*MARK);
5732 DIE(aTHX_ "Too many args to syscall");
5734 DIE(aTHX_ "Too few args to syscall");
5736 retval = syscall(a[0]);
5739 retval = syscall(a[0],a[1]);
5742 retval = syscall(a[0],a[1],a[2]);
5745 retval = syscall(a[0],a[1],a[2],a[3]);
5748 retval = syscall(a[0],a[1],a[2],a[3],a[4]);
5751 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5]);
5754 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
5757 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
5764 DIE(aTHX_ PL_no_func, "syscall");
5768 #ifdef FCNTL_EMULATE_FLOCK
5770 /* XXX Emulate flock() with fcntl().
5771 What's really needed is a good file locking module.
5775 fcntl_emulate_flock(int fd, int operation)
5780 switch (operation & ~LOCK_NB) {
5782 flock.l_type = F_RDLCK;
5785 flock.l_type = F_WRLCK;
5788 flock.l_type = F_UNLCK;
5794 flock.l_whence = SEEK_SET;
5795 flock.l_start = flock.l_len = (Off_t)0;
5797 res = fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &flock);
5798 if (res == -1 && ((errno == EAGAIN) || (errno == EACCES)))
5799 errno = EWOULDBLOCK;
5803 #endif /* FCNTL_EMULATE_FLOCK */
5805 #ifdef LOCKF_EMULATE_FLOCK
5807 /* XXX Emulate flock() with lockf(). This is just to increase
5808 portability of scripts. The calls are not completely
5809 interchangeable. What's really needed is a good file
5813 /* The lockf() constants might have been defined in <unistd.h>.
5814 Unfortunately, <unistd.h> causes troubles on some mixed
5815 (BSD/POSIX) systems, such as SunOS 4.1.3.
5817 Further, the lockf() constants aren't POSIX, so they might not be
5818 visible if we're compiling with _POSIX_SOURCE defined. Thus, we'll
5819 just stick in the SVID values and be done with it. Sigh.
5823 # define F_ULOCK 0 /* Unlock a previously locked region */
5826 # define F_LOCK 1 /* Lock a region for exclusive use */
5829 # define F_TLOCK 2 /* Test and lock a region for exclusive use */
5832 # define F_TEST 3 /* Test a region for other processes locks */
5836 lockf_emulate_flock(int fd, int operation)
5842 /* flock locks entire file so for lockf we need to do the same */
5843 pos = PerlLIO_lseek(fd, (Off_t)0, SEEK_CUR); /* get pos to restore later */
5844 if (pos > 0) /* is seekable and needs to be repositioned */
5845 if (PerlLIO_lseek(fd, (Off_t)0, SEEK_SET) < 0)
5846 pos = -1; /* seek failed, so don't seek back afterwards */
5849 switch (operation) {
5851 /* LOCK_SH - get a shared lock */
5853 /* LOCK_EX - get an exclusive lock */
5855 i = lockf (fd, F_LOCK, 0);
5858 /* LOCK_SH|LOCK_NB - get a non-blocking shared lock */
5859 case LOCK_SH|LOCK_NB:
5860 /* LOCK_EX|LOCK_NB - get a non-blocking exclusive lock */
5861 case LOCK_EX|LOCK_NB:
5862 i = lockf (fd, F_TLOCK, 0);
5864 if ((errno == EAGAIN) || (errno == EACCES))
5865 errno = EWOULDBLOCK;
5868 /* LOCK_UN - unlock (non-blocking is a no-op) */
5870 case LOCK_UN|LOCK_NB:
5871 i = lockf (fd, F_ULOCK, 0);
5874 /* Default - can't decipher operation */
5881 if (pos > 0) /* need to restore position of the handle */
5882 PerlLIO_lseek(fd, pos, SEEK_SET); /* ignore error here */
5887 #endif /* LOCKF_EMULATE_FLOCK */
5890 * ex: set ts=8 sts=4 sw=4 et: