3 * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4 * 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * But only a short way ahead its floor and the walls on either side were
13 * cloven by a great fissure, out of which the red glare came, now leaping
14 * up, now dying down into darkness; and all the while far below there was
15 * a rumour and a trouble as of great engines throbbing and labouring.
17 * [p.945 of _The Lord of the Rings_, VI/iii: "Mount Doom"]
20 /* This file contains system pp ("push/pop") functions that
21 * execute the opcodes that make up a perl program. A typical pp function
22 * expects to find its arguments on the stack, and usually pushes its
23 * results onto the stack, hence the 'pp' terminology. Each OP structure
24 * contains a pointer to the relevant pp_foo() function.
26 * By 'system', we mean ops which interact with the OS, such as pp_open().
30 #define PERL_IN_PP_SYS_C
35 /* Shadow password support for solaris - pdo@cs.umd.edu
36 * Not just Solaris: at least HP-UX, IRIX, Linux.
37 * The API is from SysV.
39 * There are at least two more shadow interfaces,
40 * see the comments in pp_gpwent().
44 /* There is a MAXINT coming from <shadow.h> <- <hpsecurity.h> <- <values.h>
45 * and another MAXINT from "perl.h" <- <sys/param.h>. */
52 # include <sys/resource.h>
61 # include <sys/select.h>
65 /* XXX Configure test needed.
66 h_errno might not be a simple 'int', especially for multi-threaded
67 applications, see "extern int errno in perl.h". Creating such
68 a test requires taking into account the differences between
69 compiling multithreaded and singlethreaded ($ccflags et al).
70 HOST_NOT_FOUND is typically defined in <netdb.h>.
72 #if defined(HOST_NOT_FOUND) && !defined(h_errno) && !defined(__CYGWIN__)
81 struct passwd *getpwnam (char *);
82 struct passwd *getpwuid (Uid_t);
87 struct passwd *getpwent (void);
88 #elif defined (VMS) && defined (my_getpwent)
89 struct passwd *Perl_my_getpwent (pTHX);
98 struct group *getgrnam (char *);
99 struct group *getgrgid (Gid_t);
103 struct group *getgrent (void);
109 # if defined(_MSC_VER) || defined(__MINGW32__)
110 # include <sys/utime.h>
117 # ifdef my_chsize /* Probably #defined to Perl_my_chsize in embed.h */
120 # define my_chsize PerlLIO_chsize
123 # define my_chsize PerlLIO_chsize
125 I32 my_chsize(int fd, Off_t length);
131 #else /* no flock() */
133 /* fcntl.h might not have been included, even if it exists, because
134 the current Configure only sets I_FCNTL if it's needed to pick up
135 the *_OK constants. Make sure it has been included before testing
136 the fcntl() locking constants. */
137 # if defined(HAS_FCNTL) && !defined(I_FCNTL)
141 # if defined(HAS_FCNTL) && defined(FCNTL_CAN_LOCK)
142 # define FLOCK fcntl_emulate_flock
143 # define FCNTL_EMULATE_FLOCK
144 # else /* no flock() or fcntl(F_SETLK,...) */
146 # define FLOCK lockf_emulate_flock
147 # define LOCKF_EMULATE_FLOCK
149 # endif /* no flock() or fcntl(F_SETLK,...) */
152 static int FLOCK (int, int);
155 * These are the flock() constants. Since this sytems doesn't have
156 * flock(), the values of the constants are probably not available.
170 # endif /* emulating flock() */
172 #endif /* no flock() */
175 static const char zero_but_true[ZBTLEN + 1] = "0 but true";
177 #if defined(I_SYS_ACCESS) && !defined(R_OK)
178 # include <sys/access.h>
184 /* Missing protos on LynxOS */
185 void sethostent(int);
186 void endhostent(void);
188 void endnetent(void);
189 void setprotoent(int);
190 void endprotoent(void);
191 void setservent(int);
192 void endservent(void);
196 # include "amigaos4/amigaio.h"
199 #undef PERL_EFF_ACCESS /* EFFective uid/gid ACCESS */
201 /* F_OK unused: if stat() cannot find it... */
203 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) && defined(EFF_ONLY_OK) && !defined(NO_EFF_ONLY_OK)
204 /* Digital UNIX (when the EFF_ONLY_OK gets fixed), UnixWare */
205 # define PERL_EFF_ACCESS(p,f) (access((p), (f) | EFF_ONLY_OK))
208 #if !defined(PERL_EFF_ACCESS) && defined(HAS_EACCESS)
209 # ifdef I_SYS_SECURITY
210 # include <sys/security.h>
214 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f), ACC_SELF))
217 # define PERL_EFF_ACCESS(p,f) (eaccess((p), (f)))
221 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESSX) && defined(ACC_SELF)
223 # define PERL_EFF_ACCESS(p,f) (accessx((p), (f), ACC_SELF))
227 #if !defined(PERL_EFF_ACCESS) && defined(HAS_ACCESS) \
228 && (defined(HAS_SETREUID) || defined(HAS_SETRESUID) \
229 || defined(HAS_SETREGID) || defined(HAS_SETRESGID))
232 S_emulate_eaccess(pTHX_ const char* path, Mode_t mode)
234 const Uid_t ruid = getuid();
235 const Uid_t euid = geteuid();
236 const Gid_t rgid = getgid();
237 const Gid_t egid = getegid();
240 #if !defined(HAS_SETREUID) && !defined(HAS_SETRESUID)
241 Perl_croak(aTHX_ "switching effective uid is not implemented");
244 if (setreuid(euid, ruid))
247 if (setresuid(euid, ruid, (Uid_t)-1))
250 /* diag_listed_as: entering effective %s failed */
251 Perl_croak(aTHX_ "entering effective uid failed");
254 #if !defined(HAS_SETREGID) && !defined(HAS_SETRESGID)
255 Perl_croak(aTHX_ "switching effective gid is not implemented");
258 if (setregid(egid, rgid))
261 if (setresgid(egid, rgid, (Gid_t)-1))
264 /* diag_listed_as: entering effective %s failed */
265 Perl_croak(aTHX_ "entering effective gid failed");
268 res = access(path, mode);
271 if (setreuid(ruid, euid))
274 if (setresuid(ruid, euid, (Uid_t)-1))
277 /* diag_listed_as: leaving effective %s failed */
278 Perl_croak(aTHX_ "leaving effective uid failed");
281 if (setregid(rgid, egid))
284 if (setresgid(rgid, egid, (Gid_t)-1))
287 /* diag_listed_as: leaving effective %s failed */
288 Perl_croak(aTHX_ "leaving effective gid failed");
292 # define PERL_EFF_ACCESS(p,f) (S_emulate_eaccess(aTHX_ (p), (f)))
299 const char * const tmps = POPpconstx;
300 const U8 gimme = GIMME_V;
301 const char *mode = "r";
304 if (PL_op->op_private & OPpOPEN_IN_RAW)
306 else if (PL_op->op_private & OPpOPEN_IN_CRLF)
308 fp = PerlProc_popen(tmps, mode);
310 const char * const type = Perl_PerlIO_context_layers(aTHX_ NULL);
312 PerlIO_apply_layers(aTHX_ fp,mode,type);
314 if (gimme == G_VOID) {
316 while (PerlIO_read(fp, tmpbuf, sizeof tmpbuf) > 0)
319 else if (gimme == G_SCALAR) {
320 ENTER_with_name("backtick");
322 PL_rs = &PL_sv_undef;
323 SvPVCLEAR(TARG); /* note that this preserves previous buffer */
324 while (sv_gets(TARG, fp, SvCUR(TARG)) != NULL)
326 LEAVE_with_name("backtick");
332 SV * const sv = newSV(79);
333 if (sv_gets(sv, fp, 0) == NULL) {
338 if (SvLEN(sv) - SvCUR(sv) > 20) {
339 SvPV_shrink_to_cur(sv);
344 STATUS_NATIVE_CHILD_SET(PerlProc_pclose(fp));
345 TAINT; /* "I believe that this is not gratuitous!" */
348 STATUS_NATIVE_CHILD_SET(-1);
349 if (gimme == G_SCALAR)
360 GV * const gv = (PL_op->op_flags & OPf_SPECIAL) ? NULL : (GV *)POPs;
364 /* make a copy of the pattern if it is gmagical, to ensure that magic
365 * is called once and only once */
366 if (SvGMAGICAL(TOPs)) TOPs = sv_2mortal(newSVsv(TOPs));
368 tryAMAGICunTARGETlist(iter_amg, (PL_op->op_flags & OPf_SPECIAL));
370 if (PL_op->op_flags & OPf_SPECIAL) {
371 /* call Perl-level glob function instead. Stack args are:
373 * and following OPs should be: gv(CORE::GLOBAL::glob), entersub
382 /* Note that we only ever get here if File::Glob fails to load
383 * without at the same time croaking, for some reason, or if
384 * perl was built with PERL_EXTERNAL_GLOB */
386 ENTER_with_name("glob");
391 * The external globbing program may use things we can't control,
392 * so for security reasons we must assume the worst.
395 taint_proper(PL_no_security, "glob");
399 SAVESPTR(PL_last_in_gv); /* We don't want this to be permanent. */
402 SAVESPTR(PL_rs); /* This is not permanent, either. */
403 PL_rs = newSVpvs_flags("\000", SVs_TEMP);
406 *SvPVX(PL_rs) = '\n';
410 result = do_readline();
411 LEAVE_with_name("glob");
417 PL_last_in_gv = cGVOP_gv;
418 return do_readline();
428 do_join(TARG, &PL_sv_no, MARK, SP);
432 else if (SP == MARK) {
439 if (SvGMAGICAL(exsv)) exsv = sv_mortalcopy(exsv);
442 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
443 /* well-formed exception supplied */
446 SV * const errsv = ERRSV;
449 if (SvGMAGICAL(errsv)) {
450 exsv = sv_newmortal();
451 sv_setsv_nomg(exsv, errsv);
455 else if (SvPOKp(errsv) ? SvCUR(errsv) : SvNIOKp(errsv)) {
456 exsv = sv_newmortal();
457 sv_setsv_nomg(exsv, errsv);
458 sv_catpvs(exsv, "\t...caught");
461 exsv = newSVpvs_flags("Warning: something's wrong", SVs_TEMP);
464 if (SvROK(exsv) && !PL_warnhook)
465 Perl_warn(aTHX_ "%" SVf, SVfARG(exsv));
477 VMSISH_HUSHED || (PL_curcop->op_private & OPpHUSH_VMSISH);
479 if (SP - MARK != 1) {
481 do_join(TARG, &PL_sv_no, MARK, SP);
489 if (SvROK(exsv) || (SvPV_const(exsv, len), len)) {
490 /* well-formed exception supplied */
493 SV * const errsv = ERRSV;
497 if (sv_isobject(exsv)) {
498 HV * const stash = SvSTASH(SvRV(exsv));
499 GV * const gv = gv_fetchmethod(stash, "PROPAGATE");
501 SV * const file = sv_2mortal(newSVpv(CopFILE(PL_curcop),0));
502 SV * const line = sv_2mortal(newSVuv(CopLINE(PL_curcop)));
509 call_sv(MUTABLE_SV(GvCV(gv)),
510 G_SCALAR|G_EVAL|G_KEEPERR);
511 exsv = sv_mortalcopy(*PL_stack_sp--);
515 else if (SvPOK(errsv) && SvCUR(errsv)) {
516 exsv = sv_mortalcopy(errsv);
517 sv_catpvs(exsv, "\t...propagated");
520 exsv = newSVpvs_flags("Died", SVs_TEMP);
524 NOT_REACHED; /* NOTREACHED */
525 return NULL; /* avoid missing return from non-void function warning */
531 Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv,
532 const MAGIC *const mg, const U32 flags, U32 argc, ...)
538 PERL_ARGS_ASSERT_TIED_METHOD;
540 /* Ensure that our flag bits do not overlap. */
541 STATIC_ASSERT_STMT((TIED_METHOD_MORTALIZE_NOT_NEEDED & G_WANT) == 0);
542 STATIC_ASSERT_STMT((TIED_METHOD_ARGUMENTS_ON_STACK & G_WANT) == 0);
543 STATIC_ASSERT_STMT((TIED_METHOD_SAY & G_WANT) == 0);
545 PUTBACK; /* sp is at *foot* of args, so this pops args from old stack */
546 PUSHSTACKi(PERLSI_MAGIC);
547 /* extend for object + args. If argc might wrap/truncate when cast
548 * to SSize_t and incremented, set to -1, which will trigger a panic in
550 * The weird way this is written is because g++ is dumb enough to
551 * warn "comparison is always false" on something like:
553 * sizeof(a) >= sizeof(b) && a >= B_t_MAX -1
555 * (where the LH condition is false)
558 (argc > (sizeof(argc) >= sizeof(SSize_t) ? SSize_t_MAX - 1 : argc))
559 ? -1 : (SSize_t)argc + 1;
560 EXTEND(SP, extend_size);
562 PUSHs(SvTIED_obj(sv, mg));
563 if (flags & TIED_METHOD_ARGUMENTS_ON_STACK) {
564 Copy(orig_sp + 2, sp + 1, argc, SV*); /* copy args to new stack */
568 const U32 mortalize_not_needed
569 = flags & TIED_METHOD_MORTALIZE_NOT_NEEDED;
571 va_start(args, argc);
573 SV *const arg = va_arg(args, SV *);
574 if(mortalize_not_needed)
583 ENTER_with_name("call_tied_method");
584 if (flags & TIED_METHOD_SAY) {
585 /* local $\ = "\n" */
586 SAVEGENERICSV(PL_ors_sv);
587 PL_ors_sv = newSVpvs("\n");
589 ret_args = call_sv(methname, (flags & G_WANT)|G_METHOD_NAMED);
594 if (ret_args) { /* copy results back to original stack */
595 EXTEND(sp, ret_args);
596 Copy(orig_sp - ret_args + 1, sp + 1, ret_args, SV*);
600 LEAVE_with_name("call_tied_method");
604 #define tied_method0(a,b,c,d) \
605 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,0)
606 #define tied_method1(a,b,c,d,e) \
607 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,1,e)
608 #define tied_method2(a,b,c,d,e,f) \
609 Perl_tied_method(aTHX_ a,b,c,d,G_SCALAR,2,e,f)
622 GV * const gv = MUTABLE_GV(*++MARK);
624 if (!isGV(gv) && !(SvTYPE(gv) == SVt_PVLV && isGV_with_GP(gv)))
625 DIE(aTHX_ PL_no_usym, "filehandle");
627 if ((io = GvIOp(gv))) {
629 IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
632 Perl_croak(aTHX_ "Cannot open %" HEKf " as a filehandle: it is already open as a dirhandle",
633 HEKfARG(GvENAME_HEK(gv)));
635 mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
637 /* Method's args are same as ours ... */
638 /* ... except handle is replaced by the object */
639 return Perl_tied_method(aTHX_ SV_CONST(OPEN), mark - 1, MUTABLE_SV(io), mg,
640 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
652 tmps = SvPV_const(sv, len);
653 ok = do_open6(gv, tmps, len, NULL, MARK+1, (SP-MARK));
656 PUSHi( (I32)PL_forkprocess );
657 else if (PL_forkprocess == 0) /* we are a new child */
668 MAXARG == 0 || (!TOPs && !POPs) ? PL_defoutgv : MUTABLE_GV(POPs);
674 IO * const io = GvIO(gv);
676 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
678 return tied_method0(SV_CONST(CLOSE), SP, MUTABLE_SV(io), mg);
682 PUSHs(boolSV(do_close(gv, TRUE)));
694 GV * const wgv = MUTABLE_GV(POPs);
695 GV * const rgv = MUTABLE_GV(POPs);
699 do_close(rgv, FALSE);
703 do_close(wgv, FALSE);
705 if (PerlProc_pipe(fd) < 0)
708 IoIFP(rstio) = PerlIO_fdopen(fd[0], "r" PIPE_OPEN_MODE);
709 IoOFP(wstio) = PerlIO_fdopen(fd[1], "w" PIPE_OPEN_MODE);
710 IoOFP(rstio) = IoIFP(rstio);
711 IoIFP(wstio) = IoOFP(wstio);
712 IoTYPE(rstio) = IoTYPE_RDONLY;
713 IoTYPE(wstio) = IoTYPE_WRONLY;
715 if (!IoIFP(rstio) || !IoOFP(wstio)) {
717 PerlIO_close(IoIFP(rstio));
719 PerlLIO_close(fd[0]);
721 PerlIO_close(IoOFP(wstio));
723 PerlLIO_close(fd[1]);
726 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
727 /* ensure close-on-exec */
728 if ((fd[0] > PL_maxsysfd && fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) ||
729 (fd[1] > PL_maxsysfd && fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0))
737 DIE(aTHX_ PL_no_func, "pipe");
751 gv = MUTABLE_GV(POPs);
755 && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar)))
757 return tied_method0(SV_CONST(FILENO), SP, MUTABLE_SV(io), mg);
760 if (io && IoDIRP(io)) {
761 #if defined(HAS_DIRFD) || defined(HAS_DIR_DD_FD)
762 PUSHi(my_dirfd(IoDIRP(io)));
764 #elif defined(ENOTSUP)
765 errno = ENOTSUP; /* Operation not supported */
767 #elif defined(EOPNOTSUPP)
768 errno = EOPNOTSUPP; /* Operation not supported on socket */
771 errno = EINVAL; /* Invalid argument */
776 if (!io || !(fp = IoIFP(io))) {
777 /* Can't do this because people seem to do things like
778 defined(fileno($foo)) to check whether $foo is a valid fh.
785 PUSHi(PerlIO_fileno(fp));
796 if (MAXARG < 1 || (!TOPs && !POPs)) {
797 anum = PerlLIO_umask(022);
798 /* setting it to 022 between the two calls to umask avoids
799 * to have a window where the umask is set to 0 -- meaning
800 * that another thread could create world-writeable files. */
802 (void)PerlLIO_umask(anum);
805 anum = PerlLIO_umask(POPi);
806 TAINT_PROPER("umask");
809 /* Only DIE if trying to restrict permissions on "user" (self).
810 * Otherwise it's harmless and more useful to just return undef
811 * since 'group' and 'other' concepts probably don't exist here. */
812 if (MAXARG >= 1 && (TOPs||POPs) && (POPi & 0700))
813 DIE(aTHX_ "umask not implemented");
814 XPUSHs(&PL_sv_undef);
833 gv = MUTABLE_GV(POPs);
837 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
839 /* This takes advantage of the implementation of the varargs
840 function, which I don't think that the optimiser will be able to
841 figure out. Although, as it's a static function, in theory it
843 return Perl_tied_method(aTHX_ SV_CONST(BINMODE), SP, MUTABLE_SV(io), mg,
844 G_SCALAR|TIED_METHOD_MORTALIZE_NOT_NEEDED,
845 discp ? 1 : 0, discp);
849 if (!io || !(fp = IoIFP(io))) {
851 SETERRNO(EBADF,RMS_IFI);
858 const char *d = NULL;
861 d = SvPV_const(discp, len);
862 mode = mode_from_discipline(d, len);
863 if (PerlIO_binmode(aTHX_ fp, IoTYPE(io), mode, d)) {
864 if (IoOFP(io) && IoOFP(io) != IoIFP(io)) {
865 if (!PerlIO_binmode(aTHX_ IoOFP(io), IoTYPE(io), mode, d)) {
886 const I32 markoff = MARK - PL_stack_base;
887 const char *methname;
888 int how = PERL_MAGIC_tied;
892 switch(SvTYPE(varsv)) {
896 methname = "TIEHASH";
897 if (HvLAZYDEL(varsv) && (entry = HvEITER((HV *)varsv))) {
898 HvLAZYDEL_off(varsv);
899 hv_free_ent((HV *)varsv, entry);
901 HvEITER_set(MUTABLE_HV(varsv), 0);
905 methname = "TIEARRAY";
906 if (!AvREAL(varsv)) {
908 Perl_croak(aTHX_ "Cannot tie unreifiable array");
909 av_clear((AV *)varsv);
916 if (isGV_with_GP(varsv) && !SvFAKE(varsv)) {
917 methname = "TIEHANDLE";
918 how = PERL_MAGIC_tiedscalar;
919 /* For tied filehandles, we apply tiedscalar magic to the IO
920 slot of the GP rather than the GV itself. AMS 20010812 */
922 GvIOp(varsv) = newIO();
923 varsv = MUTABLE_SV(GvIOp(varsv));
926 if (SvTYPE(varsv) == SVt_PVLV && LvTYPE(varsv) == 'y') {
927 vivify_defelem(varsv);
928 varsv = LvTARG(varsv);
932 methname = "TIESCALAR";
933 how = PERL_MAGIC_tiedscalar;
937 if (sv_isobject(*MARK)) { /* Calls GET magic. */
938 ENTER_with_name("call_TIE");
939 PUSHSTACKi(PERLSI_MAGIC);
941 EXTEND(SP,(I32)items);
945 call_method(methname, G_SCALAR);
948 /* Can't use call_method here, else this: fileno FOO; tie @a, "FOO"
949 * will attempt to invoke IO::File::TIEARRAY, with (best case) the
950 * wrong error message, and worse case, supreme action at a distance.
951 * (Sorry obfuscation writers. You're not going to be given this one.)
953 stash = gv_stashsv(*MARK, 0);
956 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\"",
957 methname, SVfARG(*MARK));
958 else if (isGV(*MARK)) {
959 /* If the glob doesn't name an existing package, using
960 * SVfARG(*MARK) would yield "*Foo::Bar" or *main::Foo. So
961 * generate the name for the error message explicitly. */
962 SV *stashname = sv_2mortal(newSV(0));
963 gv_fullname4(stashname, (GV *) *MARK, NULL, FALSE);
964 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\"",
965 methname, SVfARG(stashname));
968 SV *stashname = !SvPOK(*MARK) ? &PL_sv_no
969 : SvCUR(*MARK) ? *MARK
970 : sv_2mortal(newSVpvs("main"));
971 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" SVf "\""
972 " (perhaps you forgot to load \"%" SVf "\"?)",
973 methname, SVfARG(stashname), SVfARG(stashname));
976 else if (!(gv = gv_fetchmethod(stash, methname))) {
977 /* The effective name can only be NULL for stashes that have
978 * been deleted from the symbol table, which this one can't
979 * be, since we just looked it up by name.
981 DIE(aTHX_ "Can't locate object method \"%s\" via package \"%" HEKf "\"",
982 methname, HvENAME_HEK_NN(stash));
984 ENTER_with_name("call_TIE");
985 PUSHSTACKi(PERLSI_MAGIC);
987 EXTEND(SP,(I32)items);
991 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
997 if (sv_isobject(sv)) {
998 sv_unmagic(varsv, how);
999 /* Croak if a self-tie on an aggregate is attempted. */
1000 if (varsv == SvRV(sv) &&
1001 (SvTYPE(varsv) == SVt_PVAV ||
1002 SvTYPE(varsv) == SVt_PVHV))
1004 "Self-ties of arrays and hashes are not supported");
1005 sv_magic(varsv, (SvRV(sv) == varsv ? NULL : sv), how, NULL, 0);
1007 LEAVE_with_name("call_TIE");
1008 SP = PL_stack_base + markoff;
1014 /* also used for: pp_dbmclose() */
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))) RETPUSHUNDEF;
1030 if ((mg = SvTIED_mg(sv, how))) {
1031 SV * const obj = SvRV(SvTIED_obj(sv, mg));
1033 GV * const gv = gv_fetchmethod_autoload(SvSTASH(obj), "UNTIE", FALSE);
1035 if (gv && isGV(gv) && (cv = GvCV(gv))) {
1037 PUSHs(SvTIED_obj(MUTABLE_SV(gv), mg));
1038 mXPUSHi(SvREFCNT(obj) - 1);
1040 ENTER_with_name("call_UNTIE");
1041 call_sv(MUTABLE_SV(cv), G_VOID);
1042 LEAVE_with_name("call_UNTIE");
1045 else if (mg && SvREFCNT(obj) > 1) {
1046 Perl_ck_warner(aTHX_ packWARN(WARN_UNTIE),
1047 "untie attempted while %" UVuf " inner references still exist",
1048 (UV)SvREFCNT(obj) - 1 ) ;
1052 sv_unmagic(sv, how) ;
1061 const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
1062 ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
1064 if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
1067 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y' &&
1068 !(sv = defelem_target(sv, NULL))) goto ret_undef;
1070 if ((mg = SvTIED_mg(sv, how))) {
1071 SETs(SvTIED_obj(sv, mg));
1072 return NORMAL; /* PUTBACK not needed, pp_tied never moves SP */
1086 HV * const hv = MUTABLE_HV(POPs);
1087 SV * const sv = newSVpvs_flags("AnyDBM_File", SVs_TEMP);
1088 stash = gv_stashsv(sv, 0);
1089 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH"))) {
1091 require_pv("AnyDBM_File.pm");
1093 if (!stash || !(gv = gv_fetchmethod(stash, "TIEHASH")))
1094 DIE(aTHX_ "No dbm on this machine");
1104 mPUSHu(O_RDWR|O_CREAT);
1108 if (!SvOK(right)) right = &PL_sv_no;
1112 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1115 if (!sv_isobject(TOPs)) {
1123 call_sv(MUTABLE_SV(GvCV(gv)), G_SCALAR);
1125 if (sv_isobject(TOPs))
1130 sv_unmagic(MUTABLE_SV(hv), PERL_MAGIC_tied);
1131 sv_magic(MUTABLE_SV(hv), TOPs, PERL_MAGIC_tied, NULL, 0);
1148 struct timeval timebuf;
1149 struct timeval *tbuf = &timebuf;
1152 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1157 # if BYTEORDER & 0xf0000
1158 # define ORDERBYTE (0x88888888 - BYTEORDER)
1160 # define ORDERBYTE (0x4444 - BYTEORDER)
1166 for (i = 1; i <= 3; i++) {
1167 SV * const sv = SP[i];
1171 if (SvREADONLY(sv)) {
1172 if (!(SvPOK(sv) && SvCUR(sv) == 0))
1173 Perl_croak_no_modify();
1175 else if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
1178 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
1179 "Non-string passed as bitmask");
1180 SvPV_force_nomg_nolen(sv); /* force string conversion */
1187 /* little endians can use vecs directly */
1188 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1195 masksize = NFDBITS / NBBY;
1197 masksize = sizeof(long); /* documented int, everyone seems to use long */
1199 Zero(&fd_sets[0], 4, char*);
1202 # if SELECT_MIN_BITS == 1
1203 growsize = sizeof(fd_set);
1205 # if defined(__GLIBC__) && defined(__FD_SETSIZE)
1206 # undef SELECT_MIN_BITS
1207 # define SELECT_MIN_BITS __FD_SETSIZE
1209 /* If SELECT_MIN_BITS is greater than one we most probably will want
1210 * to align the sizes with SELECT_MIN_BITS/8 because for example
1211 * in many little-endian (Intel, Alpha) systems (Linux, OS/2, Digital
1212 * UNIX, Solaris, Darwin) the smallest quantum select() operates
1213 * on (sets/tests/clears bits) is 32 bits. */
1214 growsize = maxlen + (SELECT_MIN_BITS/8 - (maxlen % (SELECT_MIN_BITS/8)));
1220 value = SvNV_nomg(sv);
1223 timebuf.tv_sec = (long)value;
1224 value -= (NV)timebuf.tv_sec;
1225 timebuf.tv_usec = (long)(value * 1000000.0);
1230 for (i = 1; i <= 3; i++) {
1232 if (!SvOK(sv) || SvCUR(sv) == 0) {
1239 Sv_Grow(sv, growsize);
1243 while (++j <= growsize) {
1247 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1249 Newx(fd_sets[i], growsize, char);
1250 for (offset = 0; offset < growsize; offset += masksize) {
1251 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1252 fd_sets[i][j+offset] = s[(k % masksize) + offset];
1255 fd_sets[i] = SvPVX(sv);
1259 #ifdef PERL_IRIX5_SELECT_TIMEVAL_VOID_CAST
1260 /* Can't make just the (void*) conditional because that would be
1261 * cpp #if within cpp macro, and not all compilers like that. */
1262 nfound = PerlSock_select(
1264 (Select_fd_set_t) fd_sets[1],
1265 (Select_fd_set_t) fd_sets[2],
1266 (Select_fd_set_t) fd_sets[3],
1267 (void*) tbuf); /* Workaround for compiler bug. */
1269 nfound = PerlSock_select(
1271 (Select_fd_set_t) fd_sets[1],
1272 (Select_fd_set_t) fd_sets[2],
1273 (Select_fd_set_t) fd_sets[3],
1276 for (i = 1; i <= 3; i++) {
1279 #if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
1281 for (offset = 0; offset < growsize; offset += masksize) {
1282 for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
1283 s[(k % masksize) + offset] = fd_sets[i][j+offset];
1285 Safefree(fd_sets[i]);
1292 if (GIMME_V == G_ARRAY && tbuf) {
1293 value = (NV)(timebuf.tv_sec) +
1294 (NV)(timebuf.tv_usec) / 1000000.0;
1299 DIE(aTHX_ "select not implemented");
1307 =for apidoc setdefout
1309 Sets C<PL_defoutgv>, the default file handle for output, to the passed in
1310 typeglob. As C<PL_defoutgv> "owns" a reference on its typeglob, the reference
1311 count of the passed in typeglob is increased by one, and the reference count
1312 of the typeglob that C<PL_defoutgv> points to is decreased by one.
1318 Perl_setdefout(pTHX_ GV *gv)
1320 GV *oldgv = PL_defoutgv;
1322 PERL_ARGS_ASSERT_SETDEFOUT;
1324 SvREFCNT_inc_simple_void_NN(gv);
1326 SvREFCNT_dec(oldgv);
1333 GV * const newdefout = (PL_op->op_private > 0) ? (MUTABLE_GV(POPs)) : NULL;
1334 GV * egv = GvEGVx(PL_defoutgv);
1339 hv = isGV_with_GP(egv) ? GvSTASH(egv) : NULL;
1340 gvp = hv && HvENAME(hv)
1341 ? (GV**)hv_fetch(hv, GvNAME(egv), HEK_UTF8(GvNAME_HEK(egv)) ? -GvNAMELEN(egv) : GvNAMELEN(egv), FALSE)
1343 if (gvp && *gvp == egv) {
1344 gv_efullname4(TARG, PL_defoutgv, NULL, TRUE);
1348 mXPUSHs(newRV(MUTABLE_SV(egv)));
1352 if (!GvIO(newdefout))
1353 gv_IOadd(newdefout);
1354 setdefout(newdefout);
1364 MAXARG==0 || (!TOPs && !POPs) ? PL_stdingv : MUTABLE_GV(POPs);
1365 IO *const io = GvIO(gv);
1371 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1373 const U8 gimme = GIMME_V;
1374 Perl_tied_method(aTHX_ SV_CONST(GETC), SP, MUTABLE_SV(io), mg, gimme, 0);
1375 if (gimme == G_SCALAR) {
1377 SvSetMagicSV_nosteal(TARG, TOPs);
1382 if (!gv || do_eof(gv)) { /* make sure we have fp with something */
1383 if (!io || (!IoIFP(io) && IoTYPE(io) != IoTYPE_WRONLY))
1385 SETERRNO(EBADF,RMS_IFI);
1389 sv_setpvs(TARG, " ");
1390 *SvPVX(TARG) = PerlIO_getc(IoIFP(GvIOp(gv))); /* should never be EOF */
1391 if (PerlIO_isutf8(IoIFP(GvIOp(gv)))) {
1392 /* Find out how many bytes the char needs */
1393 Size_t len = UTF8SKIP(SvPVX_const(TARG));
1396 len = PerlIO_read(IoIFP(GvIOp(gv)),SvPVX(TARG)+1,len-1);
1397 SvCUR_set(TARG,1+len);
1401 else SvUTF8_off(TARG);
1407 S_doform(pTHX_ CV *cv, GV *gv, OP *retop)
1410 const U8 gimme = GIMME_V;
1412 PERL_ARGS_ASSERT_DOFORM;
1415 cv = MUTABLE_CV(sv_2mortal(MUTABLE_SV(cv_clone(cv))));
1417 cx = cx_pushblock(CXt_FORMAT, gimme, PL_stack_sp, PL_savestack_ix);
1418 cx_pushformat(cx, cv, retop, gv);
1419 if (CvDEPTH(cv) >= 2)
1420 pad_push(CvPADLIST(cv), CvDEPTH(cv));
1421 PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv));
1423 setdefout(gv); /* locally select filehandle so $% et al work */
1440 gv = MUTABLE_GV(POPs);
1457 SV * const tmpsv = sv_newmortal();
1458 gv_efullname4(tmpsv, fgv, NULL, FALSE);
1459 DIE(aTHX_ "Undefined format \"%" SVf "\" called", SVfARG(tmpsv));
1461 IoFLAGS(io) &= ~IOf_DIDTOP;
1462 RETURNOP(doform(cv,gv,PL_op->op_next));
1468 GV * const gv = CX_CUR()->blk_format.gv;
1469 IO * const io = GvIOp(gv);
1474 bool is_return = cBOOL(PL_op->op_type == OP_RETURN);
1476 if (is_return || !io || !(ofp = IoOFP(io)))
1479 DEBUG_f(PerlIO_printf(Perl_debug_log, "left=%ld, todo=%ld\n",
1480 (long)IoLINES_LEFT(io), (long)FmLINES(PL_formtarget)));
1482 if (IoLINES_LEFT(io) < FmLINES(PL_formtarget) &&
1483 PL_formtarget != PL_toptarget)
1487 if (!IoTOP_GV(io)) {
1490 if (!IoTOP_NAME(io)) {
1492 if (!IoFMT_NAME(io))
1493 IoFMT_NAME(io) = savepv(GvNAME(gv));
1494 topname = sv_2mortal(Perl_newSVpvf(aTHX_ "%" HEKf "_TOP",
1495 HEKfARG(GvNAME_HEK(gv))));
1496 topgv = gv_fetchsv(topname, 0, SVt_PVFM);
1497 if ((topgv && GvFORM(topgv)) ||
1498 !gv_fetchpvs("top", GV_NOTQUAL, SVt_PVFM))
1499 IoTOP_NAME(io) = savesvpv(topname);
1501 IoTOP_NAME(io) = savepvs("top");
1503 topgv = gv_fetchpv(IoTOP_NAME(io), 0, SVt_PVFM);
1504 if (!topgv || !GvFORM(topgv)) {
1505 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1508 IoTOP_GV(io) = topgv;
1510 if (IoFLAGS(io) & IOf_DIDTOP) { /* Oh dear. It still doesn't fit. */
1511 I32 lines = IoLINES_LEFT(io);
1512 const char *s = SvPVX_const(PL_formtarget);
1513 if (lines <= 0) /* Yow, header didn't even fit!!! */
1515 while (lines-- > 0) {
1516 s = strchr(s, '\n');
1522 const STRLEN save = SvCUR(PL_formtarget);
1523 SvCUR_set(PL_formtarget, s - SvPVX_const(PL_formtarget));
1524 do_print(PL_formtarget, ofp);
1525 SvCUR_set(PL_formtarget, save);
1526 sv_chop(PL_formtarget, s);
1527 FmLINES(PL_formtarget) -= IoLINES_LEFT(io);
1530 if (IoLINES_LEFT(io) >= 0 && IoPAGE(io) > 0)
1531 do_print(GvSV(gv_fetchpvs("\f", GV_ADD, SVt_PV)), ofp);
1532 IoLINES_LEFT(io) = IoPAGE_LEN(io);
1534 PL_formtarget = PL_toptarget;
1535 IoFLAGS(io) |= IOf_DIDTOP;
1537 assert(fgv); /* IoTOP_GV(io) should have been set above */
1540 SV * const sv = sv_newmortal();
1541 gv_efullname4(sv, fgv, NULL, FALSE);
1542 DIE(aTHX_ "Undefined top format \"%" SVf "\" called", SVfARG(sv));
1544 return doform(cv, gv, PL_op);
1549 assert(CxTYPE(cx) == CXt_FORMAT);
1550 SP = PL_stack_base + cx->blk_oldsp; /* ignore retval of formline */
1554 retop = cx->blk_sub.retop;
1558 /* XXX the semantics of doing 'return' in a format aren't documented.
1559 * Currently we ignore any args to 'return' and just return
1560 * a single undef in both scalar and list contexts
1562 PUSHs(&PL_sv_undef);
1563 else if (!io || !(fp = IoOFP(io))) {
1564 if (io && IoIFP(io))
1565 report_wrongway_fh(gv, '<');
1571 if ((IoLINES_LEFT(io) -= FmLINES(PL_formtarget)) < 0) {
1572 Perl_ck_warner(aTHX_ packWARN(WARN_IO), "page overflow");
1574 if (!do_print(PL_formtarget, fp))
1577 FmLINES(PL_formtarget) = 0;
1578 SvCUR_set(PL_formtarget, 0);
1579 *SvEND(PL_formtarget) = '\0';
1580 if (IoFLAGS(io) & IOf_FLUSH)
1581 (void)PerlIO_flush(fp);
1585 PL_formtarget = PL_bodytarget;
1591 dSP; dMARK; dORIGMARK;
1595 = (PL_op->op_flags & OPf_STACKED) ? MUTABLE_GV(*++MARK) : PL_defoutgv;
1596 IO *const io = GvIO(gv);
1598 /* Treat empty list as "" */
1599 if (MARK == SP) XPUSHs(&PL_sv_no);
1602 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1604 if (MARK == ORIGMARK) {
1607 Move(MARK, MARK + 1, (SP - MARK) + 1, SV*);
1610 return Perl_tied_method(aTHX_ SV_CONST(PRINTF), mark - 1, MUTABLE_SV(io),
1612 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1619 SETERRNO(EBADF,RMS_IFI);
1622 else if (!(fp = IoOFP(io))) {
1624 report_wrongway_fh(gv, '<');
1625 else if (ckWARN(WARN_CLOSED))
1627 SETERRNO(EBADF,IoIFP(io)?RMS_FAC:RMS_IFI);
1631 SV *sv = sv_newmortal();
1632 do_sprintf(sv, SP - MARK, MARK + 1);
1633 if (!do_print(sv, fp))
1636 if (IoFLAGS(io) & IOf_FLUSH)
1637 if (PerlIO_flush(fp) == EOF)
1646 PUSHs(&PL_sv_undef);
1653 const int perm = (MAXARG > 3 && (TOPs || POPs)) ? POPi : 0666;
1654 const int mode = POPi;
1655 SV * const sv = POPs;
1656 GV * const gv = MUTABLE_GV(POPs);
1659 /* Need TIEHANDLE method ? */
1660 const char * const tmps = SvPV_const(sv, len);
1661 if (do_open_raw(gv, tmps, len, mode, perm, NULL)) {
1662 IoLINES(GvIOp(gv)) = 0;
1666 PUSHs(&PL_sv_undef);
1672 /* also used for: pp_read() and pp_recv() (where supported) */
1676 dSP; dMARK; dORIGMARK; dTARGET;
1690 bool charstart = FALSE;
1691 STRLEN charskip = 0;
1693 GV * const gv = MUTABLE_GV(*++MARK);
1696 if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD)
1697 && gv && (io = GvIO(gv)) )
1699 const MAGIC *const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1701 return Perl_tied_method(aTHX_ SV_CONST(READ), mark - 1, MUTABLE_SV(io), mg,
1702 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1712 length = SvIVx(*++MARK);
1714 DIE(aTHX_ "Negative length");
1717 offset = SvIVx(*++MARK);
1721 if (!io || !IoIFP(io)) {
1723 SETERRNO(EBADF,RMS_IFI);
1727 /* Note that fd can here validly be -1, don't check it yet. */
1728 fd = PerlIO_fileno(IoIFP(io));
1730 if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
1731 if (PL_op->op_type == OP_SYSREAD || PL_op->op_type == OP_RECV) {
1732 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1733 "%s() is deprecated on :utf8 handles. "
1734 "This will be a fatal error in Perl 5.30",
1737 buffer = SvPVutf8_force(bufsv, blen);
1738 /* UTF-8 may not have been set if they are all low bytes */
1743 buffer = SvPV_force(bufsv, blen);
1744 buffer_utf8 = !IN_BYTES && SvUTF8(bufsv);
1746 if (DO_UTF8(bufsv)) {
1747 blen = sv_len_utf8_nomg(bufsv);
1756 if (PL_op->op_type == OP_RECV) {
1757 Sock_size_t bufsize;
1758 char namebuf[MAXPATHLEN];
1760 SETERRNO(EBADF,SS_IVCHAN);
1763 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
1764 bufsize = sizeof (struct sockaddr_in);
1766 bufsize = sizeof namebuf;
1768 #ifdef OS2 /* At least Warp3+IAK: only the first byte of bufsize set */
1772 buffer = SvGROW(bufsv, (STRLEN)(length+1));
1773 /* 'offset' means 'flags' here */
1774 count = PerlSock_recvfrom(fd, buffer, length, offset,
1775 (struct sockaddr *)namebuf, &bufsize);
1778 /* MSG_TRUNC can give oversized count; quietly lose it */
1781 SvCUR_set(bufsv, count);
1782 *SvEND(bufsv) = '\0';
1783 (void)SvPOK_only(bufsv);
1787 /* This should not be marked tainted if the fp is marked clean */
1788 if (!(IoFLAGS(io) & IOf_UNTAINT))
1789 SvTAINTED_on(bufsv);
1791 #if defined(__CYGWIN__)
1792 /* recvfrom() on cygwin doesn't set bufsize at all for
1793 connected sockets, leaving us with trash in the returned
1794 name, so use the same test as the Win32 code to check if it
1795 wasn't set, and set it [perl #118843] */
1796 if (bufsize == sizeof namebuf)
1799 sv_setpvn(TARG, namebuf, bufsize);
1805 if (-offset > (SSize_t)blen)
1806 DIE(aTHX_ "Offset outside string");
1809 if (DO_UTF8(bufsv)) {
1810 /* convert offset-as-chars to offset-as-bytes */
1811 if (offset >= (SSize_t)blen)
1812 offset += SvCUR(bufsv) - blen;
1814 offset = utf8_hop((U8 *)buffer,offset) - (U8 *) buffer;
1818 /* Reestablish the fd in case it shifted from underneath us. */
1819 fd = PerlIO_fileno(IoIFP(io));
1821 orig_size = SvCUR(bufsv);
1822 /* Allocating length + offset + 1 isn't perfect in the case of reading
1823 bytes from a byte file handle into a UTF8 buffer, but it won't harm us
1825 (should be 2 * length + offset + 1, or possibly something longer if
1826 IN_ENCODING Is true) */
1827 buffer = SvGROW(bufsv, (STRLEN)(length+offset+1));
1828 if (offset > 0 && offset > (SSize_t)orig_size) { /* Zero any newly allocated space */
1829 Zero(buffer+orig_size, offset-orig_size, char);
1831 buffer = buffer + offset;
1833 read_target = bufsv;
1835 /* Best to read the bytes into a new SV, upgrade that to UTF8, then
1836 concatenate it to the current buffer. */
1838 /* Truncate the existing buffer to the start of where we will be
1840 SvCUR_set(bufsv, offset);
1842 read_target = sv_newmortal();
1843 SvUPGRADE(read_target, SVt_PV);
1844 buffer = SvGROW(read_target, (STRLEN)(length + 1));
1847 if (PL_op->op_type == OP_SYSREAD) {
1848 #ifdef PERL_SOCK_SYSREAD_IS_RECV
1849 if (IoTYPE(io) == IoTYPE_SOCKET) {
1851 SETERRNO(EBADF,SS_IVCHAN);
1855 count = PerlSock_recv(fd, buffer, length, 0);
1861 SETERRNO(EBADF,RMS_IFI);
1865 count = PerlLIO_read(fd, buffer, length);
1870 count = PerlIO_read(IoIFP(io), buffer, length);
1871 /* PerlIO_read() - like fread() returns 0 on both error and EOF */
1872 if (count == 0 && PerlIO_error(IoIFP(io)))
1876 if (IoTYPE(io) == IoTYPE_WRONLY)
1877 report_wrongway_fh(gv, '>');
1880 SvCUR_set(read_target, count+(buffer - SvPVX_const(read_target)));
1881 *SvEND(read_target) = '\0';
1882 (void)SvPOK_only(read_target);
1883 if (fp_utf8 && !IN_BYTES) {
1884 /* Look at utf8 we got back and count the characters */
1885 const char *bend = buffer + count;
1886 while (buffer < bend) {
1888 skip = UTF8SKIP(buffer);
1891 if (buffer - charskip + skip > bend) {
1892 /* partial character - try for rest of it */
1893 length = skip - (bend-buffer);
1894 offset = bend - SvPVX_const(bufsv);
1906 /* If we have not 'got' the number of _characters_ we 'wanted' get some more
1907 provided amount read (count) was what was requested (length)
1909 if (got < wanted && count == length) {
1910 length = wanted - got;
1911 offset = bend - SvPVX_const(bufsv);
1914 /* return value is character count */
1918 else if (buffer_utf8) {
1919 /* Let svcatsv upgrade the bytes we read in to utf8.
1920 The buffer is a mortal so will be freed soon. */
1921 sv_catsv_nomg(bufsv, read_target);
1924 /* This should not be marked tainted if the fp is marked clean */
1925 if (!(IoFLAGS(io) & IOf_UNTAINT))
1926 SvTAINTED_on(bufsv);
1937 /* also used for: pp_send() where defined */
1941 dSP; dMARK; dORIGMARK; dTARGET;
1946 STRLEN orig_blen_bytes;
1947 const int op_type = PL_op->op_type;
1950 GV *const gv = MUTABLE_GV(*++MARK);
1951 IO *const io = GvIO(gv);
1954 if (op_type == OP_SYSWRITE && io) {
1955 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
1957 if (MARK == SP - 1) {
1959 mXPUSHi(sv_len(sv));
1963 return Perl_tied_method(aTHX_ SV_CONST(WRITE), mark - 1, MUTABLE_SV(io), mg,
1964 G_SCALAR | TIED_METHOD_ARGUMENTS_ON_STACK,
1974 if (!io || !IoIFP(io) || IoTYPE(io) == IoTYPE_RDONLY) {
1976 if (io && IoIFP(io))
1977 report_wrongway_fh(gv, '<');
1980 SETERRNO(EBADF,RMS_IFI);
1983 fd = PerlIO_fileno(IoIFP(io));
1985 SETERRNO(EBADF,SS_IVCHAN);
1990 /* Do this first to trigger any overloading. */
1991 buffer = SvPV_const(bufsv, blen);
1992 orig_blen_bytes = blen;
1993 doing_utf8 = DO_UTF8(bufsv);
1995 if (PerlIO_isutf8(IoIFP(io))) {
1996 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
1997 "%s() is deprecated on :utf8 handles. "
1998 "This will be a fatal error in Perl 5.30",
2000 if (!SvUTF8(bufsv)) {
2001 /* We don't modify the original scalar. */
2002 tmpbuf = bytes_to_utf8((const U8*) buffer, &blen);
2003 buffer = (char *) tmpbuf;
2007 else if (doing_utf8) {
2008 STRLEN tmplen = blen;
2009 U8 * const result = bytes_from_utf8((const U8*) buffer, &tmplen, &doing_utf8);
2012 buffer = (char *) tmpbuf;
2016 assert((char *)result == buffer);
2017 Perl_croak(aTHX_ "Wide character in %s", OP_DESC(PL_op));
2022 if (op_type == OP_SEND) {
2023 const int flags = SvIVx(*++MARK);
2026 char * const sockbuf = SvPVx(*++MARK, mlen);
2027 retval = PerlSock_sendto(fd, buffer, blen,
2028 flags, (struct sockaddr *)sockbuf, mlen);
2031 retval = PerlSock_send(fd, buffer, blen, flags);
2037 Size_t length = 0; /* This length is in characters. */
2043 /* The SV is bytes, and we've had to upgrade it. */
2044 blen_chars = orig_blen_bytes;
2046 /* The SV really is UTF-8. */
2047 /* Don't call sv_len_utf8 on a magical or overloaded
2048 scalar, as we might get back a different result. */
2049 blen_chars = sv_or_pv_len_utf8(bufsv, buffer, blen);
2056 length = blen_chars;
2058 #if Size_t_size > IVSIZE
2059 length = (Size_t)SvNVx(*++MARK);
2061 length = (Size_t)SvIVx(*++MARK);
2063 if ((SSize_t)length < 0) {
2065 DIE(aTHX_ "Negative length");
2070 offset = SvIVx(*++MARK);
2072 if (-offset > (IV)blen_chars) {
2074 DIE(aTHX_ "Offset outside string");
2076 offset += blen_chars;
2077 } else if (offset > (IV)blen_chars) {
2079 DIE(aTHX_ "Offset outside string");
2083 if (length > blen_chars - offset)
2084 length = blen_chars - offset;
2086 /* Here we convert length from characters to bytes. */
2087 if (tmpbuf || SvGMAGICAL(bufsv) || SvAMAGIC(bufsv)) {
2088 /* Either we had to convert the SV, or the SV is magical, or
2089 the SV has overloading, in which case we can't or mustn't
2090 or mustn't call it again. */
2092 buffer = (const char*)utf8_hop((const U8 *)buffer, offset);
2093 length = utf8_hop((U8 *)buffer, length) - (U8 *)buffer;
2095 /* It's a real UTF-8 SV, and it's not going to change under
2096 us. Take advantage of any cache. */
2098 I32 len_I32 = length;
2100 /* Convert the start and end character positions to bytes.
2101 Remember that the second argument to sv_pos_u2b is relative
2103 sv_pos_u2b(bufsv, &start, &len_I32);
2110 buffer = buffer+offset;
2112 #ifdef PERL_SOCK_SYSWRITE_IS_SEND
2113 if (IoTYPE(io) == IoTYPE_SOCKET) {
2114 retval = PerlSock_send(fd, buffer, length, 0);
2119 /* See the note at doio.c:do_print about filesize limits. --jhi */
2120 retval = PerlLIO_write(fd, buffer, length);
2128 retval = utf8_length((U8*)buffer, (U8*)buffer + retval);
2131 #if Size_t_size > IVSIZE
2151 * in Perl 5.12 and later, the additional parameter is a bitmask:
2154 * 2 = eof() <- ARGV magic
2156 * I'll rely on the compiler's trace flow analysis to decide whether to
2157 * actually assign this out here, or punt it into the only block where it is
2158 * used. Doing it out here is DRY on the condition logic.
2163 gv = PL_last_in_gv = MUTABLE_GV(POPs); /* eof(FH) */
2169 if (PL_op->op_flags & OPf_SPECIAL) {
2170 gv = PL_last_in_gv = GvEGVx(PL_argvgv); /* eof() - ARGV magic */
2174 gv = PL_last_in_gv; /* eof */
2182 if ((io = GvIO(gv)) && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) {
2183 return tied_method1(SV_CONST(EOF), SP, MUTABLE_SV(io), mg, newSVuv(which));
2186 if (!MAXARG && (PL_op->op_flags & OPf_SPECIAL)) { /* eof() */
2187 if (io && !IoIFP(io)) {
2188 if ((IoFLAGS(io) & IOf_START) && av_tindex(GvAVn(gv)) < 0) {
2191 IoFLAGS(io) &= ~IOf_START;
2192 do_open6(gv, "-", 1, NULL, NULL, 0);
2200 *svp = newSVpvs("-");
2202 else if (!nextargv(gv, FALSE))
2207 PUSHs(boolSV(do_eof(gv)));
2217 if (MAXARG != 0 && (TOPs || POPs))
2218 PL_last_in_gv = MUTABLE_GV(POPs);
2225 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2227 return tied_method0(SV_CONST(TELL), SP, MUTABLE_SV(io), mg);
2232 SETERRNO(EBADF,RMS_IFI);
2237 #if LSEEKSIZE > IVSIZE
2238 PUSHn( do_tell(gv) );
2240 PUSHi( do_tell(gv) );
2246 /* also used for: pp_seek() */
2251 const int whence = POPi;
2252 #if LSEEKSIZE > IVSIZE
2253 const Off_t offset = (Off_t)SvNVx(POPs);
2255 const Off_t offset = (Off_t)SvIVx(POPs);
2258 GV * const gv = PL_last_in_gv = MUTABLE_GV(POPs);
2259 IO *const io = GvIO(gv);
2262 const MAGIC * const mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar);
2264 #if LSEEKSIZE > IVSIZE
2265 SV *const offset_sv = newSVnv((NV) offset);
2267 SV *const offset_sv = newSViv(offset);
2270 return tied_method2(SV_CONST(SEEK), SP, MUTABLE_SV(io), mg, offset_sv,
2275 if (PL_op->op_type == OP_SEEK)
2276 PUSHs(boolSV(do_seek(gv, offset, whence)));
2278 const Off_t sought = do_sysseek(gv, offset, whence);
2280 PUSHs(&PL_sv_undef);
2282 SV* const sv = sought ?
2283 #if LSEEKSIZE > IVSIZE
2288 : newSVpvn(zero_but_true, ZBTLEN);
2298 /* There seems to be no consensus on the length type of truncate()
2299 * and ftruncate(), both off_t and size_t have supporters. In
2300 * general one would think that when using large files, off_t is
2301 * at least as wide as size_t, so using an off_t should be okay. */
2302 /* XXX Configure probe for the length type of *truncate() needed XXX */
2305 #if Off_t_size > IVSIZE
2310 /* Checking for length < 0 is problematic as the type might or
2311 * might not be signed: if it is not, clever compilers will moan. */
2312 /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
2315 SV * const sv = POPs;
2320 if (PL_op->op_flags & OPf_SPECIAL
2321 ? (tmpgv = gv_fetchsv(sv, 0, SVt_PVIO), 1)
2322 : !!(tmpgv = MAYBE_DEREF_GV(sv)) ) {
2329 TAINT_PROPER("truncate");
2330 if (!(fp = IoIFP(io))) {
2334 int fd = PerlIO_fileno(fp);
2336 SETERRNO(EBADF,RMS_IFI);
2340 SETERRNO(EINVAL, LIB_INVARG);
2345 if (ftruncate(fd, len) < 0)
2347 if (my_chsize(fd, len) < 0)
2355 else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2356 io = MUTABLE_IO(SvRV(sv)); /* *main::FRED{IO} for example */
2357 goto do_ftruncate_io;
2360 const char * const name = SvPV_nomg_const_nolen(sv);
2361 TAINT_PROPER("truncate");
2363 if (truncate(name, len) < 0)
2370 #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE)
2371 mode |= O_LARGEFILE; /* Transparently largefiley. */
2374 /* On open(), the Win32 CRT tries to seek around text
2375 * files using 32-bit offsets, which causes the open()
2376 * to fail on large files, so open in binary mode.
2380 tmpfd = PerlLIO_open(name, mode);
2385 if (my_chsize(tmpfd, len) < 0)
2387 PerlLIO_close(tmpfd);
2396 SETERRNO(EBADF,RMS_IFI);
2402 /* also used for: pp_fcntl() */
2407 SV * const argsv = POPs;
2408 const unsigned int func = POPu;
2410 GV * const gv = MUTABLE_GV(POPs);
2411 IO * const io = GvIOn(gv);
2417 SETERRNO(EBADF,RMS_IFI); /* well, sort of... */
2421 if (SvPOK(argsv) || !SvNIOK(argsv)) {
2424 s = SvPV_force(argsv, len);
2425 need = IOCPARM_LEN(func);
2427 s = Sv_Grow(argsv, need + 1);
2428 SvCUR_set(argsv, need);
2431 s[SvCUR(argsv)] = 17; /* a little sanity check here */
2434 retval = SvIV(argsv);
2435 s = INT2PTR(char*,retval); /* ouch */
2438 optype = PL_op->op_type;
2439 TAINT_PROPER(PL_op_desc[optype]);
2441 if (optype == OP_IOCTL)
2443 retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
2445 DIE(aTHX_ "ioctl is not implemented");
2449 DIE(aTHX_ "fcntl is not implemented");
2451 #if defined(OS2) && defined(__EMX__)
2452 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
2454 retval = fcntl(PerlIO_fileno(IoIFP(io)), func, s);
2458 #if defined(HAS_IOCTL) || defined(HAS_FCNTL)
2460 if (s[SvCUR(argsv)] != 17)
2461 DIE(aTHX_ "Possible memory corruption: %s overflowed 3rd argument",
2463 s[SvCUR(argsv)] = 0; /* put our null back */
2464 SvSETMAGIC(argsv); /* Assume it has changed */
2473 PUSHp(zero_but_true, ZBTLEN);
2484 const int argtype = POPi;
2485 GV * const gv = MUTABLE_GV(POPs);
2486 IO *const io = GvIO(gv);
2487 PerlIO *const fp = io ? IoIFP(io) : NULL;
2489 /* XXX Looks to me like io is always NULL at this point */
2491 (void)PerlIO_flush(fp);
2492 value = (I32)(PerlLIO_flock(PerlIO_fileno(fp), argtype) >= 0);
2497 SETERRNO(EBADF,RMS_IFI);
2502 DIE(aTHX_ PL_no_func, "flock");
2513 const int protocol = POPi;
2514 const int type = POPi;
2515 const int domain = POPi;
2516 GV * const gv = MUTABLE_GV(POPs);
2517 IO * const io = GvIOn(gv);
2521 do_close(gv, FALSE);
2523 TAINT_PROPER("socket");
2524 fd = PerlSock_socket(domain, type, protocol);
2528 IoIFP(io) = PerlIO_fdopen(fd, "r" SOCKET_OPEN_MODE); /* stdio gets confused about sockets */
2529 IoOFP(io) = PerlIO_fdopen(fd, "w" SOCKET_OPEN_MODE);
2530 IoTYPE(io) = IoTYPE_SOCKET;
2531 if (!IoIFP(io) || !IoOFP(io)) {
2532 if (IoIFP(io)) PerlIO_close(IoIFP(io));
2533 if (IoOFP(io)) PerlIO_close(IoOFP(io));
2534 if (!IoIFP(io) && !IoOFP(io)) PerlLIO_close(fd);
2537 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2538 /* ensure close-on-exec */
2539 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2549 #if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
2552 const int protocol = POPi;
2553 const int type = POPi;
2554 const int domain = POPi;
2556 GV * const gv2 = MUTABLE_GV(POPs);
2557 IO * const io2 = GvIOn(gv2);
2558 GV * const gv1 = MUTABLE_GV(POPs);
2559 IO * const io1 = GvIOn(gv1);
2562 do_close(gv1, FALSE);
2564 do_close(gv2, FALSE);
2566 TAINT_PROPER("socketpair");
2567 if (PerlSock_socketpair(domain, type, protocol, fd) < 0)
2569 IoIFP(io1) = PerlIO_fdopen(fd[0], "r" SOCKET_OPEN_MODE);
2570 IoOFP(io1) = PerlIO_fdopen(fd[0], "w" SOCKET_OPEN_MODE);
2571 IoTYPE(io1) = IoTYPE_SOCKET;
2572 IoIFP(io2) = PerlIO_fdopen(fd[1], "r" SOCKET_OPEN_MODE);
2573 IoOFP(io2) = PerlIO_fdopen(fd[1], "w" SOCKET_OPEN_MODE);
2574 IoTYPE(io2) = IoTYPE_SOCKET;
2575 if (!IoIFP(io1) || !IoOFP(io1) || !IoIFP(io2) || !IoOFP(io2)) {
2576 if (IoIFP(io1)) PerlIO_close(IoIFP(io1));
2577 if (IoOFP(io1)) PerlIO_close(IoOFP(io1));
2578 if (!IoIFP(io1) && !IoOFP(io1)) PerlLIO_close(fd[0]);
2579 if (IoIFP(io2)) PerlIO_close(IoIFP(io2));
2580 if (IoOFP(io2)) PerlIO_close(IoOFP(io2));
2581 if (!IoIFP(io2) && !IoOFP(io2)) PerlLIO_close(fd[1]);
2584 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2585 /* ensure close-on-exec */
2586 if ((fd[0] > PL_maxsysfd && fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) ||
2587 (fd[1] > PL_maxsysfd && fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0))
2593 DIE(aTHX_ PL_no_sock_func, "socketpair");
2599 /* also used for: pp_connect() */
2604 SV * const addrsv = POPs;
2605 /* OK, so on what platform does bind modify addr? */
2607 GV * const gv = MUTABLE_GV(POPs);
2608 IO * const io = GvIOn(gv);
2615 fd = PerlIO_fileno(IoIFP(io));
2619 addr = SvPV_const(addrsv, len);
2620 op_type = PL_op->op_type;
2621 TAINT_PROPER(PL_op_desc[op_type]);
2622 if ((op_type == OP_BIND
2623 ? PerlSock_bind(fd, (struct sockaddr *)addr, len)
2624 : PerlSock_connect(fd, (struct sockaddr *)addr, len))
2632 SETERRNO(EBADF,SS_IVCHAN);
2639 const int backlog = POPi;
2640 GV * const gv = MUTABLE_GV(POPs);
2641 IO * const io = GvIOn(gv);
2646 if (PerlSock_listen(PerlIO_fileno(IoIFP(io)), backlog) >= 0)
2653 SETERRNO(EBADF,SS_IVCHAN);
2661 char namebuf[MAXPATHLEN];
2662 #if (defined(VMS_DO_SOCKETS) && defined(DECCRTL_SOCKETS)) || defined(__QNXNTO__)
2663 Sock_size_t len = sizeof (struct sockaddr_in);
2665 Sock_size_t len = sizeof namebuf;
2667 GV * const ggv = MUTABLE_GV(POPs);
2668 GV * const ngv = MUTABLE_GV(POPs);
2671 IO * const gstio = GvIO(ggv);
2672 if (!gstio || !IoIFP(gstio))
2676 fd = PerlSock_accept(PerlIO_fileno(IoIFP(gstio)), (struct sockaddr *) namebuf, &len);
2679 /* Some platforms indicate zero length when an AF_UNIX client is
2680 * not bound. Simulate a non-zero-length sockaddr structure in
2682 namebuf[0] = 0; /* sun_len */
2683 namebuf[1] = AF_UNIX; /* sun_family */
2691 do_close(ngv, FALSE);
2692 IoIFP(nstio) = PerlIO_fdopen(fd, "r" SOCKET_OPEN_MODE);
2693 IoOFP(nstio) = PerlIO_fdopen(fd, "w" SOCKET_OPEN_MODE);
2694 IoTYPE(nstio) = IoTYPE_SOCKET;
2695 if (!IoIFP(nstio) || !IoOFP(nstio)) {
2696 if (IoIFP(nstio)) PerlIO_close(IoIFP(nstio));
2697 if (IoOFP(nstio)) PerlIO_close(IoOFP(nstio));
2698 if (!IoIFP(nstio) && !IoOFP(nstio)) PerlLIO_close(fd);
2701 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2702 /* ensure close-on-exec */
2703 if (fd > PL_maxsysfd && fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
2707 #ifdef __SCO_VERSION__
2708 len = sizeof (struct sockaddr_in); /* OpenUNIX 8 somehow truncates info */
2711 PUSHp(namebuf, len);
2715 report_evil_fh(ggv);
2716 SETERRNO(EBADF,SS_IVCHAN);
2726 const int how = POPi;
2727 GV * const gv = MUTABLE_GV(POPs);
2728 IO * const io = GvIOn(gv);
2733 PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
2738 SETERRNO(EBADF,SS_IVCHAN);
2743 /* also used for: pp_gsockopt() */
2748 const int optype = PL_op->op_type;
2749 SV * const sv = (optype == OP_GSOCKOPT) ? sv_2mortal(newSV(257)) : POPs;
2750 const unsigned int optname = (unsigned int) POPi;
2751 const unsigned int lvl = (unsigned int) POPi;
2752 GV * const gv = MUTABLE_GV(POPs);
2753 IO * const io = GvIOn(gv);
2760 fd = PerlIO_fileno(IoIFP(io));
2766 (void)SvPOK_only(sv);
2770 if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
2773 /* XXX Configure test: does getsockopt set the length properly? */
2782 #if defined(__SYMBIAN32__)
2783 # define SETSOCKOPT_OPTION_VALUE_T void *
2785 # define SETSOCKOPT_OPTION_VALUE_T const char *
2787 /* XXX TODO: We need to have a proper type (a Configure probe,
2788 * etc.) for what the C headers think of the third argument of
2789 * setsockopt(), the option_value read-only buffer: is it
2790 * a "char *", or a "void *", const or not. Some compilers
2791 * don't take kindly to e.g. assuming that "char *" implicitly
2792 * promotes to a "void *", or to explicitly promoting/demoting
2793 * consts to non/vice versa. The "const void *" is the SUS
2794 * definition, but that does not fly everywhere for the above
2796 SETSOCKOPT_OPTION_VALUE_T buf;
2800 buf = (SETSOCKOPT_OPTION_VALUE_T) SvPV_const(sv, l);
2804 aint = (int)SvIV(sv);
2805 buf = (SETSOCKOPT_OPTION_VALUE_T) &aint;
2808 if (PerlSock_setsockopt(fd, lvl, optname, buf, len) < 0)
2818 SETERRNO(EBADF,SS_IVCHAN);
2825 /* also used for: pp_getsockname() */
2830 const int optype = PL_op->op_type;
2831 GV * const gv = MUTABLE_GV(POPs);
2832 IO * const io = GvIOn(gv);
2840 sv = sv_2mortal(newSV(257));
2841 (void)SvPOK_only(sv);
2845 fd = PerlIO_fileno(IoIFP(io));
2849 case OP_GETSOCKNAME:
2850 if (PerlSock_getsockname(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2853 case OP_GETPEERNAME:
2854 if (PerlSock_getpeername(fd, (struct sockaddr *)SvPVX(sv), &len) < 0)
2856 #if defined(VMS_DO_SOCKETS) && defined (DECCRTL_SOCKETS)
2858 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";
2859 /* If the call succeeded, make sure we don't have a zeroed port/addr */
2860 if (((struct sockaddr *)SvPVX_const(sv))->sa_family == AF_INET &&
2861 !memcmp(SvPVX_const(sv) + sizeof(u_short), nowhere,
2862 sizeof(u_short) + sizeof(struct in_addr))) {
2869 #ifdef BOGUS_GETNAME_RETURN
2870 /* Interactive Unix, getpeername() and getsockname()
2871 does not return valid namelen */
2872 if (len == BOGUS_GETNAME_RETURN)
2873 len = sizeof(struct sockaddr);
2882 SETERRNO(EBADF,SS_IVCHAN);
2891 /* also used for: pp_lstat() */
2902 if (PL_op->op_flags & OPf_REF ? (gv = cGVOP_gv, 1)
2903 : !!(sv=POPs, gv = MAYBE_DEREF_GV(sv))) {
2904 if (PL_op->op_type == OP_LSTAT) {
2905 if (gv != PL_defgv) {
2906 do_fstat_warning_check:
2907 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
2908 "lstat() on filehandle%s%" SVf,
2911 ? sv_2mortal(newSVhek(GvENAME_HEK(gv)))
2913 } else if (PL_laststype != OP_LSTAT)
2914 /* diag_listed_as: The stat preceding %s wasn't an lstat */
2915 Perl_croak(aTHX_ "The stat preceding lstat() wasn't an lstat");
2918 if (gv != PL_defgv) {
2922 PL_laststype = OP_STAT;
2923 PL_statgv = gv ? gv : (GV *)io;
2924 SvPVCLEAR(PL_statname);
2930 int fd = PerlIO_fileno(IoIFP(io));
2932 PL_laststatval = -1;
2933 SETERRNO(EBADF,RMS_IFI);
2935 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
2938 } else if (IoDIRP(io)) {
2940 PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache);
2943 PL_laststatval = -1;
2946 else PL_laststatval = -1;
2947 if (PL_laststatval < 0 && !havefp) report_evil_fh(gv);
2950 if (PL_laststatval < 0) {
2956 if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
2957 io = MUTABLE_IO(SvRV(sv));
2958 if (PL_op->op_type == OP_LSTAT)
2959 goto do_fstat_warning_check;
2960 goto do_fstat_have_io;
2963 SvTAINTED_off(PL_statname); /* previous tainting irrelevant */
2964 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
2966 PL_laststype = PL_op->op_type;
2967 file = SvPV_nolen_const(PL_statname);
2968 if (PL_op->op_type == OP_LSTAT)
2969 PL_laststatval = PerlLIO_lstat(file, &PL_statcache);
2971 PL_laststatval = PerlLIO_stat(file, &PL_statcache);
2972 if (PL_laststatval < 0) {
2973 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
2974 /* PL_warn_nl is constant */
2975 GCC_DIAG_IGNORE(-Wformat-nonliteral);
2976 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
2984 if (gimme != G_ARRAY) {
2985 if (gimme != G_VOID)
2986 XPUSHs(boolSV(max));
2992 mPUSHi(PL_statcache.st_dev);
2993 #if ST_INO_SIZE > IVSIZE
2994 mPUSHn(PL_statcache.st_ino);
2996 # if ST_INO_SIGN <= 0
2997 mPUSHi(PL_statcache.st_ino);
2999 mPUSHu(PL_statcache.st_ino);
3002 mPUSHu(PL_statcache.st_mode);
3003 mPUSHu(PL_statcache.st_nlink);
3005 sv_setuid(PUSHmortal, PL_statcache.st_uid);
3006 sv_setgid(PUSHmortal, PL_statcache.st_gid);
3008 #ifdef USE_STAT_RDEV
3009 mPUSHi(PL_statcache.st_rdev);
3011 PUSHs(newSVpvs_flags("", SVs_TEMP));
3013 #if Off_t_size > IVSIZE
3014 mPUSHn(PL_statcache.st_size);
3016 mPUSHi(PL_statcache.st_size);
3019 mPUSHn(PL_statcache.st_atime);
3020 mPUSHn(PL_statcache.st_mtime);
3021 mPUSHn(PL_statcache.st_ctime);
3023 mPUSHi(PL_statcache.st_atime);
3024 mPUSHi(PL_statcache.st_mtime);
3025 mPUSHi(PL_statcache.st_ctime);
3027 #ifdef USE_STAT_BLOCKS
3028 mPUSHu(PL_statcache.st_blksize);
3029 mPUSHu(PL_statcache.st_blocks);
3031 PUSHs(newSVpvs_flags("", SVs_TEMP));
3032 PUSHs(newSVpvs_flags("", SVs_TEMP));
3038 /* All filetest ops avoid manipulating the perl stack pointer in their main
3039 bodies (since commit d2c4d2d1e22d3125), and return using either
3040 S_ft_return_false() or S_ft_return_true(). These two helper functions are
3041 the only two which manipulate the perl stack. To ensure that no stack
3042 manipulation macros are used, the filetest ops avoid defining a local copy
3043 of the stack pointer with dSP. */
3045 /* If the next filetest is stacked up with this one
3046 (PL_op->op_private & OPpFT_STACKING), we leave
3047 the original argument on the stack for success,
3048 and skip the stacked operators on failure.
3049 The next few macros/functions take care of this.
3053 S_ft_return_false(pTHX_ SV *ret) {
3057 if (PL_op->op_flags & OPf_REF) XPUSHs(ret);
3061 if (PL_op->op_private & OPpFT_STACKING) {
3062 while (OP_IS_FILETEST(next->op_type)
3063 && next->op_private & OPpFT_STACKED)
3064 next = next->op_next;
3069 PERL_STATIC_INLINE OP *
3070 S_ft_return_true(pTHX_ SV *ret) {
3072 if (PL_op->op_flags & OPf_REF)
3073 XPUSHs(PL_op->op_private & OPpFT_STACKING ? (SV *)cGVOP_gv : (ret));
3074 else if (!(PL_op->op_private & OPpFT_STACKING))
3080 #define FT_RETURNNO return S_ft_return_false(aTHX_ &PL_sv_no)
3081 #define FT_RETURNUNDEF return S_ft_return_false(aTHX_ &PL_sv_undef)
3082 #define FT_RETURNYES return S_ft_return_true(aTHX_ &PL_sv_yes)
3084 #define tryAMAGICftest_MG(chr) STMT_START { \
3085 if ( (SvFLAGS(*PL_stack_sp) & (SVf_ROK|SVs_GMG)) \
3086 && PL_op->op_flags & OPf_KIDS) { \
3087 OP *next = S_try_amagic_ftest(aTHX_ chr); \
3088 if (next) return next; \
3093 S_try_amagic_ftest(pTHX_ char chr) {
3094 SV *const arg = *PL_stack_sp;
3097 if (!(PL_op->op_private & OPpFT_STACKING)) SvGETMAGIC(arg);
3101 const char tmpchr = chr;
3102 SV * const tmpsv = amagic_call(arg,
3103 newSVpvn_flags(&tmpchr, 1, SVs_TEMP),
3104 ftest_amg, AMGf_unary);
3109 return SvTRUE(tmpsv)
3110 ? S_ft_return_true(aTHX_ tmpsv) : S_ft_return_false(aTHX_ tmpsv);
3116 /* also used for: pp_fteexec() pp_fteread() pp_ftewrite() pp_ftrexec()
3122 /* Not const, because things tweak this below. Not bool, because there's
3123 no guarantee that OPpFT_ACCESS is <= CHAR_MAX */
3124 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3125 I32 use_access = PL_op->op_private & OPpFT_ACCESS;
3126 /* Giving some sort of initial value silences compilers. */
3128 int access_mode = R_OK;
3130 int access_mode = 0;
3133 /* access_mode is never used, but leaving use_access in makes the
3134 conditional compiling below much clearer. */
3137 Mode_t stat_mode = S_IRUSR;
3139 bool effective = FALSE;
3142 switch (PL_op->op_type) {
3143 case OP_FTRREAD: opchar = 'R'; break;
3144 case OP_FTRWRITE: opchar = 'W'; break;
3145 case OP_FTREXEC: opchar = 'X'; break;
3146 case OP_FTEREAD: opchar = 'r'; break;
3147 case OP_FTEWRITE: opchar = 'w'; break;
3148 case OP_FTEEXEC: opchar = 'x'; break;
3150 tryAMAGICftest_MG(opchar);
3152 switch (PL_op->op_type) {
3154 #if !(defined(HAS_ACCESS) && defined(R_OK))
3160 #if defined(HAS_ACCESS) && defined(W_OK)
3165 stat_mode = S_IWUSR;
3169 #if defined(HAS_ACCESS) && defined(X_OK)
3174 stat_mode = S_IXUSR;
3178 #ifdef PERL_EFF_ACCESS
3181 stat_mode = S_IWUSR;
3185 #ifndef PERL_EFF_ACCESS
3192 #ifdef PERL_EFF_ACCESS
3197 stat_mode = S_IXUSR;
3203 #if defined(HAS_ACCESS) || defined (PERL_EFF_ACCESS)
3204 const char *name = SvPV_nolen(*PL_stack_sp);
3206 # ifdef PERL_EFF_ACCESS
3207 result = PERL_EFF_ACCESS(name, access_mode);
3209 DIE(aTHX_ "panic: attempt to call PERL_EFF_ACCESS in %s",
3215 result = access(name, access_mode);
3217 DIE(aTHX_ "panic: attempt to call access() in %s", OP_NAME(PL_op));
3228 result = my_stat_flags(0);
3231 if (cando(stat_mode, effective, &PL_statcache))
3237 /* also used for: pp_ftatime() pp_ftctime() pp_ftmtime() pp_ftsize() */
3242 const int op_type = PL_op->op_type;
3246 case OP_FTIS: opchar = 'e'; break;
3247 case OP_FTSIZE: opchar = 's'; break;
3248 case OP_FTMTIME: opchar = 'M'; break;
3249 case OP_FTCTIME: opchar = 'C'; break;
3250 case OP_FTATIME: opchar = 'A'; break;
3252 tryAMAGICftest_MG(opchar);
3254 result = my_stat_flags(0);
3257 if (op_type == OP_FTIS)
3260 /* You can't dTARGET inside OP_FTIS, because you'll get
3261 "panic: pad_sv po" - the op is not flagged to have a target. */
3265 #if Off_t_size > IVSIZE
3266 sv_setnv(TARG, (NV)PL_statcache.st_size);
3268 sv_setiv(TARG, (IV)PL_statcache.st_size);
3273 ((NV)PL_basetime - PL_statcache.st_mtime) / 86400.0 );
3277 ((NV)PL_basetime - PL_statcache.st_atime) / 86400.0 );
3281 ((NV)PL_basetime - PL_statcache.st_ctime) / 86400.0 );
3285 return SvTRUE_nomg(TARG)
3286 ? S_ft_return_true(aTHX_ TARG) : S_ft_return_false(aTHX_ TARG);
3291 /* also used for: pp_ftblk() pp_ftchr() pp_ftdir() pp_fteowned()
3292 * pp_ftfile() pp_ftpipe() pp_ftsgid() pp_ftsock()
3293 * pp_ftsuid() pp_ftsvtx() pp_ftzero() */
3300 switch (PL_op->op_type) {
3301 case OP_FTROWNED: opchar = 'O'; break;
3302 case OP_FTEOWNED: opchar = 'o'; break;
3303 case OP_FTZERO: opchar = 'z'; break;
3304 case OP_FTSOCK: opchar = 'S'; break;
3305 case OP_FTCHR: opchar = 'c'; break;
3306 case OP_FTBLK: opchar = 'b'; break;
3307 case OP_FTFILE: opchar = 'f'; break;
3308 case OP_FTDIR: opchar = 'd'; break;
3309 case OP_FTPIPE: opchar = 'p'; break;
3310 case OP_FTSUID: opchar = 'u'; break;
3311 case OP_FTSGID: opchar = 'g'; break;
3312 case OP_FTSVTX: opchar = 'k'; break;
3314 tryAMAGICftest_MG(opchar);
3316 /* I believe that all these three are likely to be defined on most every
3317 system these days. */
3319 if(PL_op->op_type == OP_FTSUID) {
3324 if(PL_op->op_type == OP_FTSGID) {
3329 if(PL_op->op_type == OP_FTSVTX) {
3334 result = my_stat_flags(0);
3337 switch (PL_op->op_type) {
3339 if (PL_statcache.st_uid == PerlProc_getuid())
3343 if (PL_statcache.st_uid == PerlProc_geteuid())
3347 if (PL_statcache.st_size == 0)
3351 if (S_ISSOCK(PL_statcache.st_mode))
3355 if (S_ISCHR(PL_statcache.st_mode))
3359 if (S_ISBLK(PL_statcache.st_mode))
3363 if (S_ISREG(PL_statcache.st_mode))
3367 if (S_ISDIR(PL_statcache.st_mode))
3371 if (S_ISFIFO(PL_statcache.st_mode))
3376 if (PL_statcache.st_mode & S_ISUID)
3382 if (PL_statcache.st_mode & S_ISGID)
3388 if (PL_statcache.st_mode & S_ISVTX)
3400 tryAMAGICftest_MG('l');
3401 result = my_lstat_flags(0);
3405 if (S_ISLNK(PL_statcache.st_mode))
3418 tryAMAGICftest_MG('t');
3420 if (PL_op->op_flags & OPf_REF)
3423 SV *tmpsv = *PL_stack_sp;
3424 if (!(gv = MAYBE_DEREF_GV_nomg(tmpsv))) {
3425 name = SvPV_nomg(tmpsv, namelen);
3426 gv = gv_fetchpvn_flags(name, namelen, SvUTF8(tmpsv), SVt_PVIO);
3430 if (GvIO(gv) && IoIFP(GvIOp(gv)))
3431 fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
3432 else if (name && isDIGIT(*name) && grok_atoUV(name, &uv, NULL) && uv <= PERL_INT_MAX)
3437 SETERRNO(EBADF,RMS_IFI);
3440 if (PerlLIO_isatty(fd))
3446 /* also used for: pp_ftbinary() */
3460 tryAMAGICftest_MG(PL_op->op_type == OP_FTTEXT ? 'T' : 'B');
3462 if (PL_op->op_flags & OPf_REF)
3464 else if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
3469 gv = MAYBE_DEREF_GV_nomg(sv);
3473 if (gv == PL_defgv) {
3475 io = SvTYPE(PL_statgv) == SVt_PVIO
3479 goto really_filename;
3484 SvPVCLEAR(PL_statname);
3485 io = GvIO(PL_statgv);
3487 PL_laststatval = -1;
3488 PL_laststype = OP_STAT;
3489 if (io && IoIFP(io)) {
3491 if (! PerlIO_has_base(IoIFP(io)))
3492 DIE(aTHX_ "-T and -B not implemented on filehandles");
3493 fd = PerlIO_fileno(IoIFP(io));
3495 SETERRNO(EBADF,RMS_IFI);
3498 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3499 if (PL_laststatval < 0)
3501 if (S_ISDIR(PL_statcache.st_mode)) { /* handle NFS glitch */
3502 if (PL_op->op_type == OP_FTTEXT)
3507 if (PerlIO_get_cnt(IoIFP(io)) <= 0) {
3508 i = PerlIO_getc(IoIFP(io));
3510 (void)PerlIO_ungetc(IoIFP(io),i);
3512 /* null file is anything */
3515 len = PerlIO_get_bufsiz(IoIFP(io));
3516 s = (STDCHAR *) PerlIO_get_base(IoIFP(io));
3517 /* sfio can have large buffers - limit to 512 */
3522 SETERRNO(EBADF,RMS_IFI);
3524 SETERRNO(EBADF,RMS_IFI);
3533 sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
3535 file = SvPVX_const(PL_statname);
3537 if (!(fp = PerlIO_open(file, "r"))) {
3539 PL_laststatval = -1;
3540 PL_laststype = OP_STAT;
3542 if (ckWARN(WARN_NEWLINE) && should_warn_nl(file)) {
3543 /* PL_warn_nl is constant */
3544 GCC_DIAG_IGNORE(-Wformat-nonliteral);
3545 Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "open");
3550 PL_laststype = OP_STAT;
3551 fd = PerlIO_fileno(fp);
3553 (void)PerlIO_close(fp);
3554 SETERRNO(EBADF,RMS_IFI);
3557 PL_laststatval = PerlLIO_fstat(fd, &PL_statcache);
3558 if (PL_laststatval < 0) {
3560 (void)PerlIO_close(fp);
3564 PerlIO_binmode(aTHX_ fp, '<', O_BINARY, NULL);
3565 len = PerlIO_read(fp, tbuf, sizeof(tbuf));
3566 (void)PerlIO_close(fp);
3568 if (S_ISDIR(PL_statcache.st_mode) && PL_op->op_type == OP_FTTEXT)
3569 FT_RETURNNO; /* special case NFS directories */
3570 FT_RETURNYES; /* null file is anything */
3575 /* now scan s to look for textiness */
3577 #if defined(DOSISH) || defined(USEMYBINMODE)
3578 /* ignore trailing ^Z on short files */
3579 if (len && len < (I32)sizeof(tbuf) && tbuf[len-1] == 26)
3584 if (! is_utf8_invariant_string((U8 *) s, len)) {
3586 /* Here contains a variant under UTF-8 . See if the entire string is
3588 if (is_utf8_fixed_width_buf_flags((U8 *) s, len, 0)) {
3589 if (PL_op->op_type == OP_FTTEXT) {
3598 /* Here, is not UTF-8 or is entirely ASCII. Look through the buffer for
3599 * things that wouldn't be in ASCII text or rich ASCII text. Count these
3601 for (i = 0; i < len; i++, s++) {
3602 if (!*s) { /* null never allowed in text */
3606 #ifdef USE_LOCALE_CTYPE
3607 if (IN_LC_RUNTIME(LC_CTYPE)) {
3608 if ( isPRINT_LC(*s) || isSPACE_LC(*s)) {
3615 /* VT occurs so rarely in text, that we consider it odd */
3616 || (isSPACE_A(*s) && *s != VT_NATIVE)
3618 /* But there is a fair amount of backspaces and escapes in
3621 || *s == ESC_NATIVE)
3628 if ((odd * 3 > len) == (PL_op->op_type == OP_FTTEXT)) /* allow 1/3 odd */
3639 const char *tmps = NULL;
3643 SV * const sv = POPs;
3644 if (PL_op->op_flags & OPf_SPECIAL) {
3645 gv = gv_fetchsv(sv, 0, SVt_PVIO);
3647 if (ckWARN(WARN_UNOPENED)) {
3648 Perl_warner(aTHX_ packWARN(WARN_UNOPENED),
3649 "chdir() on unopened filehandle %" SVf, sv);
3651 SETERRNO(EBADF,RMS_IFI);
3653 TAINT_PROPER("chdir");
3657 else if (!(gv = MAYBE_DEREF_GV(sv)))
3658 tmps = SvPV_nomg_const_nolen(sv);
3661 HV * const table = GvHVn(PL_envgv);
3665 if ( (svp = hv_fetchs(table, "HOME", FALSE))
3666 || (svp = hv_fetchs(table, "LOGDIR", FALSE))
3668 || (svp = hv_fetchs(table, "SYS$LOGIN", FALSE))
3672 tmps = SvPV_nolen_const(*svp);
3676 SETERRNO(EINVAL, LIB_INVARG);
3677 TAINT_PROPER("chdir");
3682 TAINT_PROPER("chdir");
3685 IO* const io = GvIO(gv);
3688 PUSHi(fchdir(my_dirfd(IoDIRP(io))) >= 0);
3689 } else if (IoIFP(io)) {
3690 int fd = PerlIO_fileno(IoIFP(io));
3694 PUSHi(fchdir(fd) >= 0);
3704 DIE(aTHX_ PL_no_func, "fchdir");
3708 PUSHi( PerlDir_chdir(tmps) >= 0 );
3710 /* Clear the DEFAULT element of ENV so we'll get the new value
3712 hv_delete(GvHVn(PL_envgv),"DEFAULT",7,G_DISCARD);
3719 SETERRNO(EBADF,RMS_IFI);
3726 /* also used for: pp_chmod() pp_kill() pp_unlink() pp_utime() */
3730 dSP; dMARK; dTARGET;
3731 const I32 value = (I32)apply(PL_op->op_type, MARK, SP);
3742 char * const tmps = POPpx;
3743 TAINT_PROPER("chroot");
3744 PUSHi( chroot(tmps) >= 0 );
3747 DIE(aTHX_ PL_no_func, "chroot");
3758 const char * const tmps2 = POPpconstx;
3759 const char * const tmps = SvPV_nolen_const(TOPs);
3760 TAINT_PROPER("rename");
3762 anum = PerlLIO_rename(tmps, tmps2);
3764 if (!(anum = PerlLIO_stat(tmps, &statbuf))) {
3765 if (same_dirent(tmps2, tmps)) /* can always rename to same name */
3768 if (PerlProc_geteuid() || PerlLIO_stat(tmps2, &statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
3769 (void)UNLINK(tmps2);
3770 if (!(anum = link(tmps, tmps2)))
3771 anum = UNLINK(tmps);
3780 /* also used for: pp_symlink() */
3782 #if defined(HAS_LINK) || defined(HAS_SYMLINK)
3786 const int op_type = PL_op->op_type;
3790 if (op_type == OP_LINK)
3791 DIE(aTHX_ PL_no_func, "link");
3793 # ifndef HAS_SYMLINK
3794 if (op_type == OP_SYMLINK)
3795 DIE(aTHX_ PL_no_func, "symlink");
3799 const char * const tmps2 = POPpconstx;
3800 const char * const tmps = SvPV_nolen_const(TOPs);
3801 TAINT_PROPER(PL_op_desc[op_type]);
3803 # if defined(HAS_LINK)
3804 # if defined(HAS_SYMLINK)
3805 /* Both present - need to choose which. */
3806 (op_type == OP_LINK) ?
3807 PerlLIO_link(tmps, tmps2) : symlink(tmps, tmps2);
3809 /* Only have link, so calls to pp_symlink will have DIE()d above. */
3810 PerlLIO_link(tmps, tmps2);
3813 # if defined(HAS_SYMLINK)
3814 /* Only have symlink, so calls to pp_link will have DIE()d above. */
3815 symlink(tmps, tmps2);
3820 SETi( result >= 0 );
3825 /* also used for: pp_symlink() */
3830 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
3840 char buf[MAXPATHLEN];
3845 /* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
3846 * it is impossible to know whether the result was truncated. */
3847 len = readlink(tmps, buf, sizeof(buf) - 1);
3856 RETSETUNDEF; /* just pretend it's a normal file */
3860 #if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
3862 S_dooneliner(pTHX_ const char *cmd, const char *filename)
3864 char * const save_filename = filename;
3869 Size_t size = strlen(cmd) + (strlen(filename) * 2) + 10;
3871 PERL_ARGS_ASSERT_DOONELINER;
3873 Newx(cmdline, size, char);
3874 my_strlcpy(cmdline, cmd, size);
3875 my_strlcat(cmdline, " ", size);
3876 for (s = cmdline + strlen(cmdline); *filename; ) {
3880 if (s - cmdline < size)
3881 my_strlcpy(s, " 2>&1", size - (s - cmdline));
3882 myfp = PerlProc_popen(cmdline, "r");
3886 SV * const tmpsv = sv_newmortal();
3887 /* Need to save/restore 'PL_rs' ?? */
3888 s = sv_gets(tmpsv, myfp, 0);
3889 (void)PerlProc_pclose(myfp);
3893 #ifdef HAS_SYS_ERRLIST
3898 /* you don't see this */
3899 const char * const errmsg = Strerror(e) ;
3902 if (instr(s, errmsg)) {
3909 #define EACCES EPERM
3911 if (instr(s, "cannot make"))
3912 SETERRNO(EEXIST,RMS_FEX);
3913 else if (instr(s, "existing file"))
3914 SETERRNO(EEXIST,RMS_FEX);
3915 else if (instr(s, "ile exists"))
3916 SETERRNO(EEXIST,RMS_FEX);
3917 else if (instr(s, "non-exist"))
3918 SETERRNO(ENOENT,RMS_FNF);
3919 else if (instr(s, "does not exist"))
3920 SETERRNO(ENOENT,RMS_FNF);
3921 else if (instr(s, "not empty"))
3922 SETERRNO(EBUSY,SS_DEVOFFLINE);
3923 else if (instr(s, "cannot access"))
3924 SETERRNO(EACCES,RMS_PRV);
3926 SETERRNO(EPERM,RMS_PRV);
3929 else { /* some mkdirs return no failure indication */
3931 anum = (PerlLIO_stat(save_filename, &statbuf) >= 0);
3932 if (PL_op->op_type == OP_RMDIR)
3937 SETERRNO(EACCES,RMS_PRV); /* a guess */
3946 /* This macro removes trailing slashes from a directory name.
3947 * Different operating and file systems take differently to
3948 * trailing slashes. According to POSIX 1003.1 1996 Edition
3949 * any number of trailing slashes should be allowed.
3950 * Thusly we snip them away so that even non-conforming
3951 * systems are happy.
3952 * We should probably do this "filtering" for all
3953 * the functions that expect (potentially) directory names:
3954 * -d, chdir(), chmod(), chown(), chroot(), fcntl()?,
3955 * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */
3957 #define TRIMSLASHES(tmps,len,copy) (tmps) = SvPV_const(TOPs, (len)); \
3958 if ((len) > 1 && (tmps)[(len)-1] == '/') { \
3961 } while ((len) > 1 && (tmps)[(len)-1] == '/'); \
3962 (tmps) = savepvn((tmps), (len)); \
3972 const unsigned int mode = (MAXARG > 1 && (TOPs||((void)POPs,0))) ? POPu : 0777;
3974 TRIMSLASHES(tmps,len,copy);
3976 TAINT_PROPER("mkdir");
3978 SETi( PerlDir_mkdir(tmps, mode) >= 0 );
3982 SETi( dooneliner("mkdir", tmps) );
3983 oldumask = PerlLIO_umask(0);
3984 PerlLIO_umask(oldumask);
3985 PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
4000 TRIMSLASHES(tmps,len,copy);
4001 TAINT_PROPER("rmdir");
4003 SETi( PerlDir_rmdir(tmps) >= 0 );
4005 SETi( dooneliner("rmdir", tmps) );
4012 /* Directory calls. */
4016 #if defined(Direntry_t) && defined(HAS_READDIR)
4018 const char * const dirname = POPpconstx;
4019 GV * const gv = MUTABLE_GV(POPs);
4020 IO * const io = GvIOn(gv);
4022 if ((IoIFP(io) || IoOFP(io)))
4023 Perl_croak(aTHX_ "Cannot open %" HEKf " as a dirhandle: it is already open as a filehandle",
4024 HEKfARG(GvENAME_HEK(gv)));
4026 PerlDir_close(IoDIRP(io));
4027 if (!(IoDIRP(io) = PerlDir_open(dirname)))
4033 SETERRNO(EBADF,RMS_DIR);
4036 DIE(aTHX_ PL_no_dir_func, "opendir");
4042 #if !defined(Direntry_t) || !defined(HAS_READDIR)
4043 DIE(aTHX_ PL_no_dir_func, "readdir");
4045 #if !defined(I_DIRENT) && !defined(VMS)
4046 Direntry_t *readdir (DIR *);
4051 const U8 gimme = GIMME_V;
4052 GV * const gv = MUTABLE_GV(POPs);
4053 const Direntry_t *dp;
4054 IO * const io = GvIOn(gv);
4057 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4058 "readdir() attempted on invalid dirhandle %" HEKf,
4059 HEKfARG(GvENAME_HEK(gv)));
4064 dp = (Direntry_t *)PerlDir_read(IoDIRP(io));
4068 sv = newSVpvn(dp->d_name, dp->d_namlen);
4070 sv = newSVpv(dp->d_name, 0);
4072 if (!(IoFLAGS(io) & IOf_UNTAINT))
4075 } while (gimme == G_ARRAY);
4077 if (!dp && gimme != G_ARRAY)
4084 SETERRNO(EBADF,RMS_ISI);
4085 if (gimme == G_ARRAY)
4094 #if defined(HAS_TELLDIR) || defined(telldir)
4096 /* XXX does _anyone_ need this? --AD 2/20/1998 */
4097 /* XXX netbsd still seemed to.
4098 XXX HAS_TELLDIR_PROTO is new style, NEED_TELLDIR_PROTO is old style.
4099 --JHI 1999-Feb-02 */
4100 # if !defined(HAS_TELLDIR_PROTO) || defined(NEED_TELLDIR_PROTO)
4101 long telldir (DIR *);
4103 GV * const gv = MUTABLE_GV(POPs);
4104 IO * const io = GvIOn(gv);
4107 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4108 "telldir() attempted on invalid dirhandle %" HEKf,
4109 HEKfARG(GvENAME_HEK(gv)));
4113 PUSHi( PerlDir_tell(IoDIRP(io)) );
4117 SETERRNO(EBADF,RMS_ISI);
4120 DIE(aTHX_ PL_no_dir_func, "telldir");
4126 #if defined(HAS_SEEKDIR) || defined(seekdir)
4128 const long along = POPl;
4129 GV * const gv = MUTABLE_GV(POPs);
4130 IO * const io = GvIOn(gv);
4133 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4134 "seekdir() attempted on invalid dirhandle %" HEKf,
4135 HEKfARG(GvENAME_HEK(gv)));
4138 (void)PerlDir_seek(IoDIRP(io), along);
4143 SETERRNO(EBADF,RMS_ISI);
4146 DIE(aTHX_ PL_no_dir_func, "seekdir");
4152 #if defined(HAS_REWINDDIR) || defined(rewinddir)
4154 GV * const gv = MUTABLE_GV(POPs);
4155 IO * const io = GvIOn(gv);
4158 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4159 "rewinddir() attempted on invalid dirhandle %" HEKf,
4160 HEKfARG(GvENAME_HEK(gv)));
4163 (void)PerlDir_rewind(IoDIRP(io));
4167 SETERRNO(EBADF,RMS_ISI);
4170 DIE(aTHX_ PL_no_dir_func, "rewinddir");
4176 #if defined(Direntry_t) && defined(HAS_READDIR)
4178 GV * const gv = MUTABLE_GV(POPs);
4179 IO * const io = GvIOn(gv);
4182 Perl_ck_warner(aTHX_ packWARN(WARN_IO),
4183 "closedir() attempted on invalid dirhandle %" HEKf,
4184 HEKfARG(GvENAME_HEK(gv)));
4187 #ifdef VOID_CLOSEDIR
4188 PerlDir_close(IoDIRP(io));
4190 if (PerlDir_close(IoDIRP(io)) < 0) {
4191 IoDIRP(io) = 0; /* Don't try to close again--coredumps on SysV */
4200 SETERRNO(EBADF,RMS_IFI);
4203 DIE(aTHX_ PL_no_dir_func, "closedir");
4207 /* Process control. */
4214 #ifdef HAS_SIGPROCMASK
4215 sigset_t oldmask, newmask;
4219 PERL_FLUSHALL_FOR_CHILD;
4220 #ifdef HAS_SIGPROCMASK
4221 sigfillset(&newmask);
4222 sigprocmask(SIG_SETMASK, &newmask, &oldmask);
4224 childpid = PerlProc_fork();
4225 if (childpid == 0) {
4229 for (sig = 1; sig < SIG_SIZE; sig++)
4230 PL_psig_pend[sig] = 0;
4232 #ifdef HAS_SIGPROCMASK
4235 sigprocmask(SIG_SETMASK, &oldmask, NULL);
4242 #ifdef PERL_USES_PL_PIDSTATUS
4243 hv_clear(PL_pidstatus); /* no kids, so don't wait for 'em */
4249 # if (defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)) || defined(__amigaos4__)
4254 PERL_FLUSHALL_FOR_CHILD;
4255 childpid = PerlProc_fork();
4261 DIE(aTHX_ PL_no_func, "fork");
4268 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4273 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4274 childpid = wait4pid(-1, &argflags, 0);
4276 while ((childpid = wait4pid(-1, &argflags, 0)) == -1 &&
4281 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4282 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4283 STATUS_NATIVE_CHILD_SET((childpid && childpid != -1) ? argflags : -1);
4285 STATUS_NATIVE_CHILD_SET((childpid > 0) ? argflags : -1);
4290 DIE(aTHX_ PL_no_func, "wait");
4296 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32)) && !defined(__LIBCATAMOUNT__)
4298 const int optype = POPi;
4299 const Pid_t pid = TOPi;
4303 result = amigaos_waitpid(aTHX_ optype, pid, &argflags);
4304 STATUS_NATIVE_CHILD_SET((result >= 0) ? argflags : -1);
4305 result = result == 0 ? pid : -1;
4309 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
4310 result = wait4pid(pid, &argflags, optype);
4312 while ((result = wait4pid(pid, &argflags, optype)) == -1 &&
4317 # if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
4318 /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
4319 STATUS_NATIVE_CHILD_SET((result && result != -1) ? argflags : -1);
4321 STATUS_NATIVE_CHILD_SET((result > 0) ? argflags : -1);
4323 # endif /* __amigaos4__ */
4327 DIE(aTHX_ PL_no_func, "waitpid");
4333 dSP; dMARK; dORIGMARK; dTARGET;
4334 #if defined(__LIBCATAMOUNT__)
4335 PL_statusvalue = -1;
4340 # ifdef __amigaos4__
4348 while (++MARK <= SP) {
4349 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4354 TAINT_PROPER("system");
4356 PERL_FLUSHALL_FOR_CHILD;
4357 #if (defined(HAS_FORK) || defined(__amigaos4__)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO)
4360 struct UserData userdata;
4367 bool child_success = FALSE;
4368 #ifdef HAS_SIGPROCMASK
4369 sigset_t newset, oldset;
4372 if (PerlProc_pipe(pp) >= 0)
4375 amigaos_fork_set_userdata(aTHX_
4381 pthread_create(&proc,NULL,amigaos_system_child,(void *)&userdata);
4382 child_success = proc > 0;
4384 #ifdef HAS_SIGPROCMASK
4385 sigemptyset(&newset);
4386 sigaddset(&newset, SIGCHLD);
4387 sigprocmask(SIG_BLOCK, &newset, &oldset);
4389 while ((childpid = PerlProc_fork()) == -1) {
4390 if (errno != EAGAIN) {
4395 PerlLIO_close(pp[0]);
4396 PerlLIO_close(pp[1]);
4398 #ifdef HAS_SIGPROCMASK
4399 sigprocmask(SIG_SETMASK, &oldset, NULL);
4405 child_success = childpid > 0;
4407 if (child_success) {
4408 Sigsave_t ihand,qhand; /* place to save signals during system() */
4411 #ifndef __amigaos4__
4413 PerlLIO_close(pp[1]);
4416 rsignal_save(SIGINT, (Sighandler_t) SIG_IGN, &ihand);
4417 rsignal_save(SIGQUIT, (Sighandler_t) SIG_IGN, &qhand);
4420 result = pthread_join(proc, (void **)&status);
4423 result = wait4pid(childpid, &status, 0);
4424 } while (result == -1 && errno == EINTR);
4427 #ifdef HAS_SIGPROCMASK
4428 sigprocmask(SIG_SETMASK, &oldset, NULL);
4430 (void)rsignal_restore(SIGINT, &ihand);
4431 (void)rsignal_restore(SIGQUIT, &qhand);
4433 STATUS_NATIVE_CHILD_SET(result == -1 ? -1 : status);
4434 do_execfree(); /* free any memory child malloced on fork */
4440 while (n < sizeof(int)) {
4441 const SSize_t n1 = PerlLIO_read(pp[0],
4442 (void*)(((char*)&errkid)+n),
4448 PerlLIO_close(pp[0]);
4449 if (n) { /* Error */
4450 if (n != sizeof(int))
4451 DIE(aTHX_ "panic: kid popen errno read, n=%u", n);
4452 errno = errkid; /* Propagate errno from kid */
4454 /* The pipe always has something in it
4455 * so n alone is not enough. */
4459 STATUS_NATIVE_CHILD_SET(-1);
4463 XPUSHi(STATUS_CURRENT);
4466 #ifndef __amigaos4__
4467 #ifdef HAS_SIGPROCMASK
4468 sigprocmask(SIG_SETMASK, &oldset, NULL);
4471 PerlLIO_close(pp[0]);
4472 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
4473 if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
4477 if (PL_op->op_flags & OPf_STACKED) {
4478 SV * const really = *++MARK;
4479 value = (I32)do_aexec5(really, MARK, SP, pp[1], did_pipes);
4481 else if (SP - MARK != 1)
4482 value = (I32)do_aexec5(NULL, MARK, SP, pp[1], did_pipes);
4484 value = (I32)do_exec3(SvPVx_nolen(sv_mortalcopy(*SP)), pp[1], did_pipes);
4486 #endif /* __amigaos4__ */
4489 #else /* ! FORK or VMS or OS/2 */
4492 if (PL_op->op_flags & OPf_STACKED) {
4493 SV * const really = *++MARK;
4494 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4495 value = (I32)do_aspawn(really, MARK, SP);
4497 value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
4500 else if (SP - MARK != 1) {
4501 # if defined(WIN32) || defined(OS2) || defined(__SYMBIAN32__) || defined(__VMS)
4502 value = (I32)do_aspawn(NULL, MARK, SP);
4504 value = (I32)do_aspawn(NULL, (void **)MARK, (void **)SP);
4508 value = (I32)do_spawn(SvPVx_nolen(sv_mortalcopy(*SP)));
4510 if (PL_statusvalue == -1) /* hint that value must be returned as is */
4512 STATUS_NATIVE_CHILD_SET(value);
4515 XPUSHi(result ? value : STATUS_CURRENT);
4516 #endif /* !FORK or VMS or OS/2 */
4523 dSP; dMARK; dORIGMARK; dTARGET;
4528 while (++MARK <= SP) {
4529 (void)SvPV_nolen_const(*MARK); /* stringify for taint check */
4534 TAINT_PROPER("exec");
4537 PERL_FLUSHALL_FOR_CHILD;
4538 if (PL_op->op_flags & OPf_STACKED) {
4539 SV * const really = *++MARK;
4540 value = (I32)do_aexec(really, MARK, SP);
4542 else if (SP - MARK != 1)
4544 value = (I32)vms_do_aexec(NULL, MARK, SP);
4546 value = (I32)do_aexec(NULL, MARK, SP);
4550 value = (I32)vms_do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4552 value = (I32)do_exec(SvPVx_nolen(sv_mortalcopy(*SP)));
4564 XPUSHi( getppid() );
4567 DIE(aTHX_ PL_no_func, "getppid");
4577 (MAXARG < 1) ? 0 : TOPs ? SvIVx(POPs) : ((void)POPs, 0);
4580 pgrp = (I32)BSD_GETPGRP(pid);
4582 if (pid != 0 && pid != PerlProc_getpid())
4583 DIE(aTHX_ "POSIX getpgrp can't take an argument");
4589 DIE(aTHX_ PL_no_func, "getpgrp");
4599 pgrp = MAXARG == 2 && (TOPs||POPs) ? POPi : 0;
4600 if (MAXARG > 0) pid = TOPs ? TOPi : 0;
4607 TAINT_PROPER("setpgrp");
4609 SETi( BSD_SETPGRP(pid, pgrp) >= 0 );
4611 if ((pgrp != 0 && pgrp != PerlProc_getpid())
4612 || (pid != 0 && pid != PerlProc_getpid()))
4614 DIE(aTHX_ "setpgrp can't take arguments");
4616 SETi( setpgrp() >= 0 );
4617 #endif /* USE_BSDPGRP */
4620 DIE(aTHX_ PL_no_func, "setpgrp");
4624 #if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2))
4625 # define PRIORITY_WHICH_T(which) (__priority_which_t)which
4627 # define PRIORITY_WHICH_T(which) which
4632 #ifdef HAS_GETPRIORITY
4634 const int who = POPi;
4635 const int which = TOPi;
4636 SETi( getpriority(PRIORITY_WHICH_T(which), who) );
4639 DIE(aTHX_ PL_no_func, "getpriority");
4645 #ifdef HAS_SETPRIORITY
4647 const int niceval = POPi;
4648 const int who = POPi;
4649 const int which = TOPi;
4650 TAINT_PROPER("setpriority");
4651 SETi( setpriority(PRIORITY_WHICH_T(which), who, niceval) >= 0 );
4654 DIE(aTHX_ PL_no_func, "setpriority");
4658 #undef PRIORITY_WHICH_T
4666 XPUSHn( time(NULL) );
4668 XPUSHi( time(NULL) );
4677 struct tms timesbuf;
4680 (void)PerlProc_times(×buf);
4682 mPUSHn(((NV)timesbuf.tms_utime)/(NV)PL_clocktick);
4683 if (GIMME_V == G_ARRAY) {
4684 mPUSHn(((NV)timesbuf.tms_stime)/(NV)PL_clocktick);
4685 mPUSHn(((NV)timesbuf.tms_cutime)/(NV)PL_clocktick);
4686 mPUSHn(((NV)timesbuf.tms_cstime)/(NV)PL_clocktick);
4694 if (GIMME_V == G_ARRAY) {
4701 DIE(aTHX_ "times not implemented");
4703 #endif /* HAS_TIMES */
4706 /* The 32 bit int year limits the times we can represent to these
4707 boundaries with a few days wiggle room to account for time zone
4710 /* Sat Jan 3 00:00:00 -2147481748 */
4711 #define TIME_LOWER_BOUND -67768100567755200.0
4712 /* Sun Dec 29 12:00:00 2147483647 */
4713 #define TIME_UPPER_BOUND 67767976233316800.0
4716 /* also used for: pp_localtime() */
4724 const char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
4725 static const char * const dayname[] =
4726 {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
4727 static const char * const monname[] =
4728 {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
4729 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
4731 if (MAXARG < 1 || (!TOPs && ((void)POPs, 1))) {
4734 when = (Time64_T)now;
4737 NV input = Perl_floor(POPn);
4738 const bool pl_isnan = Perl_isnan(input);
4739 when = (Time64_T)input;
4740 if (UNLIKELY(pl_isnan || when != input)) {
4741 /* diag_listed_as: gmtime(%f) too large */
4742 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4743 "%s(%.0" NVff ") too large", opname, input);
4751 if ( TIME_LOWER_BOUND > when ) {
4752 /* diag_listed_as: gmtime(%f) too small */
4753 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4754 "%s(%.0" NVff ") too small", opname, when);
4757 else if( when > TIME_UPPER_BOUND ) {
4758 /* diag_listed_as: gmtime(%f) too small */
4759 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4760 "%s(%.0" NVff ") too large", opname, when);
4764 if (PL_op->op_type == OP_LOCALTIME)
4765 err = Perl_localtime64_r(&when, &tmbuf);
4767 err = Perl_gmtime64_r(&when, &tmbuf);
4771 /* diag_listed_as: gmtime(%f) failed */
4772 /* XXX %lld broken for quads */
4774 Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
4775 "%s(%.0" NVff ") failed", opname, when);
4778 if (GIMME_V != G_ARRAY) { /* scalar context */
4785 Perl_sv_setpvf_mg(aTHX_ TARG, "%s %s %2d %02d:%02d:%02d %" IVdf,
4786 dayname[tmbuf.tm_wday],
4787 monname[tmbuf.tm_mon],
4792 (IV)tmbuf.tm_year + 1900);
4795 else { /* list context */
4801 mPUSHi(tmbuf.tm_sec);
4802 mPUSHi(tmbuf.tm_min);
4803 mPUSHi(tmbuf.tm_hour);
4804 mPUSHi(tmbuf.tm_mday);
4805 mPUSHi(tmbuf.tm_mon);
4806 mPUSHn(tmbuf.tm_year);
4807 mPUSHi(tmbuf.tm_wday);
4808 mPUSHi(tmbuf.tm_yday);
4809 mPUSHi(tmbuf.tm_isdst);
4818 /* alarm() takes an unsigned int number of seconds, and return the
4819 * unsigned int number of seconds remaining in the previous alarm
4820 * (alarms don't stack). Therefore negative return values are not
4824 /* Note that while the C library function alarm() as such has
4825 * no errors defined (or in other words, properly behaving client
4826 * code shouldn't expect any), alarm() being obsoleted by
4827 * setitimer() and often being implemented in terms of
4828 * setitimer(), can fail. */
4829 /* diag_listed_as: %s() with negative argument */
4830 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4831 "alarm() with negative argument");
4832 SETERRNO(EINVAL, LIB_INVARG);
4836 unsigned int retval = alarm(anum);
4837 if ((int)retval < 0) /* Strictly speaking "cannot happen". */
4843 DIE(aTHX_ PL_no_func, "alarm");
4853 (void)time(&lasttime);
4854 if (MAXARG < 1 || (!TOPs && !POPs))
4857 const I32 duration = POPi;
4859 /* diag_listed_as: %s() with negative argument */
4860 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC),
4861 "sleep() with negative argument");
4862 SETERRNO(EINVAL, LIB_INVARG);
4866 PerlProc_sleep((unsigned int)duration);
4870 XPUSHi(when - lasttime);
4874 /* Shared memory. */
4875 /* Merged with some message passing. */
4877 /* also used for: pp_msgrcv() pp_msgsnd() pp_semop() pp_shmread() */
4881 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4882 dSP; dMARK; dTARGET;
4883 const int op_type = PL_op->op_type;
4888 value = (I32)(do_msgsnd(MARK, SP) >= 0);
4891 value = (I32)(do_msgrcv(MARK, SP) >= 0);
4894 value = (I32)(do_semop(MARK, SP) >= 0);
4897 value = (I32)(do_shmio(op_type, MARK, SP) >= 0);
4905 return Perl_pp_semget(aTHX);
4911 /* also used for: pp_msgget() pp_shmget() */
4915 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4916 dSP; dMARK; dTARGET;
4917 const int anum = do_ipcget(PL_op->op_type, MARK, SP);
4924 DIE(aTHX_ "System V IPC is not implemented on this machine");
4928 /* also used for: pp_msgctl() pp_shmctl() */
4932 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
4933 dSP; dMARK; dTARGET;
4934 const int anum = do_ipcctl(PL_op->op_type, MARK, SP);
4942 PUSHp(zero_but_true, ZBTLEN);
4946 return Perl_pp_semget(aTHX);
4950 /* I can't const this further without getting warnings about the types of
4951 various arrays passed in from structures. */
4953 S_space_join_names_mortal(pTHX_ char *const *array)
4957 if (array && *array) {
4958 target = newSVpvs_flags("", SVs_TEMP);
4960 sv_catpv(target, *array);
4963 sv_catpvs(target, " ");
4966 target = sv_mortalcopy(&PL_sv_no);
4971 /* Get system info. */
4973 /* also used for: pp_ghbyaddr() pp_ghbyname() */
4977 #if defined(HAS_GETHOSTBYNAME) || defined(HAS_GETHOSTBYADDR) || defined(HAS_GETHOSTENT)
4979 I32 which = PL_op->op_type;
4982 #ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
4983 struct hostent *gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
4984 struct hostent *gethostbyname(Netdb_name_t);
4985 struct hostent *gethostent(void);
4987 struct hostent *hent = NULL;
4991 if (which == OP_GHBYNAME) {
4992 #ifdef HAS_GETHOSTBYNAME
4993 const char* const name = POPpbytex;
4994 hent = PerlSock_gethostbyname(name);
4996 DIE(aTHX_ PL_no_sock_func, "gethostbyname");
4999 else if (which == OP_GHBYADDR) {
5000 #ifdef HAS_GETHOSTBYADDR
5001 const int addrtype = POPi;
5002 SV * const addrsv = POPs;
5004 const char *addr = (char *)SvPVbyte(addrsv, addrlen);
5006 hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
5008 DIE(aTHX_ PL_no_sock_func, "gethostbyaddr");
5012 #ifdef HAS_GETHOSTENT
5013 hent = PerlSock_gethostent();
5015 DIE(aTHX_ PL_no_sock_func, "gethostent");
5018 #ifdef HOST_NOT_FOUND
5020 #ifdef USE_REENTRANT_API
5021 # ifdef USE_GETHOSTENT_ERRNO
5022 h_errno = PL_reentrant_buffer->_gethostent_errno;
5025 STATUS_UNIX_SET(h_errno);
5029 if (GIMME_V != G_ARRAY) {
5030 PUSHs(sv = sv_newmortal());
5032 if (which == OP_GHBYNAME) {
5034 sv_setpvn(sv, hent->h_addr, hent->h_length);
5037 sv_setpv(sv, (char*)hent->h_name);
5043 mPUSHs(newSVpv((char*)hent->h_name, 0));
5044 PUSHs(space_join_names_mortal(hent->h_aliases));
5045 mPUSHi(hent->h_addrtype);
5046 len = hent->h_length;
5049 for (elem = hent->h_addr_list; elem && *elem; elem++) {
5050 mXPUSHp(*elem, len);
5054 mPUSHp(hent->h_addr, len);
5056 PUSHs(sv_mortalcopy(&PL_sv_no));
5061 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5065 /* also used for: pp_gnbyaddr() pp_gnbyname() */
5069 #if defined(HAS_GETNETBYNAME) || defined(HAS_GETNETBYADDR) || defined(HAS_GETNETENT)
5071 I32 which = PL_op->op_type;
5073 #ifndef HAS_GETNET_PROTOS /* XXX Do we need individual probes? */
5074 struct netent *getnetbyaddr(Netdb_net_t, int);
5075 struct netent *getnetbyname(Netdb_name_t);
5076 struct netent *getnetent(void);
5078 struct netent *nent;
5080 if (which == OP_GNBYNAME){
5081 #ifdef HAS_GETNETBYNAME
5082 const char * const name = POPpbytex;
5083 nent = PerlSock_getnetbyname(name);
5085 DIE(aTHX_ PL_no_sock_func, "getnetbyname");
5088 else if (which == OP_GNBYADDR) {
5089 #ifdef HAS_GETNETBYADDR
5090 const int addrtype = POPi;
5091 const Netdb_net_t addr = (Netdb_net_t) (U32)POPu;
5092 nent = PerlSock_getnetbyaddr(addr, addrtype);
5094 DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");
5098 #ifdef HAS_GETNETENT
5099 nent = PerlSock_getnetent();
5101 DIE(aTHX_ PL_no_sock_func, "getnetent");
5104 #ifdef HOST_NOT_FOUND
5106 #ifdef USE_REENTRANT_API
5107 # ifdef USE_GETNETENT_ERRNO
5108 h_errno = PL_reentrant_buffer->_getnetent_errno;
5111 STATUS_UNIX_SET(h_errno);
5116 if (GIMME_V != G_ARRAY) {
5117 PUSHs(sv = sv_newmortal());
5119 if (which == OP_GNBYNAME)
5120 sv_setiv(sv, (IV)nent->n_net);
5122 sv_setpv(sv, nent->n_name);
5128 mPUSHs(newSVpv(nent->n_name, 0));
5129 PUSHs(space_join_names_mortal(nent->n_aliases));
5130 mPUSHi(nent->n_addrtype);
5131 mPUSHi(nent->n_net);
5136 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5141 /* also used for: pp_gpbyname() pp_gpbynumber() */
5145 #if defined(HAS_GETPROTOBYNAME) || defined(HAS_GETPROTOBYNUMBER) || defined(HAS_GETPROTOENT)
5147 I32 which = PL_op->op_type;
5149 #ifndef HAS_GETPROTO_PROTOS /* XXX Do we need individual probes? */
5150 struct protoent *getprotobyname(Netdb_name_t);
5151 struct protoent *getprotobynumber(int);
5152 struct protoent *getprotoent(void);
5154 struct protoent *pent;
5156 if (which == OP_GPBYNAME) {
5157 #ifdef HAS_GETPROTOBYNAME
5158 const char* const name = POPpbytex;
5159 pent = PerlSock_getprotobyname(name);
5161 DIE(aTHX_ PL_no_sock_func, "getprotobyname");
5164 else if (which == OP_GPBYNUMBER) {
5165 #ifdef HAS_GETPROTOBYNUMBER
5166 const int number = POPi;
5167 pent = PerlSock_getprotobynumber(number);
5169 DIE(aTHX_ PL_no_sock_func, "getprotobynumber");
5173 #ifdef HAS_GETPROTOENT
5174 pent = PerlSock_getprotoent();
5176 DIE(aTHX_ PL_no_sock_func, "getprotoent");
5180 if (GIMME_V != G_ARRAY) {
5181 PUSHs(sv = sv_newmortal());
5183 if (which == OP_GPBYNAME)
5184 sv_setiv(sv, (IV)pent->p_proto);
5186 sv_setpv(sv, pent->p_name);
5192 mPUSHs(newSVpv(pent->p_name, 0));
5193 PUSHs(space_join_names_mortal(pent->p_aliases));
5194 mPUSHi(pent->p_proto);
5199 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5204 /* also used for: pp_gsbyname() pp_gsbyport() */
5208 #if defined(HAS_GETSERVBYNAME) || defined(HAS_GETSERVBYPORT) || defined(HAS_GETSERVENT)
5210 I32 which = PL_op->op_type;
5212 #ifndef HAS_GETSERV_PROTOS /* XXX Do we need individual probes? */
5213 struct servent *getservbyname(Netdb_name_t, Netdb_name_t);
5214 struct servent *getservbyport(int, Netdb_name_t);
5215 struct servent *getservent(void);
5217 struct servent *sent;
5219 if (which == OP_GSBYNAME) {
5220 #ifdef HAS_GETSERVBYNAME
5221 const char * const proto = POPpbytex;
5222 const char * const name = POPpbytex;
5223 sent = PerlSock_getservbyname(name, (proto && !*proto) ? NULL : proto);
5225 DIE(aTHX_ PL_no_sock_func, "getservbyname");
5228 else if (which == OP_GSBYPORT) {
5229 #ifdef HAS_GETSERVBYPORT
5230 const char * const proto = POPpbytex;
5231 unsigned short port = (unsigned short)POPu;
5232 port = PerlSock_htons(port);
5233 sent = PerlSock_getservbyport(port, (proto && !*proto) ? NULL : proto);
5235 DIE(aTHX_ PL_no_sock_func, "getservbyport");
5239 #ifdef HAS_GETSERVENT
5240 sent = PerlSock_getservent();
5242 DIE(aTHX_ PL_no_sock_func, "getservent");
5246 if (GIMME_V != G_ARRAY) {
5247 PUSHs(sv = sv_newmortal());
5249 if (which == OP_GSBYNAME) {
5250 sv_setiv(sv, (IV)PerlSock_ntohs(sent->s_port));
5253 sv_setpv(sv, sent->s_name);
5259 mPUSHs(newSVpv(sent->s_name, 0));
5260 PUSHs(space_join_names_mortal(sent->s_aliases));
5261 mPUSHi(PerlSock_ntohs(sent->s_port));
5262 mPUSHs(newSVpv(sent->s_proto, 0));
5267 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5272 /* also used for: pp_snetent() pp_sprotoent() pp_sservent() */
5277 const int stayopen = TOPi;
5278 switch(PL_op->op_type) {
5280 #ifdef HAS_SETHOSTENT
5281 PerlSock_sethostent(stayopen);
5283 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5286 #ifdef HAS_SETNETENT
5288 PerlSock_setnetent(stayopen);
5290 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5294 #ifdef HAS_SETPROTOENT
5295 PerlSock_setprotoent(stayopen);
5297 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5301 #ifdef HAS_SETSERVENT
5302 PerlSock_setservent(stayopen);
5304 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5312 /* also used for: pp_egrent() pp_enetent() pp_eprotoent() pp_epwent()
5313 * pp_eservent() pp_sgrent() pp_spwent() */
5318 switch(PL_op->op_type) {
5320 #ifdef HAS_ENDHOSTENT
5321 PerlSock_endhostent();
5323 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5327 #ifdef HAS_ENDNETENT
5328 PerlSock_endnetent();
5330 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5334 #ifdef HAS_ENDPROTOENT
5335 PerlSock_endprotoent();
5337 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5341 #ifdef HAS_ENDSERVENT
5342 PerlSock_endservent();
5344 DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
5348 #if defined(HAS_GROUP) && defined(HAS_SETGRENT)
5351 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5355 #if defined(HAS_GROUP) && defined(HAS_ENDGRENT)
5358 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5362 #if defined(HAS_PASSWD) && defined(HAS_SETPWENT)
5365 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5369 #if defined(HAS_PASSWD) && defined(HAS_ENDPWENT)
5372 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5381 /* also used for: pp_gpwnam() pp_gpwuid() */
5387 I32 which = PL_op->op_type;
5389 struct passwd *pwent = NULL;
5391 * We currently support only the SysV getsp* shadow password interface.
5392 * The interface is declared in <shadow.h> and often one needs to link
5393 * with -lsecurity or some such.
5394 * This interface is used at least by Solaris, HP-UX, IRIX, and Linux.
5397 * AIX getpwnam() is clever enough to return the encrypted password
5398 * only if the caller (euid?) is root.
5400 * There are at least three other shadow password APIs. Many platforms
5401 * seem to contain more than one interface for accessing the shadow
5402 * password databases, possibly for compatibility reasons.
5403 * The getsp*() is by far he simplest one, the other two interfaces
5404 * are much more complicated, but also very similar to each other.
5409 * struct pr_passwd *getprpw*();
5410 * The password is in
5411 * char getprpw*(...).ufld.fd_encrypt[]
5412 * Mention HAS_GETPRPWNAM here so that Configure probes for it.
5417 * struct es_passwd *getespw*();
5418 * The password is in
5419 * char *(getespw*(...).ufld.fd_encrypt)
5420 * Mention HAS_GETESPWNAM here so that Configure probes for it.
5423 * struct userpw *getuserpw();
5424 * The password is in
5425 * char *(getuserpw(...)).spw_upw_passwd
5426 * (but the de facto standard getpwnam() should work okay)
5428 * Mention I_PROT here so that Configure probes for it.
5430 * In HP-UX for getprpw*() the manual page claims that one should include
5431 * <hpsecurity.h> instead of <sys/security.h>, but that is not needed
5432 * if one includes <shadow.h> as that includes <hpsecurity.h>,
5433 * and pp_sys.c already includes <shadow.h> if there is such.
5435 * Note that <sys/security.h> is already probed for, but currently
5436 * it is only included in special cases.
5438 * In Digital UNIX/Tru64 if using the getespw*() (which seems to be
5439 * be preferred interface, even though also the getprpw*() interface
5440 * is available) one needs to link with -lsecurity -ldb -laud -lm.
5441 * One also needs to call set_auth_parameters() in main() before
5442 * doing anything else, whether one is using getespw*() or getprpw*().
5444 * Note that accessing the shadow databases can be magnitudes
5445 * slower than accessing the standard databases.
5450 # if defined(__CYGWIN__) && defined(USE_REENTRANT_API)
5451 /* Cygwin 1.5.3-1 has buggy getpwnam_r() and getpwuid_r():
5452 * the pw_comment is left uninitialized. */
5453 PL_reentrant_buffer->_pwent_struct.pw_comment = NULL;
5459 const char* const name = POPpbytex;
5460 pwent = getpwnam(name);
5466 pwent = getpwuid(uid);
5470 # ifdef HAS_GETPWENT
5472 #ifdef POSIX_BC /* In some cases pw_passwd has invalid addresses */
5473 if (pwent) pwent = getpwnam(pwent->pw_name);
5476 DIE(aTHX_ PL_no_func, "getpwent");
5482 if (GIMME_V != G_ARRAY) {
5483 PUSHs(sv = sv_newmortal());
5485 if (which == OP_GPWNAM)
5486 sv_setuid(sv, pwent->pw_uid);
5488 sv_setpv(sv, pwent->pw_name);
5494 mPUSHs(newSVpv(pwent->pw_name, 0));
5498 /* If we have getspnam(), we try to dig up the shadow
5499 * password. If we are underprivileged, the shadow
5500 * interface will set the errno to EACCES or similar,
5501 * and return a null pointer. If this happens, we will
5502 * use the dummy password (usually "*" or "x") from the
5503 * standard password database.
5505 * In theory we could skip the shadow call completely
5506 * if euid != 0 but in practice we cannot know which
5507 * security measures are guarding the shadow databases
5508 * on a random platform.
5510 * Resist the urge to use additional shadow interfaces.
5511 * Divert the urge to writing an extension instead.
5514 /* Some AIX setups falsely(?) detect some getspnam(), which
5515 * has a different API than the Solaris/IRIX one. */
5516 # if defined(HAS_GETSPNAM) && !defined(_AIX)
5519 const struct spwd * const spwent = getspnam(pwent->pw_name);
5520 /* Save and restore errno so that
5521 * underprivileged attempts seem
5522 * to have never made the unsuccessful
5523 * attempt to retrieve the shadow password. */
5525 if (spwent && spwent->sp_pwdp)
5526 sv_setpv(sv, spwent->sp_pwdp);
5530 if (!SvPOK(sv)) /* Use the standard password, then. */
5531 sv_setpv(sv, pwent->pw_passwd);
5534 /* passwd is tainted because user himself can diddle with it.
5535 * admittedly not much and in a very limited way, but nevertheless. */
5538 sv_setuid(PUSHmortal, pwent->pw_uid);
5539 sv_setgid(PUSHmortal, pwent->pw_gid);
5541 /* pw_change, pw_quota, and pw_age are mutually exclusive--
5542 * because of the poor interface of the Perl getpw*(),
5543 * not because there's some standard/convention saying so.
5544 * A better interface would have been to return a hash,
5545 * but we are accursed by our history, alas. --jhi. */
5547 mPUSHi(pwent->pw_change);
5550 mPUSHi(pwent->pw_quota);
5553 mPUSHs(newSVpv(pwent->pw_age, 0));
5555 /* I think that you can never get this compiled, but just in case. */
5556 PUSHs(sv_mortalcopy(&PL_sv_no));
5561 /* pw_class and pw_comment are mutually exclusive--.
5562 * see the above note for pw_change, pw_quota, and pw_age. */
5564 mPUSHs(newSVpv(pwent->pw_class, 0));
5567 mPUSHs(newSVpv(pwent->pw_comment, 0));
5569 /* I think that you can never get this compiled, but just in case. */
5570 PUSHs(sv_mortalcopy(&PL_sv_no));
5575 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_gecos, 0)));
5577 PUSHs(sv = sv_mortalcopy(&PL_sv_no));
5579 /* pw_gecos is tainted because user himself can diddle with it. */
5582 mPUSHs(newSVpv(pwent->pw_dir, 0));
5584 PUSHs(sv = sv_2mortal(newSVpv(pwent->pw_shell, 0)));
5585 /* pw_shell is tainted because user himself can diddle with it. */
5589 mPUSHi(pwent->pw_expire);
5594 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5599 /* also used for: pp_ggrgid() pp_ggrnam() */
5605 const I32 which = PL_op->op_type;
5606 const struct group *grent;
5608 if (which == OP_GGRNAM) {
5609 const char* const name = POPpbytex;
5610 grent = (const struct group *)getgrnam(name);
5612 else if (which == OP_GGRGID) {
5614 const Gid_t gid = POPu;
5615 #elif Gid_t_sign == -1
5616 const Gid_t gid = POPi;
5618 # error "Unexpected Gid_t_sign"
5620 grent = (const struct group *)getgrgid(gid);
5624 grent = (struct group *)getgrent();
5626 DIE(aTHX_ PL_no_func, "getgrent");
5630 if (GIMME_V != G_ARRAY) {
5631 SV * const sv = sv_newmortal();
5635 if (which == OP_GGRNAM)
5636 sv_setgid(sv, grent->gr_gid);
5638 sv_setpv(sv, grent->gr_name);
5644 mPUSHs(newSVpv(grent->gr_name, 0));
5647 mPUSHs(newSVpv(grent->gr_passwd, 0));
5649 PUSHs(sv_mortalcopy(&PL_sv_no));
5652 sv_setgid(PUSHmortal, grent->gr_gid);
5654 #if !(defined(_CRAYMPP) && defined(USE_REENTRANT_API))
5655 /* In UNICOS/mk (_CRAYMPP) the multithreading
5656 * versions (getgrnam_r, getgrgid_r)
5657 * seem to return an illegal pointer
5658 * as the group members list, gr_mem.
5659 * getgrent() doesn't even have a _r version
5660 * but the gr_mem is poisonous anyway.
5661 * So yes, you cannot get the list of group
5662 * members if building multithreaded in UNICOS/mk. */
5663 PUSHs(space_join_names_mortal(grent->gr_mem));
5669 DIE(aTHX_ PL_no_func, PL_op_desc[PL_op->op_type]);
5679 if (!(tmps = PerlProc_getlogin()))
5681 sv_setpv_mg(TARG, tmps);
5685 DIE(aTHX_ PL_no_func, "getlogin");
5689 /* Miscellaneous. */
5694 dSP; dMARK; dORIGMARK; dTARGET;
5695 I32 items = SP - MARK;
5696 unsigned long a[20];
5701 while (++MARK <= SP) {
5702 if (SvTAINTED(*MARK)) {
5708 TAINT_PROPER("syscall");
5711 /* This probably won't work on machines where sizeof(long) != sizeof(int)
5712 * or where sizeof(long) != sizeof(char*). But such machines will
5713 * not likely have syscall implemented either, so who cares?
5715 while (++MARK <= SP) {
5716 if (SvNIOK(*MARK) || !i)
5717 a[i++] = SvIV(*MARK);
5718 else if (*MARK == &PL_sv_undef)
5721 a[i++] = (unsigned long)SvPV_force_nolen(*MARK);
5727 DIE(aTHX_ "Too many args to syscall");
5729 DIE(aTHX_ "Too few args to syscall");
5731 retval = syscall(a[0]);
5734 retval = syscall(a[0],a[1]);
5737 retval = syscall(a[0],a[1],a[2]);
5740 retval = syscall(a[0],a[1],a[2],a[3]);
5743 retval = syscall(a[0],a[1],a[2],a[3],a[4]);
5746 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5]);
5749 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
5752 retval = syscall(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);
5759 DIE(aTHX_ PL_no_func, "syscall");
5763 #ifdef FCNTL_EMULATE_FLOCK
5765 /* XXX Emulate flock() with fcntl().
5766 What's really needed is a good file locking module.
5770 fcntl_emulate_flock(int fd, int operation)
5775 switch (operation & ~LOCK_NB) {
5777 flock.l_type = F_RDLCK;
5780 flock.l_type = F_WRLCK;
5783 flock.l_type = F_UNLCK;
5789 flock.l_whence = SEEK_SET;
5790 flock.l_start = flock.l_len = (Off_t)0;
5792 res = fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &flock);
5793 if (res == -1 && ((errno == EAGAIN) || (errno == EACCES)))
5794 errno = EWOULDBLOCK;
5798 #endif /* FCNTL_EMULATE_FLOCK */
5800 #ifdef LOCKF_EMULATE_FLOCK
5802 /* XXX Emulate flock() with lockf(). This is just to increase
5803 portability of scripts. The calls are not completely
5804 interchangeable. What's really needed is a good file
5808 /* The lockf() constants might have been defined in <unistd.h>.
5809 Unfortunately, <unistd.h> causes troubles on some mixed
5810 (BSD/POSIX) systems, such as SunOS 4.1.3.
5812 Further, the lockf() constants aren't POSIX, so they might not be
5813 visible if we're compiling with _POSIX_SOURCE defined. Thus, we'll
5814 just stick in the SVID values and be done with it. Sigh.
5818 # define F_ULOCK 0 /* Unlock a previously locked region */
5821 # define F_LOCK 1 /* Lock a region for exclusive use */
5824 # define F_TLOCK 2 /* Test and lock a region for exclusive use */
5827 # define F_TEST 3 /* Test a region for other processes locks */
5831 lockf_emulate_flock(int fd, int operation)
5837 /* flock locks entire file so for lockf we need to do the same */
5838 pos = PerlLIO_lseek(fd, (Off_t)0, SEEK_CUR); /* get pos to restore later */
5839 if (pos > 0) /* is seekable and needs to be repositioned */
5840 if (PerlLIO_lseek(fd, (Off_t)0, SEEK_SET) < 0)
5841 pos = -1; /* seek failed, so don't seek back afterwards */
5844 switch (operation) {
5846 /* LOCK_SH - get a shared lock */
5848 /* LOCK_EX - get an exclusive lock */
5850 i = lockf (fd, F_LOCK, 0);
5853 /* LOCK_SH|LOCK_NB - get a non-blocking shared lock */
5854 case LOCK_SH|LOCK_NB:
5855 /* LOCK_EX|LOCK_NB - get a non-blocking exclusive lock */
5856 case LOCK_EX|LOCK_NB:
5857 i = lockf (fd, F_TLOCK, 0);
5859 if ((errno == EAGAIN) || (errno == EACCES))
5860 errno = EWOULDBLOCK;
5863 /* LOCK_UN - unlock (non-blocking is a no-op) */
5865 case LOCK_UN|LOCK_NB:
5866 i = lockf (fd, F_ULOCK, 0);
5869 /* Default - can't decipher operation */
5876 if (pos > 0) /* need to restore position of the handle */
5877 PerlLIO_lseek(fd, pos, SEEK_SET); /* ignore error here */
5882 #endif /* LOCKF_EMULATE_FLOCK */
5885 * ex: set ts=8 sts=4 sw=4 et: