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
36 /* Shadow password support for solaris - pdo@cs.umd.edu
37 * Not just Solaris: at least HP-UX, IRIX, Linux.
38 * The API is from SysV.
40 * There are at least two more shadow interfaces,
41 * see the comments in pp_gpwent().
45 /* There is a MAXINT coming from <shadow.h> <- <hpsecurity.h> <- <values.h>
46 * and another MAXINT from "perl.h" <- <sys/param.h>. */
53 # include <sys/resource.h>
62 # include <sys/select.h>
66 /* XXX Configure test needed.
67 h_errno might not be a simple 'int', especially for multi-threaded
68 applications, see "extern int errno in perl.h". Creating such
69 a test requires taking into account the differences between
70 compiling multithreaded and singlethreaded ($ccflags et al).
71 HOST_NOT_FOUND is typically defined in <netdb.h>.
73 #if defined(HOST_NOT_FOUND) && !defined(h_errno) && !defined(__CYGWIN__)
82 struct passwd *getpwnam (char *);
83 struct passwd *getpwuid (Uid_t);
88 struct passwd *getpwent (void);
89 #elif defined (VMS) && defined (my_getpwent)
90 struct passwd *Perl_my_getpwent (pTHX);
99 struct group *getgrnam (char *);
100 struct group *getgrgid (Gid_t);
104 struct group *getgrent (void);
110 # if defined(_MSC_VER) || defined(__MINGW32__)
111 # include <sys/utime.h>
118 # ifdef my_chsize /* Probably #defined to Perl_my_chsize in embed.h */
121 # define my_chsize PerlLIO_chsize
124 # define my_chsize PerlLIO_chsize
126 I32 my_chsize(int fd, Off_t length);
132 #else /* no flock() */
134 /* fcntl.h might not have been included, even if it exists, because
135 the current Configure only sets I_FCNTL if it's needed to pick up
136 the *_OK constants. Make sure it has been included before testing
137 the fcntl() locking constants. */
138 # if defined(HAS_FCNTL) && !defined(I_FCNTL)
142 # if defined(HAS_FCNTL) && defined(FCNTL_CAN_LOCK)
143 # define FLOCK fcntl_emulate_flock
144 # define FCNTL_EMULATE_FLOCK
145 # else /* no flock() or fcntl(F_SETLK,...) */
147 # define FLOCK lockf_emulate_flock
148 # define LOCKF_EMULATE_FLOCK
150 # endif /* no flock() or fcntl(F_SETLK,...) */
153 static int FLOCK (int, int);
156 * These are the flock() constants. Since this sytems doesn't have
157 * flock(), the values of the constants are probably not available.
171 # endif /* emulating flock() */
173 #endif /* no flock() */
176 static const char zero_but_true[ZBTLEN + 1] = "0 but true";
178 #if defined(I_SYS_ACCESS) && !defined(R_OK)
179 # include <sys/access.h>
185 /* Missing protos on LynxOS */
186 void sethostent(int);
187 void endhostent(void);
189 void endnetent(void);
190 void setprotoent(int);
191 void endprotoent(void);
192 void setservent(int);
193 void endservent(void);
196 #undef PERL_EFF_ACCESS /* EFFective uid/gid ACCESS */
198 /* F_OK unused: if stat() cannot find it... */
200 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) && defined(EFF_ONLY_OK) && !defined(NO_EFF_ONLY_OK)
201 /* Digital UNIX (when the EFF_ONLY_OK gets fixed), UnixWare */
202 # define PERL_EFF_ACCESS(p,f) (access((p), (f) | EFF_ONLY_OK))
205 #if !defined(PERL_EFF_ACCESS) && defined(HAS_EACCESS)
206 # ifdef I_SYS_SECURITY
207 # include <sys/security.h>
211 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f), ACC_SELF))
214 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f)))
218 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESSX) && defined(ACC_SELF)
220 # define PERL_EFF_ACCESS(p,f) (accessx((p), (f), ACC_SELF))
224 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) \
225 && (defined(HAS_SETREUID) || defined(HAS_SETRESUID) \
226 || defined(HAS_SETREGID) || defined(HAS_SETRESGID))
229 S_emulate_eaccess(pTHX_ const char* path, Mode_t mode)
231 const Uid_t ruid = getuid();
232 const Uid_t euid = geteuid();
233 const Gid_t rgid = getgid();
234 const Gid_t egid = getegid();
237 #if !defined(HAS_SETREUID) && !defined(HAS_SETRESUID)
238 Perl_croak(aTHX_ "switching effective uid is not implemented");
241 if (setreuid(euid, ruid))
244 if (setresuid(euid, ruid, (Uid_t)-1))
247 /* diag_listed_as: entering effective %s failed */
248 Perl_croak(aTHX_ "entering effective uid failed");
251 #if !defined(HAS_SETREGID) && !defined(HAS_SETRESGID)
252 Perl_croak(aTHX_ "switching effective gid is not implemented");
255 if (setregid(egid, rgid))
258 if (setresgid(egid, rgid, (Gid_t)-1))
261 /* diag_listed_as: entering effective %s failed */
262 Perl_croak(aTHX_ "entering effective gid failed");
265 res = access(path, mode);
268 if (setreuid(ruid, euid))
271 if (setresuid(ruid, euid, (Uid_t)-1))
274 /* diag_listed_as: leaving effective %s failed */
275 Perl_croak(aTHX_ "leaving effective uid failed");
278 if (setregid(rgid, egid))
281 if (setresgid(rgid, egid, (Gid_t)-1))
284 /* diag_listed_as: leaving effective %s failed */
285 Perl_croak(aTHX_ "leaving effective gid failed");
289 # define PERL_EFF_ACCESS(p,f) (S_emulate_eaccess(aTHX_ (p), (f)))
296 const char * const tmps = POPpconstx;
297 const I32 gimme = GIMME_V;
298 const char *mode = "r";
301 if (PL_op->op_private & OPpOPEN_IN_RAW)
303 else if (PL_op->op_private & OPpOPEN_IN_CRLF)
305 fp = PerlProc_popen(tmps, mode);
307 const char * const type = Perl_PerlIO_context_layers(aTHX_ NULL);
309 PerlIO_apply_layers(aTHX_ fp,mode,type);
311 if (gimme == G_VOID) {
313 while (PerlIO_read(fp, tmpbuf, sizeof tmpbuf) > 0)
316 else if (gimme == G_SCALAR) {
317 ENTER_with_name("backtick");
319 PL_rs = &PL_sv_undef;
320 sv_setpvs(TARG, ""); /* note that this preserves previous buffer */
321 while (sv_gets(TARG, fp, SvCUR(TARG)) != NULL)
323 LEAVE_with_name("backtick");
329 SV * const sv = newSV(79);
330 if (sv_gets(sv, fp, 0) == NULL) {
335 if (SvLEN(sv) - SvCUR(sv) > 20) {
336 SvPV_shrink_to_cur(sv);
341 STATUS_NATIVE_CHILD_SET(PerlProc_pclose(fp));
342 TAINT; /* "I believe that this is not gratuitous!" */
345 STATUS_NATIVE_CHILD_SET(-1);
346 if (gimme == G_SCALAR)
357 GV * const gv = (PL_op->op_flags & OPf_SPECIAL) ? NULL : (GV *)POPs;
361 /* make a copy of the pattern if it is gmagical, to ensure that magic
362 * is called once and only once */
363 if (SvGMAGICAL(TOPs)) TOPs = sv_2mortal(newSVsv(TOPs));
365 tryAMAGICunTARGETlist(iter_amg, (PL_op->op_flags & OPf_SPECIAL));
367 if (PL_op->op_flags & OPf_SPECIAL) {
368 /* call Perl-level glob function instead. Stack args are:
370 * and following OPs should be: gv(CORE::GLOBAL::glob), entersub
379 /* Note that we only ever get here if File::Glob fails to load
380 * without at the same time croaking, for some reason, or if
381 * perl was built with PERL_EXTERNAL_GLOB */
383 ENTER_with_name("glob");
388 * The external globbing program may use things we can't control,
389 * so for security reasons we must assume the worst.
392 taint_proper(PL_no_security, "glob");
396 SAVESPTR(PL_last_in_gv); /* We don't want this to be permanent. */
399 SAVESPTR(PL_rs); /* This is not permanent, either. */
400 PL_rs = newSVpvs_flags("\000", SVs_TEMP);
403 *SvPVX(PL_rs) = '\n';
407 result = do_readline();
408 LEAVE_with_name("glob");
414 PL_last_in_gv = cGVOP_gv;
415 return do_readline();
425 do_join(TARG, &PL_sv_no, MARK, SP);
429 else if (SP == MARK) {
436 if (SvGMAGICAL(exsv)) exsv = sv_mortalcopy(exsv);
439 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
440 /* well-formed exception supplied */
443 SV * const errsv = ERRSV;
446 if (SvGMAGICAL(errsv)) {
447 exsv = sv_newmortal();
448 sv_setsv_nomg(exsv, errsv);
452 else if (SvPOKp(errsv) ? SvCUR(errsv) : SvNIOKp(errsv)) {
453 exsv = sv_newmortal();
454 sv_setsv_nomg(exsv, errsv);
455 sv_catpvs(exsv, "\t...caught");
458 exsv = newSVpvs_flags("Warning: something's wrong", SVs_TEMP);
461 if (SvROK(exsv) && !PL_warnhook)
462 Perl_warn(aTHX_ "%"SVf, SVfARG(exsv));
474 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
476 if (SP - MARK != 1) {
478 do_join(TARG, &PL_sv_no, MARK, SP);
486 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
487 /* well-formed exception supplied */
490 SV * const errsv = ERRSV;
494 if (sv_isobject(exsv)) {
495 HV * const stash = SvSTASH(SvRV(exsv));
496 GV * const gv = gv_fetchmethod(stash, "PROPAGATE");
498 SV * const file = sv_2mortal(newSVpv(CopFILE(PL_curcop),0));
499 SV * const line = sv_2mortal(newSVuv(CopLINE(PL_curcop)));
506 call_sv(MUTABLE_SV(GvCV(gv)),
507 G_SCALAR|G_EVAL|G_KEEPERR);
508 exsv = sv_mortalcopy(*PL_stack_sp--);
512 else if (SvPOK(errsv) && SvCUR(errsv)) {
513 exsv = sv_mortalcopy(errsv);
514 sv_catpvs(exsv, "\t...propagated");
517 exsv = newSVpvs_flags("Died", SVs_TEMP);
521 NOT_REACHED; /* NOTREACHED */
522 return NULL; /* avoid missing return from non-void function warning */
528 Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv,
529 const MAGIC *const mg, const U32 flags, U32 argc, ...)
534 PERL_ARGS_ASSERT_TIED_METHOD;
536 /* Ensure that our flag bits do not overlap. */
537 STATIC_ASSERT_STMT((TIED_METHOD_MORTALIZE_NOT_NEEDED & G_WANT) == 0);
538 STATIC_ASSERT_STMT((TIED_METHOD_ARGUMENTS_ON_STACK & G_WANT) == 0);
539 STATIC_ASSERT_STMT((TIED_METHOD_SAY & G_WANT) == 0);
541 PUTBACK; /* sp is at *foot* of args, so this pops args from old stack */
542 PUSHSTACKi(PERLSI_MAGIC);
543 EXTEND(SP, argc+1); /* object + args */
545 PUSHs(SvTIED_obj(sv, mg));
546 if (flags & TIED_METHOD_ARGUMENTS_ON_STACK) {
547 Copy(orig_sp + 2, sp + 1, argc, SV*); /* copy args to new stack */
551 const U32 mortalize_not_needed
552 = flags & TIED_METHOD_MORTALIZE_NOT_NEEDED;
554 va_start(args, argc);
556 SV *const arg = va_arg(args, SV *);
557 if(mortalize_not_needed)
566 ENTER_with_name("call_tied_method");
567 if (flags & TIED_METHOD_SAY) {
568 /* local $\ = "\n" */
569 SAVEGENERICSV(PL_ors_sv);
570 PL_ors_sv = newSVpvs("\n");
572 ret_args = call_sv(methname, (flags & G_WANT)|G_METHOD_NAMED);
577 if (ret_args) { /* copy results back to original stack */
578 EXTEND(sp, ret_args);
579 Copy(orig_sp - ret_args + 1, sp + 1, ret_args, SV*);
583 LEAVE_with_name("call_tied_method");
587 #define tied_method0(a,b,c,d) \
588 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,0)
589 #define tied_method1(a,b,c,d,e) \
590 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,1,e)
591 #define tied_method2(a,b,c,d,e,f) \
592 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,2,e,f)
605 GV * const gv = MUTABLE_GV(*++MARK);
607 if (!isGV(gv) && !(SvTYPE(gv) == SVt_PVLV && isGV_with_GP(gv)))
608 DIE(aTHX_ PL_no_usym, "filehandle");
610 if ((io = GvIOp(gv))) {
612 IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
615 Perl_ck_warner_d(aTHX_ packWARN2(WARN_IO, WARN_DEPRECATED),
616 "Opening dirhandle %"HEKf" also as a file",
617 HEKfARG(GvENAME_HEK(gv)));
619 mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
621 /* Method's args are same as ours ... */
622 /* ... except handle is replaced by the object */
623 return Perl_tied_method(aTHX_ SV_CONST(OPEN), mark - 1, MUTABLE_SV(io), mg,
624 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
636 tmps = SvPV_const(sv, len);
637 ok = do_open6(gv, tmps, len, NULL, MARK+1, (SP-MARK));
640 PUSHi( (I32)PL_forkprocess );
641 else if (PL_forkprocess == 0) /* we are a new child */
652 MAXARG == 0 || (!TOPs && !POPs) ? PL_defoutgv : MUTABLE_GV(POPs);
658 IO * const io = GvIO(gv);
660 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
662 return tied_method0(SV_CONST(CLOSE), SP, MUTABLE_SV(io), mg);
666 PUSHs(boolSV(do_close(gv, TRUE)));
678 GV * const wgv = MUTABLE_GV(POPs);
679 GV * const rgv = MUTABLE_GV(POPs);
681 assert (isGV_with_GP(rgv));
682 assert (isGV_with_GP(wgv));
685 do_close(rgv, FALSE);
689 do_close(wgv, FALSE);
691 if (PerlProc_pipe(fd) < 0)
694 IoIFP(rstio) = PerlIO_fdopen(fd[0], "r"PIPE_OPEN_MODE);
695 IoOFP(wstio) = PerlIO_fdopen(fd[1], "w"PIPE_OPEN_MODE);
696 IoOFP(rstio) = IoIFP(rstio);
697 IoIFP(wstio) = IoOFP(wstio);
698 IoTYPE(rstio) = IoTYPE_RDONLY;
699 IoTYPE(wstio) = IoTYPE_WRONLY;
701 if (!IoIFP(rstio) || !IoOFP(wstio)) {
703 PerlIO_close(IoIFP(rstio));
705 PerlLIO_close(fd[0]);
707 PerlIO_close(IoOFP(wstio));
709 PerlLIO_close(fd[1]);
712 #if defined(HAS_FCNTL) && defined(F_SETFD)
713 /* ensure close-on-exec */
714 if ((fcntl(fd[0], F_SETFD,fd[0] > PL_maxsysfd) < 0) ||
715 (fcntl(fd[1], F_SETFD,fd[1] > PL_maxsysfd) < 0))
723 DIE(aTHX_ PL_no_func, "pipe");
737 gv = MUTABLE_GV(POPs);
741 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
743 return tied_method0(SV_CONST(FILENO), SP, MUTABLE_SV(io), mg);
746 if (io && IoDIRP(io)) {
747 #if defined(HAS_DIRFD) || defined(HAS_DIR_DD_FD)
748 PUSHi(my_dirfd(IoDIRP(io)));
750 #elif defined(ENOTSUP)
751 errno = ENOTSUP; /* Operation not supported */
753 #elif defined(EOPNOTSUPP)
754 errno = EOPNOTSUPP; /* Operation not supported on socket */
757 errno = EINVAL; /* Invalid argument */
762 if (!io || !(fp = IoIFP(io))) {
763 /* Can't do this because people seem to do things like
764 defined(fileno($foo)) to check whether $foo is a valid fh.
771 PUSHi(PerlIO_fileno(fp));
782 if (MAXARG < 1 || (!TOPs && !POPs)) {
783 anum = PerlLIO_umask(022);
784 /* setting it to 022 between the two calls to umask avoids
785 * to have a window where the umask is set to 0 -- meaning
786 * that another thread could create world-writeable files. */
788 (void)PerlLIO_umask(anum);
791 anum = PerlLIO_umask(POPi);
792 TAINT_PROPER("umask");
795 /* Only DIE if trying to restrict permissions on "user" (self).
796 * Otherwise it's harmless and more useful to just return undef
797 * since 'group' and 'other' concepts probably don't exist here. */
798 if (MAXARG >= 1 && (TOPs||POPs) && (POPi & 0700))
799 DIE(aTHX_ "umask not implemented");
800 XPUSHs(&PL_sv_undef);
819 gv = MUTABLE_GV(POPs);
823 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
825 /* This takes advantage of the implementation of the varargs
826 function, which I don't think that the optimiser will be able to
827 figure out. Although, as it's a static function, in theory it
829 return Perl_tied_method(aTHX_ SV_CONST(BINMODE), SP, MUTABLE_SV(io), mg,
830 G_SCALAR|TIED_METHOD_MORTALIZE_NOT_NEEDED,
831 discp ? 1 : 0, discp);
835 if (!io || !(fp = IoIFP(io))) {
837 SETERRNO(EBADF,RMS_IFI);
844 const char *d = NULL;
847 d = SvPV_const(discp, len);
848 mode = mode_from_discipline(d, len);
849 if (PerlIO_binmode(aTHX_ fp, IoTYPE(io), mode, d)) {
850 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
851 if (!PerlIO_binmode(aTHX_ IoOFP(io), IoTYPE(io), mode, d)) {
872 const I32 markoff = MARK - PL_stack_base;
873 const char *methname;
874 int how = PERL_MAGIC_tied;
878 switch(SvTYPE(varsv)) {
882 methname = "TIEHASH";
883 if (HvLAZYDEL(varsv) && (entry = HvEITER((HV *)varsv))) {
884 HvLAZYDEL_off(varsv);
885 hv_free_ent((HV *)varsv, entry);
887 HvEITER_set(MUTABLE_HV(varsv), 0);
891 methname = "TIEARRAY";
892 if (!AvREAL(varsv)) {
894 Perl_croak(aTHX_ "Cannot tie unreifiable array");
895 av_clear((AV *)varsv);
902 if (isGV_with_GP(varsv) && !SvFAKE(varsv)) {
903 methname = "TIEHANDLE";
904 how = PERL_MAGIC_tiedscalar;
905 /* For tied filehandles, we apply tiedscalar magic to the IO
906 slot of the GP rather than the GV itself. AMS 20010812 */
908 GvIOp(varsv) = newIO();
909 varsv = MUTABLE_SV(GvIOp(varsv));
912 if (SvTYPE(varsv) == SVt_PVLV && LvTYPE(varsv) == 'y') {
913 vivify_defelem(varsv);
914 varsv = LvTARG(varsv);
918 methname = "TIESCALAR";
919 how = PERL_MAGIC_tiedscalar;
923 if (sv_isobject(*MARK)) { /* Calls GET magic. */
924 ENTER_with_name("call_TIE");
925 PUSHSTACKi(PERLSI_MAGIC);
927 EXTEND(SP,(I32)items);
931 call_method(methname, G_SCALAR);
934 /* Can't use call_method here, else this: fileno FOO; tie @a, "FOO"
935 * will attempt to invoke IO::File::TIEARRAY, with (best case) the
936 * wrong error message, and worse case, supreme action at a distance.
937 * (Sorry obfuscation writers. You're not going to be given this one.)
939 stash = gv_stashsv(*MARK, 0);
940 if (!stash || !(gv = gv_fetchmethod(stash, methname))) {
941 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%"SVf"\"",
942 methname, SVfARG(SvOK(*MARK) ? *MARK : &PL_sv_no));
944 ENTER_with_name("call_TIE");
945 PUSHSTACKi(PERLSI_MAGIC);
947 EXTEND(SP,(I32)items);
951 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
957 if (sv_isobject(sv)) {
958 sv_unmagic(varsv, how);
959 /* Croak if a self-tie on an aggregate is attempted. */
960 if (varsv == SvRV(sv) &&
961 (SvTYPE(varsv) == SVt_PVAV ||
962 SvTYPE(varsv) == SVt_PVHV))
964 "Self-ties of arrays and hashes are not supported");
965 sv_magic(varsv, (SvRV(sv) == varsv ? NULL : sv), how, NULL, 0);
967 LEAVE_with_name("call_TIE");
968 SP = PL_stack_base + markoff;
974 /* also used for: pp_dbmclose() */
981 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
982 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
984 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
987 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
988 !(sv = defelem_target(sv, NULL))) RETPUSHUNDEF;
990 if ((mg = SvTIED_mg(sv, how))) {
991 SV * const obj = SvRV(SvTIED_obj(sv, mg));
993 GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE);
995 if (gv && isGV(gv) && (cv = GvCV(gv))) {
997 PUSHs(SvTIED_obj(MUTABLE_SV(gv), mg));
998 mXPUSHi(SvREFCNT(obj) - 1);
1000 ENTER_with_name("call_UNTIE");
1001 call_sv(MUTABLE_SV(cv), G_VOID);
1002 LEAVE_with_name("call_UNTIE");
1005 else if (mg && SvREFCNT(obj) > 1) {
1006 Perl_ck_warner(aTHX_ packWARN(WARN_UNTIE),
1007 "untie attempted while %"UVuf" inner references still exist",
1008 (UV)SvREFCNT(obj) - 1 ) ;
1012 sv_unmagic(sv, how) ;
1021 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
1022 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
1024 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1027 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1028 !(sv = defelem_target(sv, NULL))) goto ret_undef;
1030 if ((mg = SvTIED_mg(sv, how))) {
1031 SETs(SvTIED_obj(sv, mg));
1032 return NORMAL; /* PUTBACK not needed, pp_tied never moves SP */
1046 HV * const hv = MUTABLE_HV(POPs);
1047 SV * const sv = newSVpvs_flags("AnyDBM_File", SVs_TEMP);
1048 stash = gv_stashsv(sv, 0);
1049 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
1051 require_pv("AnyDBM_File.pm");
1053 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH")))
1054 DIE(aTHX_ "No dbm on this machine");
1064 mPUSHu(O_RDWR|O_CREAT);
1068 if (!SvOK(right)) right = &PL_sv_no;
1072 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1075 if (!sv_isobject(TOPs)) {
1083 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1085 if (sv_isobject(TOPs))
1090 sv_unmagic(MUTABLE_SV(hv), PERL_MAGIC_tied);
1091 sv_magic(MUTABLE_SV(hv), TOPs, PERL_MAGIC_tied, NULL, 0);
1108 struct timeval timebuf;
1109 struct timeval *tbuf = &timebuf;
1112 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1117 # if BYTEORDER & 0xf0000
1118 # define ORDERBYTE (0x88888888 - BYTEORDER)
1120 # define ORDERBYTE (0x4444 - BYTEORDER)
1126 for (i = 1; i <= 3; i++) {
1127 SV * const sv = SP[i];
1131 if (SvREADONLY(sv)) {
1132 if (!(SvPOK(sv) && SvCUR(sv) == 0))
1133 Perl_croak_no_modify();
1135 else if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
1138 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
1139 "Non-string passed as bitmask");
1140 SvPV_force_nomg_nolen(sv); /* force string conversion */
1147 /* little endians can use vecs directly */
1148 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1155 masksize = NFDBITS / NBBY;
1157 masksize = sizeof(long); /* documented int, everyone seems to use long */
1159 Zero(&fd_sets[0], 4, char*);
1162 # if SELECT_MIN_BITS == 1
1163 growsize = sizeof(fd_set);
1165 # if defined(__GLIBC__) && defined(__FD_SETSIZE)
1166 # undef SELECT_MIN_BITS
1167 # define SELECT_MIN_BITS __FD_SETSIZE
1169 /* If SELECT_MIN_BITS is greater than one we most probably will want
1170 * to align the sizes with SELECT_MIN_BITS/8 because for example
1171 * in many little-endian (Intel, Alpha) systems (Linux, OS/2, Digital
1172 * UNIX, Solaris, Darwin) the smallest quantum select() operates
1173 * on (sets/tests/clears bits) is 32 bits. */
1174 growsize = maxlen + (SELECT_MIN_BITS/8 - (maxlen % (SELECT_MIN_BITS/8)));
1180 value = SvNV_nomg(sv);
1183 timebuf.tv_sec = (long)value;
1184 value -= (NV)timebuf.tv_sec;
1185 timebuf.tv_usec = (long)(value * 1000000.0);
1190 for (i = 1; i <= 3; i++) {
1192 if (!SvOK(sv) || SvCUR(sv) == 0) {
1199 Sv_Grow(sv, growsize);
1203 while (++j <= growsize) {
1207 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1209 Newx(fd_sets[i], growsize, char);
1210 for (offset = 0; offset < growsize; offset += masksize) {
1211 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1212 fd_sets[i][j+offset] = s[(k % masksize) + offset];
1215 fd_sets[i] = SvPVX(sv);
1219 #ifdef PERL_IRIX5_SELECT_TIMEVAL_VOID_CAST
1220 /* Can't make just the (void*) conditional because that would be
1221 * cpp #if within cpp macro, and not all compilers like that. */
1222 nfound = PerlSock_select(
1224 (Select_fd_set_t) fd_sets[1],
1225 (Select_fd_set_t) fd_sets[2],
1226 (Select_fd_set_t) fd_sets[3],
1227 (void*) tbuf); /* Workaround for compiler bug. */
1229 nfound = PerlSock_select(
1231 (Select_fd_set_t) fd_sets[1],
1232 (Select_fd_set_t) fd_sets[2],
1233 (Select_fd_set_t) fd_sets[3],
1236 for (i = 1; i <= 3; i++) {
1239 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1241 for (offset = 0; offset < growsize; offset += masksize) {
1242 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1243 s[(k % masksize) + offset] = fd_sets[i][j+offset];
1245 Safefree(fd_sets[i]);
1252 if (GIMME_V == G_ARRAY && tbuf) {
1253 value = (NV)(timebuf.tv_sec) +
1254 (NV)(timebuf.tv_usec) / 1000000.0;
1259 DIE(aTHX_ "select not implemented");
1267 =for apidoc setdefout
1269 Sets PL_defoutgv, the default file handle for output, to the passed in
1270 typeglob. As PL_defoutgv "owns" a reference on its typeglob, the reference
1271 count of the passed in typeglob is increased by one, and the reference count
1272 of the typeglob that PL_defoutgv points to is decreased by one.
1278 Perl_setdefout(pTHX_ GV *gv)
1280 PERL_ARGS_ASSERT_SETDEFOUT;
1281 SvREFCNT_inc_simple_void_NN(gv);
1282 SvREFCNT_dec(PL_defoutgv);
1290 GV * const newdefout = (PL_op->op_private > 0) ? (MUTABLE_GV(POPs)) : NULL;
1291 GV * egv = GvEGVx(PL_defoutgv);
1296 hv = isGV_with_GP(egv) ? GvSTASH(egv) : NULL;
1297 gvp = hv && HvENAME(hv)
1298 ? (GV**)hv_fetch(hv, GvNAME(egv), HEK_UTF8(GvNAME_HEK(egv)) ? -GvNAMELEN(egv) : GvNAMELEN(egv), FALSE)
1300 if (gvp && *gvp == egv) {
1301 gv_efullname4(TARG, PL_defoutgv, NULL, TRUE);
1305 mXPUSHs(newRV(MUTABLE_SV(egv)));
1309 if (!GvIO(newdefout))
1310 gv_IOadd(newdefout);
1311 setdefout(newdefout);
1321 MAXARG==0 || (!TOPs && !POPs) ? PL_stdingv : MUTABLE_GV(POPs);
1322 IO *const io = GvIO(gv);
1328 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1330 const U32 gimme = GIMME_V;
1331 Perl_tied_method(aTHX_ SV_CONST(GETC), SP, MUTABLE_SV(io), mg, gimme, 0);
1332 if (gimme == G_SCALAR) {
1334 SvSetMagicSV_nosteal(TARG, TOPs);
1339 if (!gv || do_eof(gv)) { /* make sure we have fp with something */
1340 if (!io || (!IoIFP(io) && IoTYPE(io) != IoTYPE_WRONLY))
1342 SETERRNO(EBADF,RMS_IFI);
1346 sv_setpvs(TARG, " ");
1347 *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
1348 if (PerlIO_isutf8(IoIFP(GvIOp(gv)))) {
1349 /* Find out how many bytes the char needs */
1350 Size_t len = UTF8SKIP(SvPVX_const(TARG));
1353 len = PerlIO_read(IoIFP(GvIOp(gv)),SvPVX(TARG)+1,len-1);
1354 SvCUR_set(TARG,1+len);
1358 else SvUTF8_off(TARG);
1364 S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
1367 const I32 gimme = GIMME_V;
1369 PERL_ARGS_ASSERT_DOFORM;
1372 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
1377 PUSHBLOCK(cx, CXt_FORMAT, PL_stack_sp);
1378 PUSHFORMAT(cx, retop);
1379 if (CvDEPTH(cv) >= 2) {
1380 PERL_STACK_OVERFLOW_CHECK();
1381 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1384 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1386 setdefout(gv); /* locally select filehandle so $% et al work */
1404 gv = MUTABLE_GV(POPs);
1421 tmpsv = sv_newmortal();
1422 gv_efullname4(tmpsv, fgv, NULL, FALSE);
1423 DIE(aTHX_ "Undefined format \"%"SVf"\" called", SVfARG(tmpsv));
1425 IoFLAGS(io) &= ~IOf_DIDTOP;
1426 RETURNOP(doform(cv,gv,PL_op->op_next));
1432 GV * const gv = cxstack[cxstack_ix].blk_format.gv;
1433 IO * const io = GvIOp(gv);
1440 bool is_return = cBOOL(PL_op->op_type == OP_RETURN);
1442 if (is_return || !io || !(ofp = IoOFP(io)))
1445 DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
1446 (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
1448 if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
1449 PL_formtarget != PL_toptarget)
1453 if (!IoTOP_GV(io)) {
1456 if (!IoTOP_NAME(io)) {
1458 if (!IoFMT_NAME(io))
1459 IoFMT_NAME(io) = savepv(GvNAME(gv));
1460 topname = sv_2mortal(Perl_newSVpvf(aTHX_ "%"HEKf"_TOP",
1461 HEKfARG(GvNAME_HEK(gv))));
1462 topgv = gv_fetchsv(topname, 0, SVt_PVFM);
1463 if ((topgv && GvFORM(topgv)) ||
1464 !gv_fetchpvs("top", GV_NOTQUAL, SVt_PVFM))
1465 IoTOP_NAME(io) = savesvpv(topname);
1467 IoTOP_NAME(io) = savepvs("top");
1469 topgv = gv_fetchpv(IoTOP_NAME(io), 0, SVt_PVFM);
1470 if (!topgv || !GvFORM(topgv)) {
1471 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1474 IoTOP_GV(io) = topgv;
1476 if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear. It still doesn't fit. */
1477 I32 lines = IoLINES_LEFT(io);
1478 const char *s = SvPVX_const(PL_formtarget);
1479 if (lines <= 0) /* Yow, header didn't even fit!!! */
1481 while (lines-- > 0) {
1482 s = strchr(s, '\n');
1488 const STRLEN save = SvCUR(PL_formtarget);
1489 SvCUR_set(PL_formtarget, s - SvPVX_const(PL_formtarget));
1490 do_print(PL_formtarget, ofp);
1491 SvCUR_set(PL_formtarget, save);
1492 sv_chop(PL_formtarget, s);
1493 FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
1496 if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
1497 do_print(GvSV(gv_fetchpvs("\f", GV_ADD, SVt_PV)), ofp);
1498 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1500 PL_formtarget = PL_toptarget;
1501 IoFLAGS(io) |= IOf_DIDTOP;
1503 assert(fgv); /* IoTOP_GV(io) should have been set above */
1506 SV * const sv = sv_newmortal();
1507 gv_efullname4(sv, fgv, NULL, FALSE);
1508 DIE(aTHX_ "Undefined top format \"%"SVf"\" called", SVfARG(sv));
1510 return doform(cv, gv, PL_op);
1514 POPBLOCK(cx,PL_curpm);
1515 retop = cx->blk_sub.retop;
1517 SP = newsp; /* ignore retval of formline */
1521 /* XXX the semantics of doing 'return' in a format aren't documented.
1522 * Currently we ignore any args to 'return' and just return
1523 * a single undef in both scalar and list contexts
1525 PUSHs(&PL_sv_undef);
1526 else if (!io || !(fp = IoOFP(io))) {
1527 if (io && IoIFP(io))
1528 report_wrongway_fh(gv, '<');
1534 if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
1535 Perl_ck_warner(aTHX_ packWARN(WARN_IO), "page overflow");
1537 if (!do_print(PL_formtarget, fp))
1540 FmLINES(PL_formtarget) = 0;
1541 SvCUR_set(PL_formtarget, 0);
1542 *SvEND(PL_formtarget) = '\0';
1543 if (IoFLAGS(io) & IOf_FLUSH)
1544 (void)PerlIO_flush(fp);
1548 PL_formtarget = PL_bodytarget;
1549 PERL_UNUSED_VAR(gimme);
1555 dSP; dMARK; dORIGMARK;
1559 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
1560 IO *const io = GvIO(gv);
1562 /* Treat empty list as "" */
1563 if (MARK == SP) XPUSHs(&PL_sv_no);
1566 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1568 if (MARK == ORIGMARK) {
1571 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
1574 return Perl_tied_method(aTHX_ SV_CONST(PRINTF), mark - 1, MUTABLE_SV(io),
1576 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1583 SETERRNO(EBADF,RMS_IFI);
1586 else if (!(fp = IoOFP(io))) {
1588 report_wrongway_fh(gv, '<');
1589 else if (ckWARN(WARN_CLOSED))
1591 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
1595 SV *sv = sv_newmortal();
1596 do_sprintf(sv, SP - MARK, MARK + 1);
1597 if (!do_print(sv, fp))
1600 if (IoFLAGS(io) & IOf_FLUSH)
1601 if (PerlIO_flush(fp) == EOF)
1610 PUSHs(&PL_sv_undef);
1617 const int perm = (MAXARG > 3 && (TOPs || POPs)) ? POPi : 0666;
1618 const int mode = POPi;
1619 SV * const sv = POPs;
1620 GV * const gv = MUTABLE_GV(POPs);
1623 /* Need TIEHANDLE method ? */
1624 const char * const tmps = SvPV_const(sv, len);
1625 if (do_open_raw(gv, tmps, len, mode, perm)) {
1626 IoLINES(GvIOp(gv)) = 0;
1630 PUSHs(&PL_sv_undef);
1636 /* also used for: pp_read() and pp_recv() (where supported) */
1640 dSP; dMARK; dORIGMARK; dTARGET;
1654 bool charstart = FALSE;
1655 STRLEN charskip = 0;
1657 GV * const gv = MUTABLE_GV(*++MARK);
1660 if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD)
1661 && gv && (io = GvIO(gv)) )
1663 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1665 return Perl_tied_method(aTHX_ SV_CONST(READ), mark - 1, MUTABLE_SV(io), mg,
1666 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1675 sv_setpvs(bufsv, "");
1676 length = SvIVx(*++MARK);
1678 DIE(aTHX_ "Negative length");
1681 offset = SvIVx(*++MARK);
1685 if (!io || !IoIFP(io)) {
1687 SETERRNO(EBADF,RMS_IFI);
1691 /* Note that fd can here validly be -1, don't check it yet. */
1692 fd = PerlIO_fileno(IoIFP(io));
1694 if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
1695 buffer = SvPVutf8_force(bufsv, blen);
1696 /* UTF-8 may not have been set if they are all low bytes */
1701 buffer = SvPV_force(bufsv, blen);
1702 buffer_utf8 = !IN_BYTES && SvUTF8(bufsv);
1704 if (DO_UTF8(bufsv)) {
1705 blen = sv_len_utf8_nomg(bufsv);
1714 if (PL_op->op_type == OP_RECV) {
1715 Sock_size_t bufsize;
1716 char namebuf[MAXPATHLEN];
1718 SETERRNO(EBADF,SS_IVCHAN);
1721 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
1722 bufsize = sizeof (struct sockaddr_in);
1724 bufsize = sizeof namebuf;
1726 #ifdef OS2 /* At least Warp3+IAK: only the first byte of bufsize set */
1730 buffer = SvGROW(bufsv, (STRLEN)(length+1));
1731 /* 'offset' means 'flags' here */
1732 count = PerlSock_recvfrom(fd, buffer, length, offset,
1733 (struct sockaddr *)namebuf, &bufsize);
1736 /* MSG_TRUNC can give oversized count; quietly lose it */
1739 SvCUR_set(bufsv, count);
1740 *SvEND(bufsv) = '\0';
1741 (void)SvPOK_only(bufsv);
1745 /* This should not be marked tainted if the fp is marked clean */
1746 if (!(IoFLAGS(io) & IOf_UNTAINT))
1747 SvTAINTED_on(bufsv);
1749 #if defined(__CYGWIN__)
1750 /* recvfrom() on cygwin doesn't set bufsize at all for
1751 connected sockets, leaving us with trash in the returned
1752 name, so use the same test as the Win32 code to check if it
1753 wasn't set, and set it [perl #118843] */
1754 if (bufsize == sizeof namebuf)
1757 sv_setpvn(TARG, namebuf, bufsize);
1763 if (-offset > (SSize_t)blen)
1764 DIE(aTHX_ "Offset outside string");
1767 if (DO_UTF8(bufsv)) {
1768 /* convert offset-as-chars to offset-as-bytes */
1769 if (offset >= (SSize_t)blen)
1770 offset += SvCUR(bufsv) - blen;
1772 offset = utf8_hop((U8 *)buffer,offset) - (U8 *) buffer;
1776 /* Reestablish the fd in case it shifted from underneath us. */
1777 fd = PerlIO_fileno(IoIFP(io));
1779 orig_size = SvCUR(bufsv);
1780 /* Allocating length + offset + 1 isn't perfect in the case of reading
1781 bytes from a byte file handle into a UTF8 buffer, but it won't harm us
1783 (should be 2 * length + offset + 1, or possibly something longer if
1784 IN_ENCODING Is true) */
1785 buffer = SvGROW(bufsv, (STRLEN)(length+offset+1));
1786 if (offset > 0 && offset > (SSize_t)orig_size) { /* Zero any newly allocated space */
1787 Zero(buffer+orig_size, offset-orig_size, char);
1789 buffer = buffer + offset;
1791 read_target = bufsv;
1793 /* Best to read the bytes into a new SV, upgrade that to UTF8, then
1794 concatenate it to the current buffer. */
1796 /* Truncate the existing buffer to the start of where we will be
1798 SvCUR_set(bufsv, offset);
1800 read_target = sv_newmortal();
1801 SvUPGRADE(read_target, SVt_PV);
1802 buffer = SvGROW(read_target, (STRLEN)(length + 1));
1805 if (PL_op->op_type == OP_SYSREAD) {
1806 #ifdef PERL_SOCK_SYSREAD_IS_RECV
1807 if (IoTYPE(io) == IoTYPE_SOCKET) {
1809 SETERRNO(EBADF,SS_IVCHAN);
1813 count = PerlSock_recv(fd, buffer, length, 0);
1819 SETERRNO(EBADF,RMS_IFI);
1823 count = PerlLIO_read(fd, buffer, length);
1828 count = PerlIO_read(IoIFP(io), buffer, length);
1829 /* PerlIO_read() - like fread() returns 0 on both error and EOF */
1830 if (count == 0 && PerlIO_error(IoIFP(io)))
1834 if (IoTYPE(io) == IoTYPE_WRONLY)
1835 report_wrongway_fh(gv, '>');
1838 SvCUR_set(read_target, count+(buffer - SvPVX_const(read_target)));
1839 *SvEND(read_target) = '\0';
1840 (void)SvPOK_only(read_target);
1841 if (fp_utf8 && !IN_BYTES) {
1842 /* Look at utf8 we got back and count the characters */
1843 const char *bend = buffer + count;
1844 while (buffer < bend) {
1846 skip = UTF8SKIP(buffer);
1849 if (buffer - charskip + skip > bend) {
1850 /* partial character - try for rest of it */
1851 length = skip - (bend-buffer);
1852 offset = bend - SvPVX_const(bufsv);
1864 /* If we have not 'got' the number of _characters_ we 'wanted' get some more
1865 provided amount read (count) was what was requested (length)
1867 if (got < wanted && count == length) {
1868 length = wanted - got;
1869 offset = bend - SvPVX_const(bufsv);
1872 /* return value is character count */
1876 else if (buffer_utf8) {
1877 /* Let svcatsv upgrade the bytes we read in to utf8.
1878 The buffer is a mortal so will be freed soon. */
1879 sv_catsv_nomg(bufsv, read_target);
1882 /* This should not be marked tainted if the fp is marked clean */
1883 if (!(IoFLAGS(io) & IOf_UNTAINT))
1884 SvTAINTED_on(bufsv);
1895 /* also used for: pp_send() where defined */
1899 dSP; dMARK; dORIGMARK; dTARGET;
1904 STRLEN orig_blen_bytes;
1905 const int op_type = PL_op->op_type;
1908 GV *const gv = MUTABLE_GV(*++MARK);
1909 IO *const io = GvIO(gv);
1912 if (op_type == OP_SYSWRITE && io) {
1913 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1915 if (MARK == SP - 1) {
1917 mXPUSHi(sv_len(sv));
1921 return Perl_tied_method(aTHX_ SV_CONST(WRITE), mark - 1, MUTABLE_SV(io), mg,
1922 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1932 if (!io || !IoIFP(io) || IoTYPE(io) == IoTYPE_RDONLY) {
1934 if (io && IoIFP(io))
1935 report_wrongway_fh(gv, '<');
1938 SETERRNO(EBADF,RMS_IFI);
1941 fd = PerlIO_fileno(IoIFP(io));
1943 SETERRNO(EBADF,SS_IVCHAN);
1948 /* Do this first to trigger any overloading. */
1949 buffer = SvPV_const(bufsv, blen);
1950 orig_blen_bytes = blen;
1951 doing_utf8 = DO_UTF8(bufsv);
1953 if (PerlIO_isutf8(IoIFP(io))) {
1954 if (!SvUTF8(bufsv)) {
1955 /* We don't modify the original scalar. */
1956 tmpbuf = bytes_to_utf8((const U8*) buffer, &blen);
1957 buffer = (char *) tmpbuf;
1961 else if (doing_utf8) {
1962 STRLEN tmplen = blen;
1963 U8 * const result = bytes_from_utf8((const U8*) buffer, &tmplen, &doing_utf8);
1966 buffer = (char *) tmpbuf;
1970 assert((char *)result == buffer);
1971 Perl_croak(aTHX_ "Wide character in %s", OP_DESC(PL_op));
1976 if (op_type == OP_SEND) {
1977 const int flags = SvIVx(*++MARK);
1980 char * const sockbuf = SvPVx(*++MARK, mlen);
1981 retval = PerlSock_sendto(fd, buffer, blen,
1982 flags, (struct sockaddr *)sockbuf, mlen);
1985 retval = PerlSock_send(fd, buffer, blen, flags);
1991 Size_t length = 0; /* This length is in characters. */
1997 /* The SV is bytes, and we've had to upgrade it. */
1998 blen_chars = orig_blen_bytes;
2000 /* The SV really is UTF-8. */
2001 /* Don't call sv_len_utf8 on a magical or overloaded
2002 scalar, as we might get back a different result. */
2003 blen_chars = sv_or_pv_len_utf8(bufsv, buffer, blen);
2010 length = blen_chars;
2012 #if Size_t_size > IVSIZE
2013 length = (Size_t)SvNVx(*++MARK);
2015 length = (Size_t)SvIVx(*++MARK);
2017 if ((SSize_t)length < 0) {
2019 DIE(aTHX_ "Negative length");
2024 offset = SvIVx(*++MARK);
2026 if (-offset > (IV)blen_chars) {
2028 DIE(aTHX_ "Offset outside string");
2030 offset += blen_chars;
2031 } else if (offset > (IV)blen_chars) {
2033 DIE(aTHX_ "Offset outside string");
2037 if (length > blen_chars - offset)
2038 length = blen_chars - offset;
2040 /* Here we convert length from characters to bytes. */
2041 if (tmpbuf || SvGMAGICAL(bufsv) || SvAMAGIC(bufsv)) {
2042 /* Either we had to convert the SV, or the SV is magical, or
2043 the SV has overloading, in which case we can't or mustn't
2044 or mustn't call it again. */
2046 buffer = (const char*)utf8_hop((const U8 *)buffer, offset);
2047 length = utf8_hop((U8 *)buffer, length) - (U8 *)buffer;
2049 /* It's a real UTF-8 SV, and it's not going to change under
2050 us. Take advantage of any cache. */
2052 I32 len_I32 = length;
2054 /* Convert the start and end character positions to bytes.
2055 Remember that the second argument to sv_pos_u2b is relative
2057 sv_pos_u2b(bufsv, &start, &len_I32);
2064 buffer = buffer+offset;
2066 #ifdef PERL_SOCK_SYSWRITE_IS_SEND
2067 if (IoTYPE(io) == IoTYPE_SOCKET) {
2068 retval = PerlSock_send(fd, buffer, length, 0);
2073 /* See the note at doio.c:do_print about filesize limits. --jhi */
2074 retval = PerlLIO_write(fd, buffer, length);
2082 retval = utf8_length((U8*)buffer, (U8*)buffer + retval);
2085 #if Size_t_size > IVSIZE
2105 * in Perl 5.12 and later, the additional parameter is a bitmask:
2108 * 2 = eof() <- ARGV magic
2110 * I'll rely on the compiler's trace flow analysis to decide whether to
2111 * actually assign this out here, or punt it into the only block where it is
2112 * used. Doing it out here is DRY on the condition logic.
2117 gv = PL_last_in_gv = MUTABLE_GV(POPs); /* eof(FH) */
2123 if (PL_op->op_flags & OPf_SPECIAL) {
2124 gv = PL_last_in_gv = GvEGVx(PL_argvgv); /* eof() - ARGV magic */
2128 gv = PL_last_in_gv; /* eof */
2136 if ((io = GvIO(gv)) && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) {
2137 return tied_method1(SV_CONST(EOF), SP, MUTABLE_SV(io), mg, newSVuv(which));
2140 if (!MAXARG && (PL_op->op_flags & OPf_SPECIAL)) { /* eof() */
2141 if (io && !IoIFP(io)) {
2142 if ((IoFLAGS(io) & IOf_START) && av_tindex(GvAVn(gv)) < 0) {
2145 IoFLAGS(io) &= ~IOf_START;
2146 do_open6(gv, "-", 1, NULL, NULL, 0);
2154 *svp = newSVpvs("-");
2156 else if (!nextargv(gv, FALSE))
2161 PUSHs(boolSV(do_eof(gv)));
2171 if (MAXARG != 0 && (TOPs || POPs))
2172 PL_last_in_gv = MUTABLE_GV(POPs);
2179 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2181 return tied_method0(SV_CONST(TELL), SP, MUTABLE_SV(io), mg);
2186 SETERRNO(EBADF,RMS_IFI);
2191 #if LSEEKSIZE > IVSIZE
2192 PUSHn( do_tell(gv) );
2194 PUSHi( do_tell(gv) );
2200 /* also used for: pp_seek() */
2205 const int whence = POPi;
2206 #if LSEEKSIZE > IVSIZE
2207 const Off_t offset = (Off_t)SvNVx(POPs);
2209 const Off_t offset = (Off_t)SvIVx(POPs);
2212 GV * const gv = PL_last_in_gv = MUTABLE_GV(POPs);
2213 IO *const io = GvIO(gv);
2216 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2218 #if LSEEKSIZE > IVSIZE
2219 SV *const offset_sv = newSVnv((NV) offset);
2221 SV *const offset_sv = newSViv(offset);
2224 return tied_method2(SV_CONST(SEEK), SP, MUTABLE_SV(io), mg, offset_sv,
2229 if (PL_op->op_type == OP_SEEK)
2230 PUSHs(boolSV(do_seek(gv, offset, whence)));
2232 const Off_t sought = do_sysseek(gv, offset, whence);
2234 PUSHs(&PL_sv_undef);
2236 SV* const sv = sought ?
2237 #if LSEEKSIZE > IVSIZE
2242 : newSVpvn(zero_but_true, ZBTLEN);
2252 /* There seems to be no consensus on the length type of truncate()
2253 * and ftruncate(), both off_t and size_t have supporters. In
2254 * general one would think that when using large files, off_t is
2255 * at least as wide as size_t, so using an off_t should be okay. */
2256 /* XXX Configure probe for the length type of *truncate() needed XXX */
2259 #if Off_t_size > IVSIZE
2264 /* Checking for length < 0 is problematic as the type might or
2265 * might not be signed: if it is not, clever compilers will moan. */
2266 /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
2269 SV * const sv = POPs;
2274 if (PL_op->op_flags & OPf_SPECIAL
2275 ? (tmpgv = gv_fetchsv(sv, 0, SVt_PVIO), 1)
2276 : !!(tmpgv = MAYBE_DEREF_GV(sv)) ) {
2283 TAINT_PROPER("truncate");
2284 if (!(fp = IoIFP(io))) {
2288 int fd = PerlIO_fileno(fp);
2290 SETERRNO(EBADF,RMS_IFI);
2295 if (ftruncate(fd, len) < 0)
2297 if (my_chsize(fd, len) < 0)
2304 else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2305 io = MUTABLE_IO(SvRV(sv)); /* *main::FRED{IO} for example */
2306 goto do_ftruncate_io;
2309 const char * const name = SvPV_nomg_const_nolen(sv);
2310 TAINT_PROPER("truncate");
2312 if (truncate(name, len) < 0)
2319 #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
2320 mode |= O_LARGEFILE; /* Transparently largefiley. */
2323 /* On open(), the Win32 CRT tries to seek around text
2324 * files using 32-bit offsets, which causes the open()
2325 * to fail on large files, so open in binary mode.
2329 tmpfd = PerlLIO_open(name, mode);
2334 if (my_chsize(tmpfd, len) < 0)
2336 PerlLIO_close(tmpfd);
2345 SETERRNO(EBADF,RMS_IFI);
2351 /* also used for: pp_fcntl() */
2356 SV * const argsv = POPs;
2357 const unsigned int func = POPu;
2359 GV * const gv = MUTABLE_GV(POPs);
2360 IO * const io = GvIOn(gv);
2366 SETERRNO(EBADF,RMS_IFI); /* well, sort of... */
2370 if (SvPOK(argsv) || !SvNIOK(argsv)) {
2373 s = SvPV_force(argsv, len);
2374 need = IOCPARM_LEN(func);
2376 s = Sv_Grow(argsv, need + 1);
2377 SvCUR_set(argsv, need);
2380 s[SvCUR(argsv)] = 17; /* a little sanity check here */
2383 retval = SvIV(argsv);
2384 s = INT2PTR(char*,retval); /* ouch */
2387 optype = PL_op->op_type;
2388 TAINT_PROPER(PL_op_desc[optype]);
2390 if (optype == OP_IOCTL)
2392 retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
2394 DIE(aTHX_ "ioctl is not implemented");
2398 DIE(aTHX_ "fcntl is not implemented");
2400 #if defined(OS2) && defined(__EMX__)
2401 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
2403 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, s);
2407 #if defined(HAS_IOCTL) || defined(HAS_FCNTL)
2409 if (s[SvCUR(argsv)] != 17)
2410 DIE(aTHX_ "Possible memory corruption: %s overflowed 3rd argument",
2412 s[SvCUR(argsv)] = 0; /* put our null back */
2413 SvSETMAGIC(argsv); /* Assume it has changed */
2422 PUSHp(zero_but_true, ZBTLEN);
2433 const int argtype = POPi;
2434 GV * const gv = MUTABLE_GV(POPs);
2435 IO *const io = GvIO(gv);
2436 PerlIO *const fp = io ? IoIFP(io) : NULL;
2438 /* XXX Looks to me like io is always NULL at this point */
2440 (void)PerlIO_flush(fp);
2441 value = (I32)(PerlLIO_flock(PerlIO_fileno(fp), argtype) >= 0);
2446 SETERRNO(EBADF,RMS_IFI);
2451 DIE(aTHX_ PL_no_func, "flock");
2462 const int protocol = POPi;
2463 const int type = POPi;
2464 const int domain = POPi;
2465 GV * const gv = MUTABLE_GV(POPs);
2466 IO * const io = GvIOn(gv);
2470 do_close(gv, FALSE);
2472 TAINT_PROPER("socket");
2473 fd = PerlSock_socket(domain, type, protocol);
2475 SETERRNO(EBADF,RMS_IFI);
2478 IoIFP(io) = PerlIO_fdopen(fd, "r"SOCKET_OPEN_MODE); /* stdio gets confused about sockets */
2479 IoOFP(io) = PerlIO_fdopen(fd, "w"SOCKET_OPEN_MODE);
2480 IoTYPE(io) = IoTYPE_SOCKET;
2481 if (!IoIFP(io) || !IoOFP(io)) {
2482 if (IoIFP(io)) PerlIO_close(IoIFP(io));
2483 if (IoOFP(io)) PerlIO_close(IoOFP(io));
2484 if (!IoIFP(io) && !IoOFP(io)) PerlLIO_close(fd);
2487 #if defined(HAS_FCNTL) && defined(F_SETFD)
2488 if (fcntl(fd, F_SETFD, fd > PL_maxsysfd) < 0) /* ensure close-on-exec */
2498 #if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
2501 const int protocol = POPi;
2502 const int type = POPi;
2503 const int domain = POPi;
2505 GV * const gv2 = MUTABLE_GV(POPs);
2506 IO * const io2 = GvIOn(gv2);
2507 GV * const gv1 = MUTABLE_GV(POPs);
2508 IO * const io1 = GvIOn(gv1);
2511 do_close(gv1, FALSE);
2513 do_close(gv2, FALSE);
2515 TAINT_PROPER("socketpair");
2516 if (PerlSock_socketpair(domain, type, protocol, fd) < 0)
2518 IoIFP(io1) = PerlIO_fdopen(fd[0], "r"SOCKET_OPEN_MODE);
2519 IoOFP(io1) = PerlIO_fdopen(fd[0], "w"SOCKET_OPEN_MODE);
2520 IoTYPE(io1) = IoTYPE_SOCKET;
2521 IoIFP(io2) = PerlIO_fdopen(fd[1], "r"SOCKET_OPEN_MODE);
2522 IoOFP(io2) = PerlIO_fdopen(fd[1], "w"SOCKET_OPEN_MODE);
2523 IoTYPE(io2) = IoTYPE_SOCKET;
2524 if (!IoIFP(io1) || !IoOFP(io1) || !IoIFP(io2) || !IoOFP(io2)) {
2525 if (IoIFP(io1)) PerlIO_close(IoIFP(io1));
2526 if (IoOFP(io1)) PerlIO_close(IoOFP(io1));
2527 if (!IoIFP(io1) && !IoOFP(io1)) PerlLIO_close(fd[0]);
2528 if (IoIFP(io2)) PerlIO_close(IoIFP(io2));
2529 if (IoOFP(io2)) PerlIO_close(IoOFP(io2));
2530 if (!IoIFP(io2) && !IoOFP(io2)) PerlLIO_close(fd[1]);
2533 #if defined(HAS_FCNTL) && defined(F_SETFD)
2534 /* ensure close-on-exec */
2535 if ((fcntl(fd[0],F_SETFD,fd[0] > PL_maxsysfd) < 0) ||
2536 (fcntl(fd[1],F_SETFD,fd[1] > PL_maxsysfd) < 0))
2542 DIE(aTHX_ PL_no_sock_func, "socketpair");
2548 /* also used for: pp_connect() */
2553 SV * const addrsv = POPs;
2554 /* OK, so on what platform does bind modify addr? */
2556 GV * const gv = MUTABLE_GV(POPs);
2557 IO * const io = GvIOn(gv);
2564 fd = PerlIO_fileno(IoIFP(io));
2568 addr = SvPV_const(addrsv, len);
2569 op_type = PL_op->op_type;
2570 TAINT_PROPER(PL_op_desc[op_type]);
2571 if ((op_type == OP_BIND
2572 ? PerlSock_bind(fd, (struct sockaddr *)addr, len)
2573 : PerlSock_connect(fd, (struct sockaddr *)addr, len))
2581 SETERRNO(EBADF,SS_IVCHAN);
2588 const int backlog = POPi;
2589 GV * const gv = MUTABLE_GV(POPs);
2590 IO * const io = GvIOn(gv);
2595 if (PerlSock_listen(PerlIO_fileno(IoIFP(io)), backlog) >= 0)
2602 SETERRNO(EBADF,SS_IVCHAN);
2610 char namebuf[MAXPATHLEN];
2611 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
2612 Sock_size_t len = sizeof (struct sockaddr_in);
2614 Sock_size_t len = sizeof namebuf;
2616 GV * const ggv = MUTABLE_GV(POPs);
2617 GV * const ngv = MUTABLE_GV(POPs);
2620 IO * const gstio = GvIO(ggv);
2621 if (!gstio || !IoIFP(gstio))
2625 fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *) namebuf, &len);
2628 /* Some platforms indicate zero length when an AF_UNIX client is
2629 * not bound. Simulate a non-zero-length sockaddr structure in
2631 namebuf[0] = 0; /* sun_len */
2632 namebuf[1] = AF_UNIX; /* sun_family */
2640 do_close(ngv, FALSE);
2641 IoIFP(nstio) = PerlIO_fdopen(fd, "r"SOCKET_OPEN_MODE);
2642 IoOFP(nstio) = PerlIO_fdopen(fd, "w"SOCKET_OPEN_MODE);
2643 IoTYPE(nstio) = IoTYPE_SOCKET;
2644 if (!IoIFP(nstio) || !IoOFP(nstio)) {
2645 if (IoIFP(nstio)) PerlIO_close(IoIFP(nstio));
2646 if (IoOFP(nstio)) PerlIO_close(IoOFP(nstio));
2647 if (!IoIFP(nstio) && !IoOFP(nstio)) PerlLIO_close(fd);
2650 #if defined(HAS_FCNTL) && defined(F_SETFD)
2651 if (fcntl(fd, F_SETFD, fd > PL_maxsysfd) < 0) /* ensure close-on-exec */
2655 #ifdef __SCO_VERSION__
2656 len = sizeof (struct sockaddr_in); /* OpenUNIX 8 somehow truncates info */
2659 PUSHp(namebuf, len);
2663 report_evil_fh(ggv);
2664 SETERRNO(EBADF,SS_IVCHAN);
2674 const int how = POPi;
2675 GV * const gv = MUTABLE_GV(POPs);
2676 IO * const io = GvIOn(gv);
2681 PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
2686 SETERRNO(EBADF,SS_IVCHAN);
2691 /* also used for: pp_gsockopt() */
2696 const int optype = PL_op->op_type;
2697 SV * const sv = (optype == OP_GSOCKOPT) ? sv_2mortal(newSV(257)) : POPs;
2698 const unsigned int optname = (unsigned int) POPi;
2699 const unsigned int lvl = (unsigned int) POPi;
2700 GV * const gv = MUTABLE_GV(POPs);
2701 IO * const io = GvIOn(gv);
2708 fd = PerlIO_fileno(IoIFP(io));
2714 (void)SvPOK_only(sv);
2718 if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
2721 /* XXX Configure test: does getsockopt set the length properly? */
2730 #if defined(__SYMBIAN32__)
2731 # define SETSOCKOPT_OPTION_VALUE_T void *
2733 # define SETSOCKOPT_OPTION_VALUE_T const char *
2735 /* XXX TODO: We need to have a proper type (a Configure probe,
2736 * etc.) for what the C headers think of the third argument of
2737 * setsockopt(), the option_value read-only buffer: is it
2738 * a "char *", or a "void *", const or not. Some compilers
2739 * don't take kindly to e.g. assuming that "char *" implicitly
2740 * promotes to a "void *", or to explicitly promoting/demoting
2741 * consts to non/vice versa. The "const void *" is the SUS
2742 * definition, but that does not fly everywhere for the above
2744 SETSOCKOPT_OPTION_VALUE_T buf;
2748 buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
2752 aint = (int)SvIV(sv);
2753 buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
2756 if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
2766 SETERRNO(EBADF,SS_IVCHAN);
2773 /* also used for: pp_getsockname() */
2778 const int optype = PL_op->op_type;
2779 GV * const gv = MUTABLE_GV(POPs);
2780 IO * const io = GvIOn(gv);
2788 sv = sv_2mortal(newSV(257));
2789 (void)SvPOK_only(sv);
2793 fd = PerlIO_fileno(IoIFP(io));
2797 case OP_GETSOCKNAME:
2798 if (PerlSock_getsockname(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2801 case OP_GETPEERNAME:
2802 if (PerlSock_getpeername(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2804 #if defined(VMS_DO_SOCKETS) && defined (DECCRTL_SOCKETS)
2806 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";
2807 /* If the call succeeded, make sure we don't have a zeroed port/addr */
2808 if (((struct sockaddr *)SvPVX_const(sv))->sa_family == AF_INET &&
2809 !memcmp(SvPVX_const(sv) + sizeof(u_short), nowhere,
2810 sizeof(u_short) + sizeof(struct in_addr))) {
2817 #ifdef BOGUS_GETNAME_RETURN
2818 /* Interactive Unix, getpeername() and getsockname()
2819 does not return valid namelen */
2820 if (len == BOGUS_GETNAME_RETURN)
2821 len = sizeof(struct sockaddr);
2830 SETERRNO(EBADF,SS_IVCHAN);
2839 /* also used for: pp_lstat() */
2850 if (PL_op->op_flags & OPf_REF ? (gv = cGVOP_gv, 1)
2851 : !!(sv=POPs, gv = MAYBE_DEREF_GV(sv))) {
2852 if (PL_op->op_type == OP_LSTAT) {
2853 if (gv != PL_defgv) {
2854 do_fstat_warning_check:
2855 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
2856 "lstat() on filehandle%s%"SVf,
2859 ? sv_2mortal(newSVhek(GvENAME_HEK(gv)))
2861 } else if (PL_laststype != OP_LSTAT)
2862 /* diag_listed_as: The stat preceding %s wasn't an lstat */
2863 Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat");
2866 if (gv != PL_defgv) {
2870 PL_laststype = OP_STAT;
2871 PL_statgv = gv ? gv : (GV *)io;
2872 sv_setpvs(PL_statname, "");
2878 int fd = PerlIO_fileno(IoIFP(io));
2880 PL_laststatval = -1;
2881 SETERRNO(EBADF,RMS_IFI);
2883 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
2886 } else if (IoDIRP(io)) {
2888 PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache);
2891 PL_laststatval = -1;
2894 else PL_laststatval = -1;
2895 if (PL_laststatval < 0 && !havefp) report_evil_fh(gv);
2898 if (PL_laststatval < 0) {
2904 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2905 io = MUTABLE_IO(SvRV(sv));
2906 if (PL_op->op_type == OP_LSTAT)
2907 goto do_fstat_warning_check;
2908 goto do_fstat_have_io;
2911 SvTAINTED_off(PL_statname); /* previous tainting irrelevant */
2912 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
2914 PL_laststype = PL_op->op_type;
2915 file = SvPV_nolen_const(PL_statname);
2916 if (PL_op->op_type == OP_LSTAT)
2917 PL_laststatval = PerlLIO_lstat(file, &PL_statcache);
2919 PL_laststatval = PerlLIO_stat(file, &PL_statcache);
2920 if (PL_laststatval < 0) {
2921 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
2922 /* PL_warn_nl is constant */
2923 GCC_DIAG_IGNORE(-Wformat-nonliteral);
2924 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
2932 if (gimme != G_ARRAY) {
2933 if (gimme != G_VOID)
2934 XPUSHs(boolSV(max));
2940 mPUSHi(PL_statcache.st_dev);
2941 #if ST_INO_SIZE > IVSIZE
2942 mPUSHn(PL_statcache.st_ino);
2944 # if ST_INO_SIGN <= 0
2945 mPUSHi(PL_statcache.st_ino);
2947 mPUSHu(PL_statcache.st_ino);
2950 mPUSHu(PL_statcache.st_mode);
2951 mPUSHu(PL_statcache.st_nlink);
2953 sv_setuid(PUSHmortal, PL_statcache.st_uid);
2954 sv_setgid(PUSHmortal, PL_statcache.st_gid);
2956 #ifdef USE_STAT_RDEV
2957 mPUSHi(PL_statcache.st_rdev);
2959 PUSHs(newSVpvs_flags("", SVs_TEMP));
2961 #if Off_t_size > IVSIZE
2962 mPUSHn(PL_statcache.st_size);
2964 mPUSHi(PL_statcache.st_size);
2967 mPUSHn(PL_statcache.st_atime);
2968 mPUSHn(PL_statcache.st_mtime);
2969 mPUSHn(PL_statcache.st_ctime);
2971 mPUSHi(PL_statcache.st_atime);
2972 mPUSHi(PL_statcache.st_mtime);
2973 mPUSHi(PL_statcache.st_ctime);
2975 #ifdef USE_STAT_BLOCKS
2976 mPUSHu(PL_statcache.st_blksize);
2977 mPUSHu(PL_statcache.st_blocks);
2979 PUSHs(newSVpvs_flags("", SVs_TEMP));
2980 PUSHs(newSVpvs_flags("", SVs_TEMP));
2986 /* All filetest ops avoid manipulating the perl stack pointer in their main
2987 bodies (since commit d2c4d2d1e22d3125), and return using either
2988 S_ft_return_false() or S_ft_return_true(). These two helper functions are
2989 the only two which manipulate the perl stack. To ensure that no stack
2990 manipulation macros are used, the filetest ops avoid defining a local copy
2991 of the stack pointer with dSP. */
2993 /* If the next filetest is stacked up with this one
2994 (PL_op->op_private & OPpFT_STACKING), we leave
2995 the original argument on the stack for success,
2996 and skip the stacked operators on failure.
2997 The next few macros/functions take care of this.
3001 S_ft_return_false(pTHX_ SV *ret) {
3005 if (PL_op->op_flags & OPf_REF) XPUSHs(ret);
3009 if (PL_op->op_private & OPpFT_STACKING) {
3010 while (OP_IS_FILETEST(next->op_type)
3011 && next->op_private & OPpFT_STACKED)
3012 next = next->op_next;
3017 PERL_STATIC_INLINE OP *
3018 S_ft_return_true(pTHX_ SV *ret) {
3020 if (PL_op->op_flags & OPf_REF)
3021 XPUSHs(PL_op->op_private & OPpFT_STACKING ? (SV *)cGVOP_gv : (ret));
3022 else if (!(PL_op->op_private & OPpFT_STACKING))
3028 #define FT_RETURNNO return S_ft_return_false(aTHX_ &PL_sv_no)
3029 #define FT_RETURNUNDEF return S_ft_return_false(aTHX_ &PL_sv_undef)
3030 #define FT_RETURNYES return S_ft_return_true(aTHX_ &PL_sv_yes)
3032 #define tryAMAGICftest_MG(chr) STMT_START { \
3033 if ( (SvFLAGS(*PL_stack_sp) & (SVf_ROK|SVs_GMG)) \
3034 && PL_op->op_flags & OPf_KIDS) { \
3035 OP *next = S_try_amagic_ftest(aTHX_ chr); \
3036 if (next) return next; \
3041 S_try_amagic_ftest(pTHX_ char chr) {
3042 SV *const arg = *PL_stack_sp;
3045 if (!(PL_op->op_private & OPpFT_STACKING)) SvGETMAGIC(arg);
3049 const char tmpchr = chr;
3050 SV * const tmpsv = amagic_call(arg,
3051 newSVpvn_flags(&tmpchr, 1, SVs_TEMP),
3052 ftest_amg, AMGf_unary);
3057 return SvTRUE(tmpsv)
3058 ? S_ft_return_true(aTHX_ tmpsv) : S_ft_return_false(aTHX_ tmpsv);
3064 /* also used for: pp_fteexec() pp_fteread() pp_ftewrite() pp_ftrexec()
3070 /* Not const, because things tweak this below. Not bool, because there's
3071 no guarantee that OPpFT_ACCESS is <= CHAR_MAX */
3072 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3073 I32 use_access = PL_op->op_private & OPpFT_ACCESS;
3074 /* Giving some sort of initial value silences compilers. */
3076 int access_mode = R_OK;
3078 int access_mode = 0;
3081 /* access_mode is never used, but leaving use_access in makes the
3082 conditional compiling below much clearer. */
3085 Mode_t stat_mode = S_IRUSR;
3087 bool effective = FALSE;
3090 switch (PL_op->op_type) {
3091 case OP_FTRREAD: opchar = 'R'; break;
3092 case OP_FTRWRITE: opchar = 'W'; break;
3093 case OP_FTREXEC: opchar = 'X'; break;
3094 case OP_FTEREAD: opchar = 'r'; break;
3095 case OP_FTEWRITE: opchar = 'w'; break;
3096 case OP_FTEEXEC: opchar = 'x'; break;
3098 tryAMAGICftest_MG(opchar);
3100 switch (PL_op->op_type) {
3102 #if !(defined(HAS_ACCESS) && defined(R_OK))
3108 #if defined(HAS_ACCESS) && defined(W_OK)
3113 stat_mode = S_IWUSR;
3117 #if defined(HAS_ACCESS) && defined(X_OK)
3122 stat_mode = S_IXUSR;
3126 #ifdef PERL_EFF_ACCESS
3129 stat_mode = S_IWUSR;
3133 #ifndef PERL_EFF_ACCESS
3140 #ifdef PERL_EFF_ACCESS
3145 stat_mode = S_IXUSR;
3151 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3152 const char *name = SvPV_nolen(*PL_stack_sp);
3154 # ifdef PERL_EFF_ACCESS
3155 result = PERL_EFF_ACCESS(name, access_mode);
3157 DIE(aTHX_ "panic: attempt to call PERL_EFF_ACCESS in %s",
3163 result = access(name, access_mode);
3165 DIE(aTHX_ "panic: attempt to call access() in %s", OP_NAME(PL_op));
3176 result = my_stat_flags(0);
3179 if (cando(stat_mode, effective, &PL_statcache))
3185 /* also used for: pp_ftatime() pp_ftctime() pp_ftmtime() pp_ftsize() */
3190 const int op_type = PL_op->op_type;
3194 case OP_FTIS: opchar = 'e'; break;
3195 case OP_FTSIZE: opchar = 's'; break;
3196 case OP_FTMTIME: opchar = 'M'; break;
3197 case OP_FTCTIME: opchar = 'C'; break;
3198 case OP_FTATIME: opchar = 'A'; break;
3200 tryAMAGICftest_MG(opchar);
3202 result = my_stat_flags(0);
3205 if (op_type == OP_FTIS)
3208 /* You can't dTARGET inside OP_FTIS, because you'll get
3209 "panic: pad_sv po" - the op is not flagged to have a target. */
3213 #if Off_t_size > IVSIZE
3214 sv_setnv(TARG, (NV)PL_statcache.st_size);
3216 sv_setiv(TARG, (IV)PL_statcache.st_size);
3221 ((NV)PL_basetime - PL_statcache.st_mtime) / 86400.0 );
3225 ((NV)PL_basetime - PL_statcache.st_atime) / 86400.0 );
3229 ((NV)PL_basetime - PL_statcache.st_ctime) / 86400.0 );
3233 return SvTRUE_nomg(TARG)
3234 ? S_ft_return_true(aTHX_ TARG) : S_ft_return_false(aTHX_ TARG);
3239 /* also used for: pp_ftblk() pp_ftchr() pp_ftdir() pp_fteowned()
3240 * pp_ftfile() pp_ftpipe() pp_ftsgid() pp_ftsock()
3241 * pp_ftsuid() pp_ftsvtx() pp_ftzero() */
3248 switch (PL_op->op_type) {
3249 case OP_FTROWNED: opchar = 'O'; break;
3250 case OP_FTEOWNED: opchar = 'o'; break;
3251 case OP_FTZERO: opchar = 'z'; break;
3252 case OP_FTSOCK: opchar = 'S'; break;
3253 case OP_FTCHR: opchar = 'c'; break;
3254 case OP_FTBLK: opchar = 'b'; break;
3255 case OP_FTFILE: opchar = 'f'; break;
3256 case OP_FTDIR: opchar = 'd'; break;
3257 case OP_FTPIPE: opchar = 'p'; break;
3258 case OP_FTSUID: opchar = 'u'; break;
3259 case OP_FTSGID: opchar = 'g'; break;
3260 case OP_FTSVTX: opchar = 'k'; break;
3262 tryAMAGICftest_MG(opchar);
3264 /* I believe that all these three are likely to be defined on most every
3265 system these days. */
3267 if(PL_op->op_type == OP_FTSUID) {
3272 if(PL_op->op_type == OP_FTSGID) {
3277 if(PL_op->op_type == OP_FTSVTX) {
3282 result = my_stat_flags(0);
3285 switch (PL_op->op_type) {
3287 if (PL_statcache.st_uid == PerlProc_getuid())
3291 if (PL_statcache.st_uid == PerlProc_geteuid())
3295 if (PL_statcache.st_size == 0)
3299 if (S_ISSOCK(PL_statcache.st_mode))
3303 if (S_ISCHR(PL_statcache.st_mode))
3307 if (S_ISBLK(PL_statcache.st_mode))
3311 if (S_ISREG(PL_statcache.st_mode))
3315 if (S_ISDIR(PL_statcache.st_mode))
3319 if (S_ISFIFO(PL_statcache.st_mode))
3324 if (PL_statcache.st_mode & S_ISUID)
3330 if (PL_statcache.st_mode & S_ISGID)
3336 if (PL_statcache.st_mode & S_ISVTX)
3348 tryAMAGICftest_MG('l');
3349 result = my_lstat_flags(0);
3353 if (S_ISLNK(PL_statcache.st_mode))
3366 tryAMAGICftest_MG('t');
3368 if (PL_op->op_flags & OPf_REF)
3371 SV *tmpsv = *PL_stack_sp;
3372 if (!(gv = MAYBE_DEREF_GV_nomg(tmpsv))) {
3373 name = SvPV_nomg(tmpsv, namelen);
3374 gv = gv_fetchpvn_flags(name, namelen, SvUTF8(tmpsv), SVt_PVIO);
3378 if (GvIO(gv) && IoIFP(GvIOp(gv)))
3379 fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
3380 else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX)
3385 SETERRNO(EBADF,RMS_IFI);
3388 if (PerlLIO_isatty(fd))
3394 /* also used for: pp_ftbinary() */
3408 tryAMAGICftest_MG(PL_op->op_type == OP_FTTEXT ? 'T' : 'B');
3410 if (PL_op->op_flags & OPf_REF)
3412 else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
3417 gv = MAYBE_DEREF_GV_nomg(sv);
3421 if (gv == PL_defgv) {
3423 io = SvTYPE(PL_statgv) == SVt_PVIO
3427 goto really_filename;
3432 sv_setpvs(PL_statname, "");
3433 io = GvIO(PL_statgv);
3435 PL_laststatval = -1;
3436 PL_laststype = OP_STAT;
3437 if (io && IoIFP(io)) {
3439 if (! PerlIO_has_base(IoIFP(io)))
3440 DIE(aTHX_ "-T and -B not implemented on filehandles");
3441 fd = PerlIO_fileno(IoIFP(io));
3443 SETERRNO(EBADF,RMS_IFI);
3446 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3447 if (PL_laststatval < 0)
3449 if (S_ISDIR(PL_statcache.st_mode)) { /* handle NFS glitch */
3450 if (PL_op->op_type == OP_FTTEXT)
3455 if (PerlIO_get_cnt(IoIFP(io)) <= 0) {
3456 i = PerlIO_getc(IoIFP(io));
3458 (void)PerlIO_ungetc(IoIFP(io),i);
3460 /* null file is anything */
3463 len = PerlIO_get_bufsiz(IoIFP(io));
3464 s = (STDCHAR *) PerlIO_get_base(IoIFP(io));
3465 /* sfio can have large buffers - limit to 512 */
3470 SETERRNO(EBADF,RMS_IFI);
3472 SETERRNO(EBADF,RMS_IFI);
3481 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
3483 file = SvPVX_const(PL_statname);
3485 if (!(fp = PerlIO_open(file, "r"))) {
3487 PL_laststatval = -1;
3488 PL_laststype = OP_STAT;
3490 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
3491 /* PL_warn_nl is constant */
3492 GCC_DIAG_IGNORE(-Wformat-nonliteral);
3493 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open");
3498 PL_laststype = OP_STAT;
3499 fd = PerlIO_fileno(fp);
3501 (void)PerlIO_close(fp);
3502 SETERRNO(EBADF,RMS_IFI);
3505 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3506 if (PL_laststatval < 0) {
3507 (void)PerlIO_close(fp);
3508 SETERRNO(EBADF,RMS_IFI);
3511 PerlIO_binmode(aTHX_ fp, '<', O_BINARY, NULL);
3512 len = PerlIO_read(fp, tbuf, sizeof(tbuf));
3513 (void)PerlIO_close(fp);
3515 if (S_ISDIR(PL_statcache.st_mode) && PL_op->op_type == OP_FTTEXT)
3516 FT_RETURNNO; /* special case NFS directories */
3517 FT_RETURNYES; /* null file is anything */
3522 /* now scan s to look for textiness */
3524 #if defined(DOSISH) || defined(USEMYBINMODE)
3525 /* ignore trailing ^Z on short files */
3526 if (len && len < (I32)sizeof(tbuf) && tbuf[len-1] == 26)
3531 if (! is_invariant_string((U8 *) s, len)) {
3534 /* Here contains a variant under UTF-8 . See if the entire string is
3535 * UTF-8. But the buffer may end in a partial character, so consider
3536 * it UTF-8 if the first non-UTF8 char is an ending partial */
3537 if (is_utf8_string_loc((U8 *) s, len, &ep)
3538 || ep + UTF8SKIP(ep) > (U8 *) (s + len))
3540 if (PL_op->op_type == OP_FTTEXT) {
3549 /* Here, is not UTF-8 or is entirely ASCII. Look through the buffer for
3550 * things that wouldn't be in ASCII text or rich ASCII text. Count these
3552 for (i = 0; i < len; i++, s++) {
3553 if (!*s) { /* null never allowed in text */
3557 #ifdef USE_LOCALE_CTYPE
3558 if (IN_LC_RUNTIME(LC_CTYPE)) {
3559 if ( isPRINT_LC(*s) || isSPACE_LC(*s)) {
3566 /* VT occurs so rarely in text, that we consider it odd */
3567 || (isSPACE_A(*s) && *s != VT_NATIVE)
3569 /* But there is a fair amount of backspaces and escapes in
3572 || *s == ESC_NATIVE)
3579 if ((odd * 3 > len) == (PL_op->op_type == OP_FTTEXT)) /* allow 1/3 odd */
3590 const char *tmps = NULL;
3594 SV * const sv = POPs;
3595 if (PL_op->op_flags & OPf_SPECIAL) {
3596 gv = gv_fetchsv(sv, 0, SVt_PVIO);
3598 else if (!(gv = MAYBE_DEREF_GV(sv)))
3599 tmps = SvPV_nomg_const_nolen(sv);
3602 HV * const table = GvHVn(PL_envgv);
3605 if ( (svp = hv_fetchs(table, "HOME", FALSE))
3606 || (svp = hv_fetchs(table, "LOGDIR", FALSE))
3608 || (svp = hv_fetchs(table, "SYS$LOGIN", FALSE))
3612 tmps = SvPV_nolen_const(*svp);
3616 TAINT_PROPER("chdir");
3621 TAINT_PROPER("chdir");
3624 IO* const io = GvIO(gv);
3627 PUSHi(fchdir(my_dirfd(IoDIRP(io))) >= 0);
3628 } else if (IoIFP(io)) {
3629 int fd = PerlIO_fileno(IoIFP(io));
3633 PUSHi(fchdir(fd) >= 0);
3643 DIE(aTHX_ PL_no_func, "fchdir");
3647 PUSHi( PerlDir_chdir(tmps) >= 0 );
3649 /* Clear the DEFAULT element of ENV so we'll get the new value
3651 hv_delete(GvHVn(PL_envgv),"DEFAULT",7,G_DISCARD);
3658 SETERRNO(EBADF,RMS_IFI);
3665 /* also used for: pp_chmod() pp_kill() pp_unlink() pp_utime() */
3669 dSP; dMARK; dTARGET;
3670 const I32 value = (I32)apply(PL_op->op_type, MARK, SP);
3681 char * const tmps = POPpx;
3682 TAINT_PROPER("chroot");
3683 PUSHi( chroot(tmps) >= 0 );
3686 DIE(aTHX_ PL_no_func, "chroot");
3694 const char * const tmps2 = POPpconstx;
3695 const char * const tmps = SvPV_nolen_const(TOPs);
3696 TAINT_PROPER("rename");
3698 anum = PerlLIO_rename(tmps, tmps2);
3700 if (!(anum = PerlLIO_stat(tmps, &PL_statbuf))) {
3701 if (same_dirent(tmps2, tmps)) /* can always rename to same name */
3704 if (PerlProc_geteuid() || PerlLIO_stat(tmps2, &PL_statbuf) < 0 || !S_ISDIR(PL_statbuf.st_mode))
3705 (void)UNLINK(tmps2);
3706 if (!(anum = link(tmps, tmps2)))
3707 anum = UNLINK(tmps);
3716 /* also used for: pp_symlink() */
3718 #if defined(HAS_LINK) || defined(HAS_SYMLINK)
3722 const int op_type = PL_op->op_type;
3726 if (op_type == OP_LINK)
3727 DIE(aTHX_ PL_no_func, "link");
3729 # ifndef HAS_SYMLINK
3730 if (op_type == OP_SYMLINK)
3731 DIE(aTHX_ PL_no_func, "symlink");
3735 const char * const tmps2 = POPpconstx;
3736 const char * const tmps = SvPV_nolen_const(TOPs);
3737 TAINT_PROPER(PL_op_desc[op_type]);
3739 # if defined(HAS_LINK)
3740 # if defined(HAS_SYMLINK)
3741 /* Both present - need to choose which. */
3742 (op_type == OP_LINK) ?
3743 PerlLIO_link(tmps, tmps2) : symlink(tmps, tmps2);
3745 /* Only have link, so calls to pp_symlink will have DIE()d above. */
3746 PerlLIO_link(tmps, tmps2);
3749 # if defined(HAS_SYMLINK)
3750 /* Only have symlink, so calls to pp_link will have DIE()d above. */
3751 symlink(tmps, tmps2);
3756 SETi( result >= 0 );
3761 /* also used for: pp_symlink() */
3766 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
3776 char buf[MAXPATHLEN];
3781 /* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
3782 * it is impossible to know whether the result was truncated. */
3783 len = readlink(tmps, buf, sizeof(buf) - 1);
3792 RETSETUNDEF; /* just pretend it's a normal file */
3796 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
3798 S_dooneliner(pTHX_ const char *cmd, const char *filename)
3800 char * const save_filename = filename;
3805 Size_t size = strlen(cmd) + (strlen(filename) * 2) + 10;
3807 PERL_ARGS_ASSERT_DOONELINER;
3809 Newx(cmdline, size, char);
3810 my_strlcpy(cmdline, cmd, size);
3811 my_strlcat(cmdline, " ", size);
3812 for (s = cmdline + strlen(cmdline); *filename; ) {
3816 if (s - cmdline < size)
3817 my_strlcpy(s, " 2>&1", size - (s - cmdline));
3818 myfp = PerlProc_popen(cmdline, "r");
3822 SV * const tmpsv = sv_newmortal();
3823 /* Need to save/restore 'PL_rs' ?? */
3824 s = sv_gets(tmpsv, myfp, 0);
3825 (void)PerlProc_pclose(myfp);
3829 #ifdef HAS_SYS_ERRLIST
3834 /* you don't see this */
3835 const char * const errmsg = Strerror(e) ;
3838 if (instr(s, errmsg)) {
3845 #define EACCES EPERM
3847 if (instr(s, "cannot make"))
3848 SETERRNO(EEXIST,RMS_FEX);
3849 else if (instr(s, "existing file"))
3850 SETERRNO(EEXIST,RMS_FEX);
3851 else if (instr(s, "ile exists"))
3852 SETERRNO(EEXIST,RMS_FEX);
3853 else if (instr(s, "non-exist"))
3854 SETERRNO(ENOENT,RMS_FNF);
3855 else if (instr(s, "does not exist"))
3856 SETERRNO(ENOENT,RMS_FNF);
3857 else if (instr(s, "not empty"))
3858 SETERRNO(EBUSY,SS_DEVOFFLINE);
3859 else if (instr(s, "cannot access"))
3860 SETERRNO(EACCES,RMS_PRV);
3862 SETERRNO(EPERM,RMS_PRV);
3865 else { /* some mkdirs return no failure indication */
3866 anum = (PerlLIO_stat(save_filename, &PL_statbuf) >= 0);
3867 if (PL_op->op_type == OP_RMDIR)
3872 SETERRNO(EACCES,RMS_PRV); /* a guess */
3881 /* This macro removes trailing slashes from a directory name.
3882 * Different operating and file systems take differently to
3883 * trailing slashes. According to POSIX 1003.1 1996 Edition
3884 * any number of trailing slashes should be allowed.
3885 * Thusly we snip them away so that even non-conforming
3886 * systems are happy.
3887 * We should probably do this "filtering" for all
3888 * the functions that expect (potentially) directory names:
3889 * -d, chdir(), chmod(), chown(), chroot(), fcntl()?,
3890 * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */
3892 #define TRIMSLASHES(tmps,len,copy) (tmps) = SvPV_const(TOPs, (len)); \
3893 if ((len) > 1 && (tmps)[(len)-1] == '/') { \
3896 } while ((len) > 1 && (tmps)[(len)-1] == '/'); \
3897 (tmps) = savepvn((tmps), (len)); \
3907 const int mode = (MAXARG > 1 && (TOPs||((void)POPs,0))) ? POPi : 0777;
3909 TRIMSLASHES(tmps,len,copy);
3911 TAINT_PROPER("mkdir");
3913 SETi( PerlDir_mkdir(tmps, mode) >= 0 );
3917 SETi( dooneliner("mkdir", tmps) );
3918 oldumask = PerlLIO_umask(0);
3919 PerlLIO_umask(oldumask);
3920 PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
3935 TRIMSLASHES(tmps,len,copy);
3936 TAINT_PROPER("rmdir");
3938 SETi( PerlDir_rmdir(tmps) >= 0 );
3940 SETi( dooneliner("rmdir", tmps) );
3947 /* Directory calls. */
3951 #if defined(Direntry_t) && defined(HAS_READDIR)
3953 const char * const dirname = POPpconstx;
3954 GV * const gv = MUTABLE_GV(POPs);
3955 IO * const io = GvIOn(gv);
3957 if ((IoIFP(io) || IoOFP(io)))
3958 Perl_ck_warner_d(aTHX_ packWARN2(WARN_IO, WARN_DEPRECATED),
3959 "Opening filehandle %"HEKf" also as a directory",
3960 HEKfARG(GvENAME_HEK(gv)) );
3962 PerlDir_close(IoDIRP(io));
3963 if (!(IoDIRP(io) = PerlDir_open(dirname)))
3969 SETERRNO(EBADF,RMS_DIR);
3972 DIE(aTHX_ PL_no_dir_func, "opendir");
3978 #if !defined(Direntry_t) || !defined(HAS_READDIR)
3979 DIE(aTHX_ PL_no_dir_func, "readdir");
3981 #if !defined(I_DIRENT) && !defined(VMS)
3982 Direntry_t *readdir (DIR *);
3987 const I32 gimme = GIMME_V;
3988 GV * const gv = MUTABLE_GV(POPs);
3989 const Direntry_t *dp;
3990 IO * const io = GvIOn(gv);
3993 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
3994 "readdir() attempted on invalid dirhandle %"HEKf,
3995 HEKfARG(GvENAME_HEK(gv)));
4000 dp = (Direntry_t *)PerlDir_read(IoDIRP(io));
4004 sv = newSVpvn(dp->d_name, dp->d_namlen);
4006 sv = newSVpv(dp->d_name, 0);
4008 if (!(IoFLAGS(io) & IOf_UNTAINT))
4011 } while (gimme == G_ARRAY);
4013 if (!dp && gimme != G_ARRAY)
4020 SETERRNO(EBADF,RMS_ISI);
4021 if (gimme == G_ARRAY)
4030 #if defined(HAS_TELLDIR) || defined(telldir)
4032 /* XXX does _anyone_ need this? --AD 2/20/1998 */
4033 /* XXX netbsd still seemed to.
4034 XXX HAS_TELLDIR_PROTO is new style, NEED_TELLDIR_PROTO is old style.
4035 --JHI 1999-Feb-02 */
4036 # if !defined(HAS_TELLDIR_PROTO) || defined(NEED_TELLDIR_PROTO)
4037 long telldir (DIR *);
4039 GV * const gv = MUTABLE_GV(POPs);
4040 IO * const io = GvIOn(gv);
4043 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4044 "telldir() attempted on invalid dirhandle %"HEKf,
4045 HEKfARG(GvENAME_HEK(gv)));
4049 PUSHi( PerlDir_tell(IoDIRP(io)) );
4053 SETERRNO(EBADF,RMS_ISI);
4056 DIE(aTHX_ PL_no_dir_func, "telldir");
4062 #if defined(HAS_SEEKDIR) || defined(seekdir)
4064 const long along = POPl;
4065 GV * const gv = MUTABLE_GV(POPs);
4066 IO * const io = GvIOn(gv);
4069 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4070 "seekdir() attempted on invalid dirhandle %"HEKf,
4071 HEKfARG(GvENAME_HEK(gv)));
4074 (void)PerlDir_seek(IoDIRP(io), along);
4079 SETERRNO(EBADF,RMS_ISI);
4082 DIE(aTHX_ PL_no_dir_func, "seekdir");
4088 #if defined(HAS_REWINDDIR) || defined(rewinddir)
4090 GV * const gv = MUTABLE_GV(POPs);
4091 IO * const io = GvIOn(gv);
4094 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4095 "rewinddir() attempted on invalid dirhandle %"HEKf,
4096 HEKfARG(GvENAME_HEK(gv)));
4099 (void)PerlDir_rewind(IoDIRP(io));
4103 SETERRNO(EBADF,RMS_ISI);
4106 DIE(aTHX_ PL_no_dir_func, "rewinddir");
4112 #if defined(Direntry_t) && defined(HAS_READDIR)
4114 GV * const gv = MUTABLE_GV(POPs);
4115 IO * const io = GvIOn(gv);
4118 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4119 "closedir() attempted on invalid dirhandle %"HEKf,
4120 HEKfARG(GvENAME_HEK(gv)));
4123 #ifdef VOID_CLOSEDIR
4124 PerlDir_close(IoDIRP(io));
4126 if (PerlDir_close(IoDIRP(io)) < 0) {
4127 IoDIRP(io) = 0; /* Don't try to close again--coredumps on SysV */
4136 SETERRNO(EBADF,RMS_IFI);
4139 DIE(aTHX_ PL_no_dir_func, "closedir");
4143 /* Process control. */
4150 #ifdef HAS_SIGPROCMASK
4151 sigset_t oldmask, newmask;
4155 PERL_FLUSHALL_FOR_CHILD;
4156 #ifdef HAS_SIGPROCMASK
4157 sigfillset(&newmask);
4158 sigprocmask(SIG_SETMASK, &newmask, &oldmask);
4160 childpid = PerlProc_fork();
4161 if (childpid == 0) {
4165 for (sig = 1; sig < SIG_SIZE; sig++)
4166 PL_psig_pend[sig] = 0;
4168 #ifdef HAS_SIGPROCMASK
4171 sigprocmask(SIG_SETMASK, &oldmask, NULL);
4178 #ifdef PERL_USES_PL_PIDSTATUS
4179 hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
4185 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4190 PERL_FLUSHALL_FOR_CHILD;
4191 childpid = PerlProc_fork();
4197 DIE(aTHX_ PL_no_func, "fork");
4204 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4209 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4210 childpid = wait4pid(-1, &argflags, 0);
4212 while ((childpid = wait4pid(-1, &argflags, 0)) == -1 &&
4217 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4218 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4219 STATUS_NATIVE_CHILD_SET((childpid && childpid != -1) ? argflags : -1);
4221 STATUS_NATIVE_CHILD_SET((childpid > 0) ? argflags : -1);
4226 DIE(aTHX_ PL_no_func, "wait");
4232 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4234 const int optype = POPi;
4235 const Pid_t pid = TOPi;
4239 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4240 result = wait4pid(pid, &argflags, optype);
4242 while ((result = wait4pid(pid, &argflags, optype)) == -1 &&
4247 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4248 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4249 STATUS_NATIVE_CHILD_SET((result && result != -1) ? argflags : -1);
4251 STATUS_NATIVE_CHILD_SET((result > 0) ? argflags : -1);
4256 DIE(aTHX_ PL_no_func, "waitpid");
4262 dSP; dMARK; dORIGMARK; dTARGET;
4263 #if defined(__LIBCATAMOUNT__)
4264 PL_statusvalue = -1;
4273 while (++MARK <= SP) {
4274 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4279 TAINT_PROPER("system");
4281 PERL_FLUSHALL_FOR_CHILD;
4282 #if (defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO)
4287 #ifdef HAS_SIGPROCMASK
4288 sigset_t newset, oldset;
4291 if (PerlProc_pipe(pp) >= 0)
4293 #ifdef HAS_SIGPROCMASK
4294 sigemptyset(&newset);
4295 sigaddset(&newset, SIGCHLD);
4296 sigprocmask(SIG_BLOCK, &newset, &oldset);
4298 while ((childpid = PerlProc_fork()) == -1) {
4299 if (errno != EAGAIN) {
4304 PerlLIO_close(pp[0]);
4305 PerlLIO_close(pp[1]);
4307 #ifdef HAS_SIGPROCMASK
4308 sigprocmask(SIG_SETMASK, &oldset, NULL);
4315 Sigsave_t ihand,qhand; /* place to save signals during system() */
4319 PerlLIO_close(pp[1]);
4321 rsignal_save(SIGINT, (Sighandler_t) SIG_IGN, &ihand);
4322 rsignal_save(SIGQUIT, (Sighandler_t) SIG_IGN, &qhand);
4325 result = wait4pid(childpid, &status, 0);
4326 } while (result == -1 && errno == EINTR);
4328 #ifdef HAS_SIGPROCMASK
4329 sigprocmask(SIG_SETMASK, &oldset, NULL);
4331 (void)rsignal_restore(SIGINT, &ihand);
4332 (void)rsignal_restore(SIGQUIT, &qhand);
4334 STATUS_NATIVE_CHILD_SET(result == -1 ? -1 : status);
4335 do_execfree(); /* free any memory child malloced on fork */
4342 while (n < sizeof(int)) {
4343 n1 = PerlLIO_read(pp[0],
4344 (void*)(((char*)&errkid)+n),
4350 PerlLIO_close(pp[0]);
4351 if (n) { /* Error */
4352 if (n != sizeof(int))
4353 DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
4354 errno = errkid; /* Propagate errno from kid */
4355 STATUS_NATIVE_CHILD_SET(-1);
4358 XPUSHi(STATUS_CURRENT);
4361 #ifdef HAS_SIGPROCMASK
4362 sigprocmask(SIG_SETMASK, &oldset, NULL);
4365 PerlLIO_close(pp[0]);
4366 #if defined(HAS_FCNTL) && defined(F_SETFD)
4367 if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
4371 if (PL_op->op_flags & OPf_STACKED) {
4372 SV * const really = *++MARK;
4373 value = (I32)do_aexec5(really, MARK, SP, pp[1], did_pipes);
4375 else if (SP - MARK != 1)
4376 value = (I32)do_aexec5(NULL, MARK, SP, pp[1], did_pipes);
4378 value = (I32)do_exec3(SvPVx_nolen(sv_mortalcopy(*SP)), pp[1], did_pipes);
4382 #else /* ! FORK or VMS or OS/2 */
4385 if (PL_op->op_flags & OPf_STACKED) {
4386 SV * const really = *++MARK;
4387 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4388 value = (I32)do_aspawn(really, MARK, SP);
4390 value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
4393 else if (SP - MARK != 1) {
4394 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4395 value = (I32)do_aspawn(NULL, MARK, SP);
4397 value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
4401 value = (I32)do_spawn(SvPVx_nolen(sv_mortalcopy(*SP)));
4403 if (PL_statusvalue == -1) /* hint that value must be returned as is */
4405 STATUS_NATIVE_CHILD_SET(value);
4408 XPUSHi(result ? value : STATUS_CURRENT);
4409 #endif /* !FORK or VMS or OS/2 */
4416 dSP; dMARK; dORIGMARK; dTARGET;
4421 while (++MARK <= SP) {
4422 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4427 TAINT_PROPER("exec");
4429 PERL_FLUSHALL_FOR_CHILD;
4430 if (PL_op->op_flags & OPf_STACKED) {
4431 SV * const really = *++MARK;
4432 value = (I32)do_aexec(really, MARK, SP);
4434 else if (SP - MARK != 1)
4436 value = (I32)vms_do_aexec(NULL, MARK, SP);
4438 value = (I32)do_aexec(NULL, MARK, SP);
4442 value = (I32)vms_do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4444 value = (I32)do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4457 XPUSHi( getppid() );
4460 DIE(aTHX_ PL_no_func, "getppid");
4470 (MAXARG < 1) ? 0 : TOPs ? SvIVx(POPs) : ((void)POPs, 0);
4473 pgrp = (I32)BSD_GETPGRP(pid);
4475 if (pid != 0 && pid != PerlProc_getpid())
4476 DIE(aTHX_ "POSIX getpgrp can't take an argument");
4482 DIE(aTHX_ PL_no_func, "getpgrp");
4492 pgrp = MAXARG == 2 && (TOPs||POPs) ? POPi : 0;
4493 if (MAXARG > 0) pid = TOPs ? TOPi : 0;
4500 TAINT_PROPER("setpgrp");
4502 SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
4504 if ((pgrp != 0 && pgrp != PerlProc_getpid())
4505 || (pid != 0 && pid != PerlProc_getpid()))
4507 DIE(aTHX_ "setpgrp can't take arguments");
4509 SETi( setpgrp() >= 0 );
4510 #endif /* USE_BSDPGRP */
4513 DIE(aTHX_ PL_no_func, "setpgrp");
4517 #if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2))
4518 # define PRIORITY_WHICH_T(which) (__priority_which_t)which
4520 # define PRIORITY_WHICH_T(which) which
4525 #ifdef HAS_GETPRIORITY
4527 const int who = POPi;
4528 const int which = TOPi;
4529 SETi( getpriority(PRIORITY_WHICH_T(which), who) );
4532 DIE(aTHX_ PL_no_func, "getpriority");
4538 #ifdef HAS_SETPRIORITY
4540 const int niceval = POPi;
4541 const int who = POPi;
4542 const int which = TOPi;
4543 TAINT_PROPER("setpriority");
4544 SETi( setpriority(PRIORITY_WHICH_T(which), who, niceval) >= 0 );
4547 DIE(aTHX_ PL_no_func, "setpriority");
4551 #undef PRIORITY_WHICH_T
4559 XPUSHn( time(NULL) );
4561 XPUSHi( time(NULL) );
4570 struct tms timesbuf;
4573 (void)PerlProc_times(×buf);
4575 mPUSHn(((NV)timesbuf.tms_utime)/(NV)PL_clocktick);
4576 if (GIMME_V == G_ARRAY) {
4577 mPUSHn(((NV)timesbuf.tms_stime)/(NV)PL_clocktick);
4578 mPUSHn(((NV)timesbuf.tms_cutime)/(NV)PL_clocktick);
4579 mPUSHn(((NV)timesbuf.tms_cstime)/(NV)PL_clocktick);
4587 if (GIMME_V == G_ARRAY) {
4594 DIE(aTHX_ "times not implemented");
4596 #endif /* HAS_TIMES */
4599 /* The 32 bit int year limits the times we can represent to these
4600 boundaries with a few days wiggle room to account for time zone
4603 /* Sat Jan 3 00:00:00 -2147481748 */
4604 #define TIME_LOWER_BOUND -67768100567755200.0
4605 /* Sun Dec 29 12:00:00 2147483647 */
4606 #define TIME_UPPER_BOUND 67767976233316800.0
4609 /* also used for: pp_localtime() */
4617 const char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
4618 static const char * const dayname[] =
4619 {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
4620 static const char * const monname[] =
4621 {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
4622 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
4624 if (MAXARG < 1 || (!TOPs && ((void)POPs, 1))) {
4627 when = (Time64_T)now;
4630 NV input = Perl_floor(POPn);
4631 const bool pl_isnan = Perl_isnan(input);
4632 when = (Time64_T)input;
4633 if (UNLIKELY(pl_isnan || when != input)) {
4634 /* diag_listed_as: gmtime(%f) too large */
4635 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4636 "%s(%.0" NVff ") too large", opname, input);
4644 if ( TIME_LOWER_BOUND > when ) {
4645 /* diag_listed_as: gmtime(%f) too small */
4646 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4647 "%s(%.0" NVff ") too small", opname, when);
4650 else if( when > TIME_UPPER_BOUND ) {
4651 /* diag_listed_as: gmtime(%f) too small */
4652 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4653 "%s(%.0" NVff ") too large", opname, when);
4657 if (PL_op->op_type == OP_LOCALTIME)
4658 err = S_localtime64_r(&when, &tmbuf);
4660 err = S_gmtime64_r(&when, &tmbuf);
4664 /* diag_listed_as: gmtime(%f) failed */
4665 /* XXX %lld broken for quads */
4667 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4668 "%s(%.0" NVff ") failed", opname, when);
4671 if (GIMME_V != G_ARRAY) { /* scalar context */
4678 Perl_sv_setpvf_mg(aTHX_ TARG, "%s %s %2d %02d:%02d:%02d %"IVdf,
4679 dayname[tmbuf.tm_wday],
4680 monname[tmbuf.tm_mon],
4685 (IV)tmbuf.tm_year + 1900);
4688 else { /* list context */
4694 mPUSHi(tmbuf.tm_sec);
4695 mPUSHi(tmbuf.tm_min);
4696 mPUSHi(tmbuf.tm_hour);
4697 mPUSHi(tmbuf.tm_mday);
4698 mPUSHi(tmbuf.tm_mon);
4699 mPUSHn(tmbuf.tm_year);
4700 mPUSHi(tmbuf.tm_wday);
4701 mPUSHi(tmbuf.tm_yday);
4702 mPUSHi(tmbuf.tm_isdst);
4711 /* alarm() takes an unsigned int number of seconds, and return the
4712 * unsigned int number of seconds remaining in the previous alarm
4713 * (alarms don't stack). Therefore negative return values are not
4717 /* Note that while the C library function alarm() as such has
4718 * no errors defined (or in other words, properly behaving client
4719 * code shouldn't expect any), alarm() being obsoleted by
4720 * setitimer() and often being implemented in terms of
4721 * setitimer(), can fail. */
4722 /* diag_listed_as: %s() with negative argument */
4723 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4724 "alarm() with negative argument");
4725 SETERRNO(EINVAL, LIB_INVARG);
4729 unsigned int retval = alarm(anum);
4730 if ((int)retval < 0) /* Strictly speaking "cannot happen". */
4736 DIE(aTHX_ PL_no_func, "alarm");
4747 (void)time(&lasttime);
4748 if (MAXARG < 1 || (!TOPs && !POPs))
4753 /* diag_listed_as: %s() with negative argument */
4754 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4755 "sleep() with negative argument");
4756 SETERRNO(EINVAL, LIB_INVARG);
4760 PerlProc_sleep((unsigned int)duration);
4764 XPUSHi(when - lasttime);
4768 /* Shared memory. */
4769 /* Merged with some message passing. */
4771 /* also used for: pp_msgrcv() pp_msgsnd() pp_semop() pp_shmread() */
4775 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4776 dSP; dMARK; dTARGET;
4777 const int op_type = PL_op->op_type;
4782 value = (I32)(do_msgsnd(MARK, SP) >= 0);
4785 value = (I32)(do_msgrcv(MARK, SP) >= 0);
4788 value = (I32)(do_semop(MARK, SP) >= 0);
4791 value = (I32)(do_shmio(op_type, MARK, SP) >= 0);
4799 return Perl_pp_semget(aTHX);
4805 /* also used for: pp_msgget() pp_shmget() */
4809 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4810 dSP; dMARK; dTARGET;
4811 const int anum = do_ipcget(PL_op->op_type, MARK, SP);
4818 DIE(aTHX_ "System V IPC is not implemented on this machine");
4822 /* also used for: pp_msgctl() pp_shmctl() */
4826 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4827 dSP; dMARK; dTARGET;
4828 const int anum = do_ipcctl(PL_op->op_type, MARK, SP);
4836 PUSHp(zero_but_true, ZBTLEN);
4840 return Perl_pp_semget(aTHX);
4844 /* I can't const this further without getting warnings about the types of
4845 various arrays passed in from structures. */
4847 S_space_join_names_mortal(pTHX_ char *const *array)
4851 PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL;
4854 target = newSVpvs_flags("", SVs_TEMP);
4856 sv_catpv(target, *array);
4859 sv_catpvs(target, " ");
4862 target = sv_mortalcopy(&PL_sv_no);
4867 /* Get system info. */
4869 /* also used for: pp_ghbyaddr() pp_ghbyname() */
4873 #if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT)
4875 I32 which = PL_op->op_type;
4878 #ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
4879 struct hostent *gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
4880 struct hostent *gethostbyname(Netdb_name_t);
4881 struct hostent *gethostent(void);
4883 struct hostent *hent = NULL;
4887 if (which == OP_GHBYNAME) {
4888 #ifdef HAS_GETHOSTBYNAME
4889 const char* const name = POPpbytex;
4890 hent = PerlSock_gethostbyname(name);
4892 DIE(aTHX_ PL_no_sock_func, "gethostbyname");
4895 else if (which == OP_GHBYADDR) {
4896 #ifdef HAS_GETHOSTBYADDR
4897 const int addrtype = POPi;
4898 SV * const addrsv = POPs;
4900 const char *addr = (char *)SvPVbyte(addrsv, addrlen);
4902 hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
4904 DIE(aTHX_ PL_no_sock_func, "gethostbyaddr");
4908 #ifdef HAS_GETHOSTENT
4909 hent = PerlSock_gethostent();
4911 DIE(aTHX_ PL_no_sock_func, "gethostent");
4914 #ifdef HOST_NOT_FOUND
4916 #ifdef USE_REENTRANT_API
4917 # ifdef USE_GETHOSTENT_ERRNO
4918 h_errno = PL_reentrant_buffer->_gethostent_errno;
4921 STATUS_UNIX_SET(h_errno);
4925 if (GIMME_V != G_ARRAY) {
4926 PUSHs(sv = sv_newmortal());
4928 if (which == OP_GHBYNAME) {
4930 sv_setpvn(sv, hent->h_addr, hent->h_length);
4933 sv_setpv(sv, (char*)hent->h_name);
4939 mPUSHs(newSVpv((char*)hent->h_name, 0));
4940 PUSHs(space_join_names_mortal(hent->h_aliases));
4941 mPUSHi(hent->h_addrtype);
4942 len = hent->h_length;
4945 for (elem = hent->h_addr_list; elem && *elem; elem++) {
4946 mXPUSHp(*elem, len);
4950 mPUSHp(hent->h_addr, len);
4952 PUSHs(sv_mortalcopy(&PL_sv_no));
4957 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
4961 /* also used for: pp_gnbyaddr() pp_gnbyname() */
4965 #if defined(HAS_GETNETBYNAME) || defined(HAS_GETNETBYADDR) || defined(HAS_GETNETENT)
4967 I32 which = PL_op->op_type;
4969 #ifndef HAS_GETNET_PROTOS /* XXX Do we need individual probes? */
4970 struct netent *getnetbyaddr(Netdb_net_t, int);
4971 struct netent *getnetbyname(Netdb_name_t);
4972 struct netent *getnetent(void);
4974 struct netent *nent;
4976 if (which == OP_GNBYNAME){
4977 #ifdef HAS_GETNETBYNAME
4978 const char * const name = POPpbytex;
4979 nent = PerlSock_getnetbyname(name);
4981 DIE(aTHX_ PL_no_sock_func, "getnetbyname");
4984 else if (which == OP_GNBYADDR) {
4985 #ifdef HAS_GETNETBYADDR
4986 const int addrtype = POPi;
4987 const Netdb_net_t addr = (Netdb_net_t) (U32)POPu;
4988 nent = PerlSock_getnetbyaddr(addr, addrtype);
4990 DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");
4994 #ifdef HAS_GETNETENT
4995 nent = PerlSock_getnetent();
4997 DIE(aTHX_ PL_no_sock_func, "getnetent");
5000 #ifdef HOST_NOT_FOUND
5002 #ifdef USE_REENTRANT_API
5003 # ifdef USE_GETNETENT_ERRNO
5004 h_errno = PL_reentrant_buffer->_getnetent_errno;
5007 STATUS_UNIX_SET(h_errno);
5012 if (GIMME_V != G_ARRAY) {
5013 PUSHs(sv = sv_newmortal());
5015 if (which == OP_GNBYNAME)
5016 sv_setiv(sv, (IV)nent->n_net);
5018 sv_setpv(sv, nent->n_name);
5024 mPUSHs(newSVpv(nent->n_name, 0));
5025 PUSHs(space_join_names_mortal(nent->n_aliases));
5026 mPUSHi(nent->n_addrtype);
5027 mPUSHi(nent->n_net);
5032 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5037 /* also used for: pp_gpbyname() pp_gpbynumber() */
5041 #if defined(HAS_GETPROTOBYNAME) || defined(HAS_GETPROTOBYNUMBER) || defined(HAS_GETPROTOENT)
5043 I32 which = PL_op->op_type;
5045 #ifndef HAS_GETPROTO_PROTOS /* XXX Do we need individual probes? */
5046 struct protoent *getprotobyname(Netdb_name_t);
5047 struct protoent *getprotobynumber(int);
5048 struct protoent *getprotoent(void);
5050 struct protoent *pent;
5052 if (which == OP_GPBYNAME) {
5053 #ifdef HAS_GETPROTOBYNAME
5054 const char* const name = POPpbytex;
5055 pent = PerlSock_getprotobyname(name);
5057 DIE(aTHX_ PL_no_sock_func, "getprotobyname");
5060 else if (which == OP_GPBYNUMBER) {
5061 #ifdef HAS_GETPROTOBYNUMBER
5062 const int number = POPi;
5063 pent = PerlSock_getprotobynumber(number);
5065 DIE(aTHX_ PL_no_sock_func, "getprotobynumber");
5069 #ifdef HAS_GETPROTOENT
5070 pent = PerlSock_getprotoent();
5072 DIE(aTHX_ PL_no_sock_func, "getprotoent");
5076 if (GIMME_V != G_ARRAY) {
5077 PUSHs(sv = sv_newmortal());
5079 if (which == OP_GPBYNAME)
5080 sv_setiv(sv, (IV)pent->p_proto);
5082 sv_setpv(sv, pent->p_name);
5088 mPUSHs(newSVpv(pent->p_name, 0));
5089 PUSHs(space_join_names_mortal(pent->p_aliases));
5090 mPUSHi(pent->p_proto);
5095 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5100 /* also used for: pp_gsbyname() pp_gsbyport() */
5104 #if defined(HAS_GETSERVBYNAME) || defined(HAS_GETSERVBYPORT) || defined(HAS_GETSERVENT)
5106 I32 which = PL_op->op_type;
5108 #ifndef HAS_GETSERV_PROTOS /* XXX Do we need individual probes? */
5109 struct servent *getservbyname(Netdb_name_t, Netdb_name_t);
5110 struct servent *getservbyport(int, Netdb_name_t);
5111 struct servent *getservent(void);
5113 struct servent *sent;
5115 if (which == OP_GSBYNAME) {
5116 #ifdef HAS_GETSERVBYNAME
5117 const char * const proto = POPpbytex;
5118 const char * const name = POPpbytex;
5119 sent = PerlSock_getservbyname(name, (proto && !*proto) ? NULL : proto);
5121 DIE(aTHX_ PL_no_sock_func, "getservbyname");
5124 else if (which == OP_GSBYPORT) {
5125 #ifdef HAS_GETSERVBYPORT
5126 const char * const proto = POPpbytex;
5127 unsigned short port = (unsigned short)POPu;
5128 port = PerlSock_htons(port);
5129 sent = PerlSock_getservbyport(port, (proto && !*proto) ? NULL : proto);
5131 DIE(aTHX_ PL_no_sock_func, "getservbyport");
5135 #ifdef HAS_GETSERVENT
5136 sent = PerlSock_getservent();
5138 DIE(aTHX_ PL_no_sock_func, "getservent");
5142 if (GIMME_V != G_ARRAY) {
5143 PUSHs(sv = sv_newmortal());
5145 if (which == OP_GSBYNAME) {
5146 sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
5149 sv_setpv(sv, sent->s_name);
5155 mPUSHs(newSVpv(sent->s_name, 0));
5156 PUSHs(space_join_names_mortal(sent->s_aliases));
5157 mPUSHi(PerlSock_ntohs(sent->s_port));
5158 mPUSHs(newSVpv(sent->s_proto, 0));
5163 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5168 /* also used for: pp_snetent() pp_sprotoent() pp_sservent() */
5173 const int stayopen = TOPi;
5174 switch(PL_op->op_type) {
5176 #ifdef HAS_SETHOSTENT
5177 PerlSock_sethostent(stayopen);
5179 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5182 #ifdef HAS_SETNETENT
5184 PerlSock_setnetent(stayopen);
5186 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5190 #ifdef HAS_SETPROTOENT
5191 PerlSock_setprotoent(stayopen);
5193 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5197 #ifdef HAS_SETSERVENT
5198 PerlSock_setservent(stayopen);
5200 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5208 /* also used for: pp_egrent() pp_enetent() pp_eprotoent() pp_epwent()
5209 * pp_eservent() pp_sgrent() pp_spwent() */
5214 switch(PL_op->op_type) {
5216 #ifdef HAS_ENDHOSTENT
5217 PerlSock_endhostent();
5219 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5223 #ifdef HAS_ENDNETENT
5224 PerlSock_endnetent();
5226 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5230 #ifdef HAS_ENDPROTOENT
5231 PerlSock_endprotoent();
5233 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5237 #ifdef HAS_ENDSERVENT
5238 PerlSock_endservent();
5240 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5244 #if defined(HAS_GROUP) && defined(HAS_SETGRENT)
5247 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5251 #if defined(HAS_GROUP) && defined(HAS_ENDGRENT)
5254 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5258 #if defined(HAS_PASSWD) && defined(HAS_SETPWENT)
5261 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5265 #if defined(HAS_PASSWD) && defined(HAS_ENDPWENT)
5268 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5277 /* also used for: pp_gpwnam() pp_gpwuid() */
5283 I32 which = PL_op->op_type;
5285 struct passwd *pwent = NULL;
5287 * We currently support only the SysV getsp* shadow password interface.
5288 * The interface is declared in <shadow.h> and often one needs to link
5289 * with -lsecurity or some such.
5290 * This interface is used at least by Solaris, HP-UX, IRIX, and Linux.
5293 * AIX getpwnam() is clever enough to return the encrypted password
5294 * only if the caller (euid?) is root.
5296 * There are at least three other shadow password APIs. Many platforms
5297 * seem to contain more than one interface for accessing the shadow
5298 * password databases, possibly for compatibility reasons.
5299 * The getsp*() is by far he simplest one, the other two interfaces
5300 * are much more complicated, but also very similar to each other.
5305 * struct pr_passwd *getprpw*();
5306 * The password is in
5307 * char getprpw*(...).ufld.fd_encrypt[]
5308 * Mention HAS_GETPRPWNAM here so that Configure probes for it.
5313 * struct es_passwd *getespw*();
5314 * The password is in
5315 * char *(getespw*(...).ufld.fd_encrypt)
5316 * Mention HAS_GETESPWNAM here so that Configure probes for it.
5319 * struct userpw *getuserpw();
5320 * The password is in
5321 * char *(getuserpw(...)).spw_upw_passwd
5322 * (but the de facto standard getpwnam() should work okay)
5324 * Mention I_PROT here so that Configure probes for it.
5326 * In HP-UX for getprpw*() the manual page claims that one should include
5327 * <hpsecurity.h> instead of <sys/security.h>, but that is not needed
5328 * if one includes <shadow.h> as that includes <hpsecurity.h>,
5329 * and pp_sys.c already includes <shadow.h> if there is such.
5331 * Note that <sys/security.h> is already probed for, but currently
5332 * it is only included in special cases.
5334 * In Digital UNIX/Tru64 if using the getespw*() (which seems to be
5335 * be preferred interface, even though also the getprpw*() interface
5336 * is available) one needs to link with -lsecurity -ldb -laud -lm.
5337 * One also needs to call set_auth_parameters() in main() before
5338 * doing anything else, whether one is using getespw*() or getprpw*().
5340 * Note that accessing the shadow databases can be magnitudes
5341 * slower than accessing the standard databases.
5346 # if defined(__CYGWIN__) && defined(USE_REENTRANT_API)
5347 /* Cygwin 1.5.3-1 has buggy getpwnam_r() and getpwuid_r():
5348 * the pw_comment is left uninitialized. */
5349 PL_reentrant_buffer->_pwent_struct.pw_comment = NULL;
5355 const char* const name = POPpbytex;
5356 pwent = getpwnam(name);
5362 pwent = getpwuid(uid);
5366 # ifdef HAS_GETPWENT
5368 #ifdef POSIX_BC /* In some cases pw_passwd has invalid addresses */
5369 if (pwent) pwent = getpwnam(pwent->pw_name);
5372 DIE(aTHX_ PL_no_func, "getpwent");
5378 if (GIMME_V != G_ARRAY) {
5379 PUSHs(sv = sv_newmortal());
5381 if (which == OP_GPWNAM)
5382 sv_setuid(sv, pwent->pw_uid);
5384 sv_setpv(sv, pwent->pw_name);
5390 mPUSHs(newSVpv(pwent->pw_name, 0));
5394 /* If we have getspnam(), we try to dig up the shadow
5395 * password. If we are underprivileged, the shadow
5396 * interface will set the errno to EACCES or similar,
5397 * and return a null pointer. If this happens, we will
5398 * use the dummy password (usually "*" or "x") from the
5399 * standard password database.
5401 * In theory we could skip the shadow call completely
5402 * if euid != 0 but in practice we cannot know which
5403 * security measures are guarding the shadow databases
5404 * on a random platform.
5406 * Resist the urge to use additional shadow interfaces.
5407 * Divert the urge to writing an extension instead.
5410 /* Some AIX setups falsely(?) detect some getspnam(), which
5411 * has a different API than the Solaris/IRIX one. */
5412 # if defined(HAS_GETSPNAM) && !defined(_AIX)
5415 const struct spwd * const spwent = getspnam(pwent->pw_name);
5416 /* Save and restore errno so that
5417 * underprivileged attempts seem
5418 * to have never made the unsuccessful
5419 * attempt to retrieve the shadow password. */
5421 if (spwent && spwent->sp_pwdp)
5422 sv_setpv(sv, spwent->sp_pwdp);
5426 if (!SvPOK(sv)) /* Use the standard password, then. */
5427 sv_setpv(sv, pwent->pw_passwd);
5430 /* passwd is tainted because user himself can diddle with it.
5431 * admittedly not much and in a very limited way, but nevertheless. */
5434 sv_setuid(PUSHmortal, pwent->pw_uid);
5435 sv_setgid(PUSHmortal, pwent->pw_gid);
5437 /* pw_change, pw_quota, and pw_age are mutually exclusive--
5438 * because of the poor interface of the Perl getpw*(),
5439 * not because there's some standard/convention saying so.
5440 * A better interface would have been to return a hash,
5441 * but we are accursed by our history, alas. --jhi. */
5443 mPUSHi(pwent->pw_change);
5446 mPUSHi(pwent->pw_quota);
5449 mPUSHs(newSVpv(pwent->pw_age, 0));
5451 /* I think that you can never get this compiled, but just in case. */
5452 PUSHs(sv_mortalcopy(&PL_sv_no));
5457 /* pw_class and pw_comment are mutually exclusive--.
5458 * see the above note for pw_change, pw_quota, and pw_age. */
5460 mPUSHs(newSVpv(pwent->pw_class, 0));
5463 mPUSHs(newSVpv(pwent->pw_comment, 0));
5465 /* I think that you can never get this compiled, but just in case. */
5466 PUSHs(sv_mortalcopy(&PL_sv_no));
5471 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_gecos, 0)));
5473 PUSHs(sv = sv_mortalcopy(&PL_sv_no));
5475 /* pw_gecos is tainted because user himself can diddle with it. */
5478 mPUSHs(newSVpv(pwent->pw_dir, 0));
5480 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_shell, 0)));
5481 /* pw_shell is tainted because user himself can diddle with it. */
5485 mPUSHi(pwent->pw_expire);
5490 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5495 /* also used for: pp_ggrgid() pp_ggrnam() */
5501 const I32 which = PL_op->op_type;
5502 const struct group *grent;
5504 if (which == OP_GGRNAM) {
5505 const char* const name = POPpbytex;
5506 grent = (const struct group *)getgrnam(name);
5508 else if (which == OP_GGRGID) {
5509 const Gid_t gid = POPi;
5510 grent = (const struct group *)getgrgid(gid);
5514 grent = (struct group *)getgrent();
5516 DIE(aTHX_ PL_no_func, "getgrent");
5520 if (GIMME_V != G_ARRAY) {
5521 SV * const sv = sv_newmortal();
5525 if (which == OP_GGRNAM)
5526 sv_setgid(sv, grent->gr_gid);
5528 sv_setpv(sv, grent->gr_name);
5534 mPUSHs(newSVpv(grent->gr_name, 0));
5537 mPUSHs(newSVpv(grent->gr_passwd, 0));
5539 PUSHs(sv_mortalcopy(&PL_sv_no));
5542 sv_setgid(PUSHmortal, grent->gr_gid);
5544 #if !(defined(_CRAYMPP) && defined(USE_REENTRANT_API))
5545 /* In UNICOS/mk (_CRAYMPP) the multithreading
5546 * versions (getgrnam_r, getgrgid_r)
5547 * seem to return an illegal pointer
5548 * as the group members list, gr_mem.
5549 * getgrent() doesn't even have a _r version
5550 * but the gr_mem is poisonous anyway.
5551 * So yes, you cannot get the list of group
5552 * members if building multithreaded in UNICOS/mk. */
5553 PUSHs(space_join_names_mortal(grent->gr_mem));
5559 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5569 if (!(tmps = PerlProc_getlogin()))
5571 sv_setpv_mg(TARG, tmps);
5575 DIE(aTHX_ PL_no_func, "getlogin");
5579 /* Miscellaneous. */
5584 dSP; dMARK; dORIGMARK; dTARGET;
5585 I32 items = SP - MARK;
5586 unsigned long a[20];
5591 while (++MARK <= SP) {
5592 if (SvTAINTED(*MARK)) {
5598 TAINT_PROPER("syscall");
5601 /* This probably won't work on machines where sizeof(long) != sizeof(int)
5602 * or where sizeof(long) != sizeof(char*). But such machines will
5603 * not likely have syscall implemented either, so who cares?
5605 while (++MARK <= SP) {
5606 if (SvNIOK(*MARK) || !i)
5607 a[i++] = SvIV(*MARK);
5608 else if (*MARK == &PL_sv_undef)
5611 a[i++] = (unsigned long)SvPV_force_nolen(*MARK);
5617 DIE(aTHX_ "Too many args to syscall");
5619 DIE(aTHX_ "Too few args to syscall");
5621 retval = syscall(a[0]);
5624 retval = syscall(a[0],a[1]);
5627 retval = syscall(a[0],a[1],a[2]);
5630 retval = syscall(a[0],a[1],a[2],a[3]);
5633 retval = syscall(a[0],a[1],a[2],a[3],a[4]);
5636 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5]);
5639 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
5642 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
5649 DIE(aTHX_ PL_no_func, "syscall");
5653 #ifdef FCNTL_EMULATE_FLOCK
5655 /* XXX Emulate flock() with fcntl().
5656 What's really needed is a good file locking module.
5660 fcntl_emulate_flock(int fd, int operation)
5665 switch (operation & ~LOCK_NB) {
5667 flock.l_type = F_RDLCK;
5670 flock.l_type = F_WRLCK;
5673 flock.l_type = F_UNLCK;
5679 flock.l_whence = SEEK_SET;
5680 flock.l_start = flock.l_len = (Off_t)0;
5682 res = fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &flock);
5683 if (res == -1 && ((errno == EAGAIN) || (errno == EACCES)))
5684 errno = EWOULDBLOCK;
5688 #endif /* FCNTL_EMULATE_FLOCK */
5690 #ifdef LOCKF_EMULATE_FLOCK
5692 /* XXX Emulate flock() with lockf(). This is just to increase
5693 portability of scripts. The calls are not completely
5694 interchangeable. What's really needed is a good file
5698 /* The lockf() constants might have been defined in <unistd.h>.
5699 Unfortunately, <unistd.h> causes troubles on some mixed
5700 (BSD/POSIX) systems, such as SunOS 4.1.3.
5702 Further, the lockf() constants aren't POSIX, so they might not be
5703 visible if we're compiling with _POSIX_SOURCE defined. Thus, we'll
5704 just stick in the SVID values and be done with it. Sigh.
5708 # define F_ULOCK 0 /* Unlock a previously locked region */
5711 # define F_LOCK 1 /* Lock a region for exclusive use */
5714 # define F_TLOCK 2 /* Test and lock a region for exclusive use */
5717 # define F_TEST 3 /* Test a region for other processes locks */
5721 lockf_emulate_flock(int fd, int operation)
5727 /* flock locks entire file so for lockf we need to do the same */
5728 pos = PerlLIO_lseek(fd, (Off_t)0, SEEK_CUR); /* get pos to restore later */
5729 if (pos > 0) /* is seekable and needs to be repositioned */
5730 if (PerlLIO_lseek(fd, (Off_t)0, SEEK_SET) < 0)
5731 pos = -1; /* seek failed, so don't seek back afterwards */
5734 switch (operation) {
5736 /* LOCK_SH - get a shared lock */
5738 /* LOCK_EX - get an exclusive lock */
5740 i = lockf (fd, F_LOCK, 0);
5743 /* LOCK_SH|LOCK_NB - get a non-blocking shared lock */
5744 case LOCK_SH|LOCK_NB:
5745 /* LOCK_EX|LOCK_NB - get a non-blocking exclusive lock */
5746 case LOCK_EX|LOCK_NB:
5747 i = lockf (fd, F_TLOCK, 0);
5749 if ((errno == EAGAIN) || (errno == EACCES))
5750 errno = EWOULDBLOCK;
5753 /* LOCK_UN - unlock (non-blocking is a no-op) */
5755 case LOCK_UN|LOCK_NB:
5756 i = lockf (fd, F_ULOCK, 0);
5759 /* Default - can't decipher operation */
5766 if (pos > 0) /* need to restore position of the handle */
5767 PerlLIO_lseek(fd, pos, SEEK_SET); /* ignore error here */
5772 #endif /* LOCKF_EMULATE_FLOCK */
5775 * ex: set ts=8 sts=4 sw=4 et: