3 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 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 * "Very useful, no doubt, that was to Saruman; yet it seems that he was
13 * not content." --Gandalf
16 /* This file contains assorted utility routines.
17 * Which is a polite way of saying any stuff that people couldn't think of
18 * a better place for. Amongst other things, it includes the warning and
19 * dieing stuff, plus wrappers for malloc code.
23 #define PERL_IN_UTIL_C
29 # define SIG_ERR ((Sighandler_t) -1)
34 /* Missing protos on LynxOS */
39 # include <sys/wait.h>
44 # include <sys/select.h>
50 #if defined(HAS_FCNTL) && defined(F_SETFD) && !defined(FD_CLOEXEC)
51 # define FD_CLOEXEC 1 /* NeXT needs this */
54 /* NOTE: Do not call the next three routines directly. Use the macros
55 * in handy.h, so that we can easily redefine everything to do tracking of
56 * allocated hunks back to the original New to track down any memory leaks.
57 * XXX This advice seems to be widely ignored :-( --AD August 1996.
64 /* Can't use PerlIO to write as it allocates memory */
65 PerlLIO_write(PerlIO_fileno(Perl_error_log),
66 PL_no_mem, strlen(PL_no_mem));
68 NORETURN_FUNCTION_END;
71 /* paranoid version of system's malloc() */
74 Perl_safesysmalloc(MEM_SIZE size)
80 PerlIO_printf(Perl_error_log,
81 "Allocation too large: %lx\n", size) FLUSH;
84 #endif /* HAS_64K_LIMIT */
85 #ifdef PERL_TRACK_MEMPOOL
90 Perl_croak_nocontext("panic: malloc");
92 ptr = (Malloc_t)PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
93 PERL_ALLOC_CHECK(ptr);
94 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) malloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
96 #ifdef PERL_TRACK_MEMPOOL
97 struct perl_memory_debug_header *const header
98 = (struct perl_memory_debug_header *)ptr;
102 PoisonNew(((char *)ptr), size, char);
105 #ifdef PERL_TRACK_MEMPOOL
106 header->interpreter = aTHX;
107 /* Link us into the list. */
108 header->prev = &PL_memory_debug_header;
109 header->next = PL_memory_debug_header.next;
110 PL_memory_debug_header.next = header;
111 header->next->prev = header;
115 ptr = (Malloc_t)((char*)ptr+sTHX);
122 return write_no_mem();
127 /* paranoid version of system's realloc() */
130 Perl_safesysrealloc(Malloc_t where,MEM_SIZE size)
134 #if !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) && !defined(PERL_MICRO)
135 Malloc_t PerlMem_realloc();
136 #endif /* !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) */
140 PerlIO_printf(Perl_error_log,
141 "Reallocation too large: %lx\n", size) FLUSH;
144 #endif /* HAS_64K_LIMIT */
151 return safesysmalloc(size);
152 #ifdef PERL_TRACK_MEMPOOL
153 where = (Malloc_t)((char*)where-sTHX);
156 struct perl_memory_debug_header *const header
157 = (struct perl_memory_debug_header *)where;
159 if (header->interpreter != aTHX) {
160 Perl_croak_nocontext("panic: realloc from wrong pool");
162 assert(header->next->prev == header);
163 assert(header->prev->next == header);
165 if (header->size > size) {
166 const MEM_SIZE freed_up = header->size - size;
167 char *start_of_freed = ((char *)where) + size;
168 PoisonFree(start_of_freed, freed_up, char);
176 Perl_croak_nocontext("panic: realloc");
178 ptr = (Malloc_t)PerlMem_realloc(where,size);
179 PERL_ALLOC_CHECK(ptr);
181 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
182 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
185 #ifdef PERL_TRACK_MEMPOOL
186 struct perl_memory_debug_header *const header
187 = (struct perl_memory_debug_header *)ptr;
190 if (header->size < size) {
191 const MEM_SIZE fresh = size - header->size;
192 char *start_of_fresh = ((char *)ptr) + size;
193 PoisonNew(start_of_fresh, fresh, char);
197 header->next->prev = header;
198 header->prev->next = header;
200 ptr = (Malloc_t)((char*)ptr+sTHX);
207 return write_no_mem();
212 /* safe version of system's free() */
215 Perl_safesysfree(Malloc_t where)
217 #if defined(PERL_IMPLICIT_SYS) || defined(PERL_TRACK_MEMPOOL)
222 DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) free\n",PTR2UV(where),(long)PL_an++));
224 #ifdef PERL_TRACK_MEMPOOL
225 where = (Malloc_t)((char*)where-sTHX);
227 struct perl_memory_debug_header *const header
228 = (struct perl_memory_debug_header *)where;
230 if (header->interpreter != aTHX) {
231 Perl_croak_nocontext("panic: free from wrong pool");
234 Perl_croak_nocontext("panic: duplicate free");
236 if (!(header->next) || header->next->prev != header
237 || header->prev->next != header) {
238 Perl_croak_nocontext("panic: bad free");
240 /* Unlink us from the chain. */
241 header->next->prev = header->prev;
242 header->prev->next = header->next;
244 PoisonNew(where, header->size, char);
246 /* Trigger the duplicate free warning. */
254 /* safe version of system's calloc() */
257 Perl_safesyscalloc(MEM_SIZE count, MEM_SIZE size)
263 if (size * count > 0xffff) {
264 PerlIO_printf(Perl_error_log,
265 "Allocation too large: %lx\n", size * count) FLUSH;
268 #endif /* HAS_64K_LIMIT */
270 if ((long)size < 0 || (long)count < 0)
271 Perl_croak_nocontext("panic: calloc");
274 #ifdef PERL_TRACK_MEMPOOL
277 ptr = (Malloc_t)PerlMem_malloc(size?size:1); /* malloc(0) is NASTY on our system */
278 PERL_ALLOC_CHECK(ptr);
279 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) calloc %ld x %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)count,(long)size));
281 memset((void*)ptr, 0, size);
282 #ifdef PERL_TRACK_MEMPOOL
284 struct perl_memory_debug_header *const header
285 = (struct perl_memory_debug_header *)ptr;
287 header->interpreter = aTHX;
288 /* Link us into the list. */
289 header->prev = &PL_memory_debug_header;
290 header->next = PL_memory_debug_header.next;
291 PL_memory_debug_header.next = header;
292 header->next->prev = header;
296 ptr = (Malloc_t)((char*)ptr+sTHX);
303 return write_no_mem();
306 /* These must be defined when not using Perl's malloc for binary
311 Malloc_t Perl_malloc (MEM_SIZE nbytes)
314 return (Malloc_t)PerlMem_malloc(nbytes);
317 Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size)
320 return (Malloc_t)PerlMem_calloc(elements, size);
323 Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes)
326 return (Malloc_t)PerlMem_realloc(where, nbytes);
329 Free_t Perl_mfree (Malloc_t where)
337 /* copy a string up to some (non-backslashed) delimiter, if any */
340 Perl_delimcpy(pTHX_ register char *to, register const char *toend, register const char *from, register const char *fromend, register int delim, I32 *retlen)
345 for (tolen = 0; from < fromend; from++, tolen++) {
347 if (from[1] != delim) {
354 else if (*from == delim)
365 /* return ptr to little string in big string, NULL if not found */
366 /* This routine was donated by Corey Satten. */
369 Perl_instr(pTHX_ register const char *big, register const char *little)
380 register const char *s, *x;
383 for (x=big,s=little; *s; /**/ ) {
394 return (char*)(big-1);
399 /* same as instr but allow embedded nulls */
402 Perl_ninstr(pTHX_ const char *big, const char *bigend, const char *little, const char *lend)
408 char first = *little++;
410 bigend -= lend - little;
412 while (big <= bigend) {
415 for (x=big,s=little; s < lend; x++,s++) {
419 return (char*)(big-1);
425 /* reverse of the above--find last substring */
428 Perl_rninstr(pTHX_ register const char *big, const char *bigend, const char *little, const char *lend)
430 register const char *bigbeg;
431 register const I32 first = *little;
432 register const char * const littleend = lend;
435 if (little >= littleend)
436 return (char*)bigend;
438 big = bigend - (littleend - little++);
439 while (big >= bigbeg) {
440 register const char *s, *x;
443 for (x=big+2,s=little; s < littleend; /**/ ) {
452 return (char*)(big+1);
457 /* As a space optimization, we do not compile tables for strings of length
458 0 and 1, and for strings of length 2 unless FBMcf_TAIL. These are
459 special-cased in fbm_instr().
461 If FBMcf_TAIL, the table is created as if the string has a trailing \n. */
464 =head1 Miscellaneous Functions
466 =for apidoc fbm_compile
468 Analyses the string in order to make fast searches on it using fbm_instr()
469 -- the Boyer-Moore algorithm.
475 Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
478 register const U8 *s;
484 if (flags & FBMcf_TAIL) {
485 MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
486 sv_catpvs(sv, "\n"); /* Taken into account in fbm_instr() */
487 if (mg && mg->mg_len >= 0)
490 s = (U8*)SvPV_force_mutable(sv, len);
491 if (len == 0) /* TAIL might be on a zero-length string. */
493 SvUPGRADE(sv, SVt_PVGV);
498 const unsigned char *sb;
499 const U8 mlen = (len>255) ? 255 : (U8)len;
502 Sv_Grow(sv, len + 256 + PERL_FBM_TABLE_OFFSET);
504 = (unsigned char*)(SvPVX_mutable(sv) + len + PERL_FBM_TABLE_OFFSET);
505 s = table - 1 - PERL_FBM_TABLE_OFFSET; /* last char */
506 memset((void*)table, mlen, 256);
507 BmFLAGS(sv) = (U8)flags;
509 sb = s - mlen + 1; /* first char (maybe) */
511 if (table[*s] == mlen)
516 Sv_Grow(sv, len + PERL_FBM_TABLE_OFFSET);
518 sv_magic(sv, NULL, PERL_MAGIC_bm, NULL, 0); /* deep magic */
520 s = (const unsigned char*)(SvPVX_const(sv)); /* deeper magic */
521 for (i = 0; i < len; i++) {
522 if (PL_freq[s[i]] < frequency) {
524 frequency = PL_freq[s[i]];
527 BmRARE(sv) = s[rarest];
528 BmPREVIOUS(sv) = rarest;
529 BmUSEFUL(sv) = 100; /* Initial value */
530 if (flags & FBMcf_TAIL)
532 DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %lu\n",
533 BmRARE(sv),(unsigned long)BmPREVIOUS(sv)));
536 /* If SvTAIL(littlestr), it has a fake '\n' at end. */
537 /* If SvTAIL is actually due to \Z or \z, this gives false positives
541 =for apidoc fbm_instr
543 Returns the location of the SV in the string delimited by C<str> and
544 C<strend>. It returns C<NULL> if the string can't be found. The C<sv>
545 does not have to be fbm_compiled, but the search will not be as fast
552 Perl_fbm_instr(pTHX_ unsigned char *big, register unsigned char *bigend, SV *littlestr, U32 flags)
554 register unsigned char *s;
556 register const unsigned char *little
557 = (const unsigned char *)SvPV_const(littlestr,l);
558 register STRLEN littlelen = l;
559 register const I32 multiline = flags & FBMrf_MULTILINE;
561 if ((STRLEN)(bigend - big) < littlelen) {
562 if ( SvTAIL(littlestr)
563 && ((STRLEN)(bigend - big) == littlelen - 1)
565 || (*big == *little &&
566 memEQ((char *)big, (char *)little, littlelen - 1))))
571 if (littlelen <= 2) { /* Special-cased */
573 if (littlelen == 1) {
574 if (SvTAIL(littlestr) && !multiline) { /* Anchor only! */
575 /* Know that bigend != big. */
576 if (bigend[-1] == '\n')
577 return (char *)(bigend - 1);
578 return (char *) bigend;
586 if (SvTAIL(littlestr))
587 return (char *) bigend;
591 return (char*)big; /* Cannot be SvTAIL! */
594 if (SvTAIL(littlestr) && !multiline) {
595 if (bigend[-1] == '\n' && bigend[-2] == *little)
596 return (char*)bigend - 2;
597 if (bigend[-1] == *little)
598 return (char*)bigend - 1;
602 /* This should be better than FBM if c1 == c2, and almost
603 as good otherwise: maybe better since we do less indirection.
604 And we save a lot of memory by caching no table. */
605 const unsigned char c1 = little[0];
606 const unsigned char c2 = little[1];
611 while (s <= bigend) {
621 goto check_1char_anchor;
632 goto check_1char_anchor;
635 while (s <= bigend) {
640 goto check_1char_anchor;
649 check_1char_anchor: /* One char and anchor! */
650 if (SvTAIL(littlestr) && (*bigend == *little))
651 return (char *)bigend; /* bigend is already decremented. */
654 if (SvTAIL(littlestr) && !multiline) { /* tail anchored? */
655 s = bigend - littlelen;
656 if (s >= big && bigend[-1] == '\n' && *s == *little
657 /* Automatically of length > 2 */
658 && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
660 return (char*)s; /* how sweet it is */
663 && memEQ((char*)s + 2, (char*)little + 1, littlelen - 2))
665 return (char*)s + 1; /* how sweet it is */
669 if (!SvVALID(littlestr)) {
670 char * const b = ninstr((char*)big,(char*)bigend,
671 (char*)little, (char*)little + littlelen);
673 if (!b && SvTAIL(littlestr)) { /* Automatically multiline! */
674 /* Chop \n from littlestr: */
675 s = bigend - littlelen + 1;
677 && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
687 if (littlelen > (STRLEN)(bigend - big))
691 register const unsigned char * const table
692 = little + littlelen + PERL_FBM_TABLE_OFFSET;
693 register const unsigned char *oldlittle;
695 --littlelen; /* Last char found by table lookup */
698 little += littlelen; /* last char */
704 if ((tmp = table[*s])) {
705 if ((s += tmp) < bigend)
709 else { /* less expensive than calling strncmp() */
710 register unsigned char * const olds = s;
715 if (*--s == *--little)
717 s = olds + 1; /* here we pay the price for failure */
719 if (s < bigend) /* fake up continue to outer loop */
728 && (BmFLAGS(littlestr) & FBMcf_TAIL)
729 && memEQ((char *)(bigend - littlelen),
730 (char *)(oldlittle - littlelen), littlelen) )
731 return (char*)bigend - littlelen;
736 /* start_shift, end_shift are positive quantities which give offsets
737 of ends of some substring of bigstr.
738 If "last" we want the last occurrence.
739 old_posp is the way of communication between consequent calls if
740 the next call needs to find the .
741 The initial *old_posp should be -1.
743 Note that we take into account SvTAIL, so one can get extra
744 optimizations if _ALL flag is set.
747 /* If SvTAIL is actually due to \Z or \z, this gives false positives
748 if PL_multiline. In fact if !PL_multiline the authoritative answer
749 is not supported yet. */
752 Perl_screaminstr(pTHX_ SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift, I32 *old_posp, I32 last)
755 register const unsigned char *big;
757 register I32 previous;
759 register const unsigned char *little;
760 register I32 stop_pos;
761 register const unsigned char *littleend;
764 assert(SvTYPE(littlestr) == SVt_PVGV);
765 assert(SvVALID(littlestr));
768 ? (pos = PL_screamfirst[BmRARE(littlestr)]) < 0
769 : (((pos = *old_posp), pos += PL_screamnext[pos]) == 0)) {
771 if ( BmRARE(littlestr) == '\n'
772 && BmPREVIOUS(littlestr) == SvCUR(littlestr) - 1) {
773 little = (const unsigned char *)(SvPVX_const(littlestr));
774 littleend = little + SvCUR(littlestr);
781 little = (const unsigned char *)(SvPVX_const(littlestr));
782 littleend = little + SvCUR(littlestr);
784 /* The value of pos we can start at: */
785 previous = BmPREVIOUS(littlestr);
786 big = (const unsigned char *)(SvPVX_const(bigstr));
787 /* The value of pos we can stop at: */
788 stop_pos = SvCUR(bigstr) - end_shift - (SvCUR(littlestr) - 1 - previous);
789 if (previous + start_shift > stop_pos) {
791 stop_pos does not include SvTAIL in the count, so this check is incorrect
792 (I think) - see [ID 20010618.006] and t/op/study.t. HVDS 2001/06/19
795 if (previous + start_shift == stop_pos + 1) /* A fake '\n'? */
800 while (pos < previous + start_shift) {
801 if (!(pos += PL_screamnext[pos]))
806 register const unsigned char *s, *x;
807 if (pos >= stop_pos) break;
808 if (big[pos] != first)
810 for (x=big+pos+1,s=little; s < littleend; /**/ ) {
816 if (s == littleend) {
818 if (!last) return (char *)(big+pos);
821 } while ( pos += PL_screamnext[pos] );
823 return (char *)(big+(*old_posp));
825 if (!SvTAIL(littlestr) || (end_shift > 0))
827 /* Ignore the trailing "\n". This code is not microoptimized */
828 big = (const unsigned char *)(SvPVX_const(bigstr) + SvCUR(bigstr));
829 stop_pos = littleend - little; /* Actual littlestr len */
834 && ((stop_pos == 1) ||
835 memEQ((char *)(big + 1), (char *)little, stop_pos - 1)))
841 Perl_ibcmp(pTHX_ const char *s1, const char *s2, register I32 len)
843 register const U8 *a = (const U8 *)s1;
844 register const U8 *b = (const U8 *)s2;
848 if (*a != *b && *a != PL_fold[*b])
856 Perl_ibcmp_locale(pTHX_ const char *s1, const char *s2, register I32 len)
859 register const U8 *a = (const U8 *)s1;
860 register const U8 *b = (const U8 *)s2;
864 if (*a != *b && *a != PL_fold_locale[*b])
871 /* copy a string to a safe spot */
874 =head1 Memory Management
878 Perl's version of C<strdup()>. Returns a pointer to a newly allocated
879 string which is a duplicate of C<pv>. The size of the string is
880 determined by C<strlen()>. The memory allocated for the new string can
881 be freed with the C<Safefree()> function.
887 Perl_savepv(pTHX_ const char *pv)
894 const STRLEN pvlen = strlen(pv)+1;
895 Newx(newaddr, pvlen, char);
896 return (char*)memcpy(newaddr, pv, pvlen);
900 /* same thing but with a known length */
905 Perl's version of what C<strndup()> would be if it existed. Returns a
906 pointer to a newly allocated string which is a duplicate of the first
907 C<len> bytes from C<pv>, plus a trailing NUL byte. The memory allocated for
908 the new string can be freed with the C<Safefree()> function.
914 Perl_savepvn(pTHX_ const char *pv, register I32 len)
916 register char *newaddr;
919 Newx(newaddr,len+1,char);
920 /* Give a meaning to NULL pointer mainly for the use in sv_magic() */
922 /* might not be null terminated */
924 return (char *) CopyD(pv,newaddr,len,char);
927 return (char *) ZeroD(newaddr,len+1,char);
932 =for apidoc savesharedpv
934 A version of C<savepv()> which allocates the duplicate string in memory
935 which is shared between threads.
940 Perl_savesharedpv(pTHX_ const char *pv)
942 register char *newaddr;
947 pvlen = strlen(pv)+1;
948 newaddr = (char*)PerlMemShared_malloc(pvlen);
950 return write_no_mem();
952 return (char*)memcpy(newaddr, pv, pvlen);
958 A version of C<savepv()>/C<savepvn()> which gets the string to duplicate from
959 the passed in SV using C<SvPV()>
965 Perl_savesvpv(pTHX_ SV *sv)
968 const char * const pv = SvPV_const(sv, len);
969 register char *newaddr;
972 Newx(newaddr,len,char);
973 return (char *) CopyD(pv,newaddr,len,char);
977 /* the SV for Perl_form() and mess() is not kept in an arena */
987 return sv_2mortal(newSVpvs(""));
992 /* Create as PVMG now, to avoid any upgrading later */
994 Newxz(any, 1, XPVMG);
995 SvFLAGS(sv) = SVt_PVMG;
996 SvANY(sv) = (void*)any;
998 SvREFCNT(sv) = 1 << 30; /* practically infinite */
1003 #if defined(PERL_IMPLICIT_CONTEXT)
1005 Perl_form_nocontext(const char* pat, ...)
1010 va_start(args, pat);
1011 retval = vform(pat, &args);
1015 #endif /* PERL_IMPLICIT_CONTEXT */
1018 =head1 Miscellaneous Functions
1021 Takes a sprintf-style format pattern and conventional
1022 (non-SV) arguments and returns the formatted string.
1024 (char *) Perl_form(pTHX_ const char* pat, ...)
1026 can be used any place a string (char *) is required:
1028 char * s = Perl_form("%d.%d",major,minor);
1030 Uses a single private buffer so if you want to format several strings you
1031 must explicitly copy the earlier strings away (and free the copies when you
1038 Perl_form(pTHX_ const char* pat, ...)
1042 va_start(args, pat);
1043 retval = vform(pat, &args);
1049 Perl_vform(pTHX_ const char *pat, va_list *args)
1051 SV * const sv = mess_alloc();
1052 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
1056 #if defined(PERL_IMPLICIT_CONTEXT)
1058 Perl_mess_nocontext(const char *pat, ...)
1063 va_start(args, pat);
1064 retval = vmess(pat, &args);
1068 #endif /* PERL_IMPLICIT_CONTEXT */
1071 Perl_mess(pTHX_ const char *pat, ...)
1075 va_start(args, pat);
1076 retval = vmess(pat, &args);
1082 S_closest_cop(pTHX_ const COP *cop, const OP *o)
1085 /* Look for PL_op starting from o. cop is the last COP we've seen. */
1087 if (!o || o == PL_op)
1090 if (o->op_flags & OPf_KIDS) {
1092 for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
1095 /* If the OP_NEXTSTATE has been optimised away we can still use it
1096 * the get the file and line number. */
1098 if (kid->op_type == OP_NULL && kid->op_targ == OP_NEXTSTATE)
1099 cop = (const COP *)kid;
1101 /* Keep searching, and return when we've found something. */
1103 new_cop = closest_cop(cop, kid);
1109 /* Nothing found. */
1115 Perl_vmess(pTHX_ const char *pat, va_list *args)
1118 SV * const sv = mess_alloc();
1120 sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
1121 if (!SvCUR(sv) || *(SvEND(sv) - 1) != '\n') {
1123 * Try and find the file and line for PL_op. This will usually be
1124 * PL_curcop, but it might be a cop that has been optimised away. We
1125 * can try to find such a cop by searching through the optree starting
1126 * from the sibling of PL_curcop.
1129 const COP *cop = closest_cop(PL_curcop, PL_curcop->op_sibling);
1134 Perl_sv_catpvf(aTHX_ sv, " at %s line %"IVdf,
1135 OutCopFILE(cop), (IV)CopLINE(cop));
1136 if (GvIO(PL_last_in_gv) && IoLINES(GvIOp(PL_last_in_gv))) {
1137 const bool line_mode = (RsSIMPLE(PL_rs) &&
1138 SvCUR(PL_rs) == 1 && *SvPVX_const(PL_rs) == '\n');
1139 Perl_sv_catpvf(aTHX_ sv, ", <%s> %s %"IVdf,
1140 PL_last_in_gv == PL_argvgv ? "" : GvNAME(PL_last_in_gv),
1141 line_mode ? "line" : "chunk",
1142 (IV)IoLINES(GvIOp(PL_last_in_gv)));
1145 sv_catpvs(sv, " during global destruction");
1146 sv_catpvs(sv, ".\n");
1152 Perl_write_to_stderr(pTHX_ const char* message, int msglen)
1158 if (PL_stderrgv && SvREFCNT(PL_stderrgv)
1159 && (io = GvIO(PL_stderrgv))
1160 && (mg = SvTIED_mg((SV*)io, PERL_MAGIC_tiedscalar)))
1167 SAVESPTR(PL_stderrgv);
1170 PUSHSTACKi(PERLSI_MAGIC);
1174 PUSHs(SvTIED_obj((SV*)io, mg));
1175 PUSHs(sv_2mortal(newSVpvn(message, msglen)));
1177 call_method("PRINT", G_SCALAR);
1185 /* SFIO can really mess with your errno */
1186 const int e = errno;
1188 PerlIO * const serr = Perl_error_log;
1190 PERL_WRITE_MSG_TO_CONSOLE(serr, message, msglen);
1191 (void)PerlIO_flush(serr);
1198 /* Common code used by vcroak, vdie, vwarn and vwarner */
1201 S_vdie_common(pTHX_ const char *message, STRLEN msglen, I32 utf8, bool warn)
1207 SV **const hook = warn ? &PL_warnhook : &PL_diehook;
1208 /* sv_2cv might call Perl_croak() or Perl_warner() */
1209 SV * const oldhook = *hook;
1216 cv = sv_2cv(oldhook, &stash, &gv, 0);
1218 if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
1228 if (warn || message) {
1229 msg = newSVpvn(message, msglen);
1230 SvFLAGS(msg) |= utf8;
1238 PUSHSTACKi(warn ? PERLSI_WARNHOOK : PERLSI_DIEHOOK);
1242 call_sv((SV*)cv, G_DISCARD);
1251 S_vdie_croak_common(pTHX_ const char* pat, va_list* args, STRLEN* msglen,
1255 const char *message;
1258 SV * const msv = vmess(pat, args);
1259 if (PL_errors && SvCUR(PL_errors)) {
1260 sv_catsv(PL_errors, msv);
1261 message = SvPV_const(PL_errors, *msglen);
1262 SvCUR_set(PL_errors, 0);
1265 message = SvPV_const(msv,*msglen);
1266 *utf8 = SvUTF8(msv);
1272 DEBUG_S(PerlIO_printf(Perl_debug_log,
1273 "%p: die/croak: message = %s\ndiehook = %p\n",
1274 (void*)thr, message, (void*)PL_diehook));
1276 S_vdie_common(aTHX_ message, *msglen, *utf8, FALSE);
1282 Perl_vdie(pTHX_ const char* pat, va_list *args)
1285 const char *message;
1286 const int was_in_eval = PL_in_eval;
1290 DEBUG_S(PerlIO_printf(Perl_debug_log,
1291 "%p: die: curstack = %p, mainstack = %p\n",
1292 (void*)thr, (void*)PL_curstack, (void*)PL_mainstack));
1294 message = vdie_croak_common(pat, args, &msglen, &utf8);
1296 PL_restartop = die_where(message, msglen);
1297 SvFLAGS(ERRSV) |= utf8;
1298 DEBUG_S(PerlIO_printf(Perl_debug_log,
1299 "%p: die: restartop = %p, was_in_eval = %d, top_env = %p\n",
1300 (void*)thr, (void*)PL_restartop, was_in_eval, (void*)PL_top_env));
1301 if ((!PL_restartop && was_in_eval) || PL_top_env->je_prev)
1303 return PL_restartop;
1306 #if defined(PERL_IMPLICIT_CONTEXT)
1308 Perl_die_nocontext(const char* pat, ...)
1313 va_start(args, pat);
1314 o = vdie(pat, &args);
1318 #endif /* PERL_IMPLICIT_CONTEXT */
1321 Perl_die(pTHX_ const char* pat, ...)
1325 va_start(args, pat);
1326 o = vdie(pat, &args);
1332 Perl_vcroak(pTHX_ const char* pat, va_list *args)
1335 const char *message;
1339 message = S_vdie_croak_common(aTHX_ pat, args, &msglen, &utf8);
1342 PL_restartop = die_where(message, msglen);
1343 SvFLAGS(ERRSV) |= utf8;
1347 message = SvPVx_const(ERRSV, msglen);
1349 write_to_stderr(message, msglen);
1353 #if defined(PERL_IMPLICIT_CONTEXT)
1355 Perl_croak_nocontext(const char *pat, ...)
1359 va_start(args, pat);
1364 #endif /* PERL_IMPLICIT_CONTEXT */
1367 =head1 Warning and Dieing
1371 This is the XSUB-writer's interface to Perl's C<die> function.
1372 Normally call this function the same way you call the C C<printf>
1373 function. Calling C<croak> returns control directly to Perl,
1374 sidestepping the normal C order of execution. See C<warn>.
1376 If you want to throw an exception object, assign the object to
1377 C<$@> and then pass C<NULL> to croak():
1379 errsv = get_sv("@", TRUE);
1380 sv_setsv(errsv, exception_object);
1387 Perl_croak(pTHX_ const char *pat, ...)
1390 va_start(args, pat);
1397 Perl_vwarn(pTHX_ const char* pat, va_list *args)
1401 SV * const msv = vmess(pat, args);
1402 const I32 utf8 = SvUTF8(msv);
1403 const char * const message = SvPV_const(msv, msglen);
1406 if (vdie_common(message, msglen, utf8, TRUE))
1410 write_to_stderr(message, msglen);
1413 #if defined(PERL_IMPLICIT_CONTEXT)
1415 Perl_warn_nocontext(const char *pat, ...)
1419 va_start(args, pat);
1423 #endif /* PERL_IMPLICIT_CONTEXT */
1428 This is the XSUB-writer's interface to Perl's C<warn> function. Call this
1429 function the same way you call the C C<printf> function. See C<croak>.
1435 Perl_warn(pTHX_ const char *pat, ...)
1438 va_start(args, pat);
1443 #if defined(PERL_IMPLICIT_CONTEXT)
1445 Perl_warner_nocontext(U32 err, const char *pat, ...)
1449 va_start(args, pat);
1450 vwarner(err, pat, &args);
1453 #endif /* PERL_IMPLICIT_CONTEXT */
1456 Perl_warner(pTHX_ U32 err, const char* pat,...)
1459 va_start(args, pat);
1460 vwarner(err, pat, &args);
1465 Perl_vwarner(pTHX_ U32 err, const char* pat, va_list* args)
1468 if (PL_warnhook == PERL_WARNHOOK_FATAL || ckDEAD(err)) {
1469 SV * const msv = vmess(pat, args);
1471 const char * const message = SvPV_const(msv, msglen);
1472 const I32 utf8 = SvUTF8(msv);
1476 S_vdie_common(aTHX_ message, msglen, utf8, FALSE);
1479 PL_restartop = die_where(message, msglen);
1480 SvFLAGS(ERRSV) |= utf8;
1483 write_to_stderr(message, msglen);
1487 Perl_vwarn(aTHX_ pat, args);
1491 /* implements the ckWARN? macros */
1494 Perl_ckwarn(pTHX_ U32 w)
1500 && PL_curcop->cop_warnings != pWARN_NONE
1502 PL_curcop->cop_warnings == pWARN_ALL
1503 || isWARN_on(PL_curcop->cop_warnings, unpackWARN1(w))
1504 || (unpackWARN2(w) &&
1505 isWARN_on(PL_curcop->cop_warnings, unpackWARN2(w)))
1506 || (unpackWARN3(w) &&
1507 isWARN_on(PL_curcop->cop_warnings, unpackWARN3(w)))
1508 || (unpackWARN4(w) &&
1509 isWARN_on(PL_curcop->cop_warnings, unpackWARN4(w)))
1514 isLEXWARN_off && PL_dowarn & G_WARN_ON
1519 /* implements the ckWARN?_d macro */
1522 Perl_ckwarn_d(pTHX_ U32 w)
1527 || PL_curcop->cop_warnings == pWARN_ALL
1529 PL_curcop->cop_warnings != pWARN_NONE
1531 isWARN_on(PL_curcop->cop_warnings, unpackWARN1(w))
1532 || (unpackWARN2(w) &&
1533 isWARN_on(PL_curcop->cop_warnings, unpackWARN2(w)))
1534 || (unpackWARN3(w) &&
1535 isWARN_on(PL_curcop->cop_warnings, unpackWARN3(w)))
1536 || (unpackWARN4(w) &&
1537 isWARN_on(PL_curcop->cop_warnings, unpackWARN4(w)))
1543 /* Set buffer=NULL to get a new one. */
1545 Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
1547 const MEM_SIZE len_wanted = sizeof(STRLEN) + size;
1548 PERL_UNUSED_CONTEXT;
1551 (specialWARN(buffer) ?
1552 PerlMemShared_malloc(len_wanted) :
1553 PerlMemShared_realloc(buffer, len_wanted));
1555 Copy(bits, (buffer + 1), size, char);
1559 /* since we've already done strlen() for both nam and val
1560 * we can use that info to make things faster than
1561 * sprintf(s, "%s=%s", nam, val)
1563 #define my_setenv_format(s, nam, nlen, val, vlen) \
1564 Copy(nam, s, nlen, char); \
1566 Copy(val, s+(nlen+1), vlen, char); \
1567 *(s+(nlen+1+vlen)) = '\0'
1569 #ifdef USE_ENVIRON_ARRAY
1570 /* VMS' my_setenv() is in vms.c */
1571 #if !defined(WIN32) && !defined(NETWARE)
1573 Perl_my_setenv(pTHX_ const char *nam, const char *val)
1577 /* only parent thread can modify process environment */
1578 if (PL_curinterp == aTHX)
1581 #ifndef PERL_USE_SAFE_PUTENV
1582 if (!PL_use_safe_putenv) {
1583 /* most putenv()s leak, so we manipulate environ directly */
1584 register I32 i=setenv_getix(nam); /* where does it go? */
1587 if (environ == PL_origenviron) { /* need we copy environment? */
1593 while (environ[max])
1595 tmpenv = (char**)safesysmalloc((max+2) * sizeof(char*));
1596 for (j=0; j<max; j++) { /* copy environment */
1597 const int len = strlen(environ[j]);
1598 tmpenv[j] = (char*)safesysmalloc((len+1)*sizeof(char));
1599 Copy(environ[j], tmpenv[j], len+1, char);
1602 environ = tmpenv; /* tell exec where it is now */
1605 safesysfree(environ[i]);
1606 while (environ[i]) {
1607 environ[i] = environ[i+1];
1612 if (!environ[i]) { /* does not exist yet */
1613 environ = (char**)safesysrealloc(environ, (i+2) * sizeof(char*));
1614 environ[i+1] = NULL; /* make sure it's null terminated */
1617 safesysfree(environ[i]);
1621 environ[i] = (char*)safesysmalloc((nlen+vlen+2) * sizeof(char));
1622 /* all that work just for this */
1623 my_setenv_format(environ[i], nam, nlen, val, vlen);
1626 # if defined(__CYGWIN__) || defined(EPOC) || defined(__SYMBIAN32__) || defined(__riscos__)
1627 # if defined(HAS_UNSETENV)
1629 (void)unsetenv(nam);
1631 (void)setenv(nam, val, 1);
1633 # else /* ! HAS_UNSETENV */
1634 (void)setenv(nam, val, 1);
1635 # endif /* HAS_UNSETENV */
1637 # if defined(HAS_UNSETENV)
1639 (void)unsetenv(nam);
1641 const int nlen = strlen(nam);
1642 const int vlen = strlen(val);
1643 char * const new_env =
1644 (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
1645 my_setenv_format(new_env, nam, nlen, val, vlen);
1646 (void)putenv(new_env);
1648 # else /* ! HAS_UNSETENV */
1650 const int nlen = strlen(nam);
1656 new_env = (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
1657 /* all that work just for this */
1658 my_setenv_format(new_env, nam, nlen, val, vlen);
1659 (void)putenv(new_env);
1660 # endif /* HAS_UNSETENV */
1661 # endif /* __CYGWIN__ */
1662 #ifndef PERL_USE_SAFE_PUTENV
1668 #else /* WIN32 || NETWARE */
1671 Perl_my_setenv(pTHX_ const char *nam, const char *val)
1674 register char *envstr;
1675 const int nlen = strlen(nam);
1682 Newx(envstr, nlen+vlen+2, char);
1683 my_setenv_format(envstr, nam, nlen, val, vlen);
1684 (void)PerlEnv_putenv(envstr);
1688 #endif /* WIN32 || NETWARE */
1692 Perl_setenv_getix(pTHX_ const char *nam)
1695 register const I32 len = strlen(nam);
1696 PERL_UNUSED_CONTEXT;
1698 for (i = 0; environ[i]; i++) {
1701 strnicmp(environ[i],nam,len) == 0
1703 strnEQ(environ[i],nam,len)
1705 && environ[i][len] == '=')
1706 break; /* strnEQ must come first to avoid */
1707 } /* potential SEGV's */
1710 #endif /* !PERL_MICRO */
1712 #endif /* !VMS && !EPOC*/
1714 #ifdef UNLINK_ALL_VERSIONS
1716 Perl_unlnk(pTHX_ const char *f) /* unlink all versions of a file */
1720 while (PerlLIO_unlink(f) >= 0)
1722 return retries ? 0 : -1;
1726 /* this is a drop-in replacement for bcopy() */
1727 #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
1729 Perl_my_bcopy(register const char *from,register char *to,register I32 len)
1731 char * const retval = to;
1733 if (from - to >= 0) {
1741 *(--to) = *(--from);
1747 /* this is a drop-in replacement for memset() */
1750 Perl_my_memset(register char *loc, register I32 ch, register I32 len)
1752 char * const retval = loc;
1760 /* this is a drop-in replacement for bzero() */
1761 #if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
1763 Perl_my_bzero(register char *loc, register I32 len)
1765 char * const retval = loc;
1773 /* this is a drop-in replacement for memcmp() */
1774 #if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
1776 Perl_my_memcmp(const char *s1, const char *s2, register I32 len)
1778 register const U8 *a = (const U8 *)s1;
1779 register const U8 *b = (const U8 *)s2;
1783 if ((tmp = *a++ - *b++))
1788 #endif /* !HAS_MEMCMP || !HAS_SANE_MEMCMP */
1792 #ifdef USE_CHAR_VSPRINTF
1797 vsprintf(char *dest, const char *pat, char *args)
1801 fakebuf._ptr = dest;
1802 fakebuf._cnt = 32767;
1806 fakebuf._flag = _IOWRT|_IOSTRG;
1807 _doprnt(pat, args, &fakebuf); /* what a kludge */
1808 (void)putc('\0', &fakebuf);
1809 #ifdef USE_CHAR_VSPRINTF
1812 return 0; /* perl doesn't use return value */
1816 #endif /* HAS_VPRINTF */
1819 #if BYTEORDER != 0x4321
1821 Perl_my_swap(pTHX_ short s)
1823 #if (BYTEORDER & 1) == 0
1826 result = ((s & 255) << 8) + ((s >> 8) & 255);
1834 Perl_my_htonl(pTHX_ long l)
1838 char c[sizeof(long)];
1841 #if BYTEORDER == 0x1234
1842 u.c[0] = (l >> 24) & 255;
1843 u.c[1] = (l >> 16) & 255;
1844 u.c[2] = (l >> 8) & 255;
1848 #if ((BYTEORDER - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
1849 Perl_croak(aTHX_ "Unknown BYTEORDER\n");
1854 for (o = BYTEORDER - 0x1111, s = 0; s < (sizeof(long)*8); o >>= 4, s += 8) {
1855 u.c[o & 0xf] = (l >> s) & 255;
1863 Perl_my_ntohl(pTHX_ long l)
1867 char c[sizeof(long)];
1870 #if BYTEORDER == 0x1234
1871 u.c[0] = (l >> 24) & 255;
1872 u.c[1] = (l >> 16) & 255;
1873 u.c[2] = (l >> 8) & 255;
1877 #if ((BYTEORDER - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
1878 Perl_croak(aTHX_ "Unknown BYTEORDER\n");
1885 for (o = BYTEORDER - 0x1111, s = 0; s < (sizeof(long)*8); o >>= 4, s += 8) {
1886 l |= (u.c[o & 0xf] & 255) << s;
1893 #endif /* BYTEORDER != 0x4321 */
1897 * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'.
1898 * If these functions are defined,
1899 * the BYTEORDER is neither 0x1234 nor 0x4321.
1900 * However, this is not assumed.
1904 #define HTOLE(name,type) \
1906 name (register type n) \
1910 char c[sizeof(type)]; \
1913 register U32 s = 0; \
1914 for (i = 0; i < sizeof(u.c); i++, s += 8) { \
1915 u.c[i] = (n >> s) & 0xFF; \
1920 #define LETOH(name,type) \
1922 name (register type n) \
1926 char c[sizeof(type)]; \
1929 register U32 s = 0; \
1932 for (i = 0; i < sizeof(u.c); i++, s += 8) { \
1933 n |= ((type)(u.c[i] & 0xFF)) << s; \
1939 * Big-endian byte order functions.
1942 #define HTOBE(name,type) \
1944 name (register type n) \
1948 char c[sizeof(type)]; \
1951 register U32 s = 8*(sizeof(u.c)-1); \
1952 for (i = 0; i < sizeof(u.c); i++, s -= 8) { \
1953 u.c[i] = (n >> s) & 0xFF; \
1958 #define BETOH(name,type) \
1960 name (register type n) \
1964 char c[sizeof(type)]; \
1967 register U32 s = 8*(sizeof(u.c)-1); \
1970 for (i = 0; i < sizeof(u.c); i++, s -= 8) { \
1971 n |= ((type)(u.c[i] & 0xFF)) << s; \
1977 * If we just can't do it...
1980 #define NOT_AVAIL(name,type) \
1982 name (register type n) \
1984 Perl_croak_nocontext(#name "() not available"); \
1985 return n; /* not reached */ \
1989 #if defined(HAS_HTOVS) && !defined(htovs)
1992 #if defined(HAS_HTOVL) && !defined(htovl)
1995 #if defined(HAS_VTOHS) && !defined(vtohs)
1998 #if defined(HAS_VTOHL) && !defined(vtohl)
2002 #ifdef PERL_NEED_MY_HTOLE16
2004 HTOLE(Perl_my_htole16,U16)
2006 NOT_AVAIL(Perl_my_htole16,U16)
2009 #ifdef PERL_NEED_MY_LETOH16
2011 LETOH(Perl_my_letoh16,U16)
2013 NOT_AVAIL(Perl_my_letoh16,U16)
2016 #ifdef PERL_NEED_MY_HTOBE16
2018 HTOBE(Perl_my_htobe16,U16)
2020 NOT_AVAIL(Perl_my_htobe16,U16)
2023 #ifdef PERL_NEED_MY_BETOH16
2025 BETOH(Perl_my_betoh16,U16)
2027 NOT_AVAIL(Perl_my_betoh16,U16)
2031 #ifdef PERL_NEED_MY_HTOLE32
2033 HTOLE(Perl_my_htole32,U32)
2035 NOT_AVAIL(Perl_my_htole32,U32)
2038 #ifdef PERL_NEED_MY_LETOH32
2040 LETOH(Perl_my_letoh32,U32)
2042 NOT_AVAIL(Perl_my_letoh32,U32)
2045 #ifdef PERL_NEED_MY_HTOBE32
2047 HTOBE(Perl_my_htobe32,U32)
2049 NOT_AVAIL(Perl_my_htobe32,U32)
2052 #ifdef PERL_NEED_MY_BETOH32
2054 BETOH(Perl_my_betoh32,U32)
2056 NOT_AVAIL(Perl_my_betoh32,U32)
2060 #ifdef PERL_NEED_MY_HTOLE64
2062 HTOLE(Perl_my_htole64,U64)
2064 NOT_AVAIL(Perl_my_htole64,U64)
2067 #ifdef PERL_NEED_MY_LETOH64
2069 LETOH(Perl_my_letoh64,U64)
2071 NOT_AVAIL(Perl_my_letoh64,U64)
2074 #ifdef PERL_NEED_MY_HTOBE64
2076 HTOBE(Perl_my_htobe64,U64)
2078 NOT_AVAIL(Perl_my_htobe64,U64)
2081 #ifdef PERL_NEED_MY_BETOH64
2083 BETOH(Perl_my_betoh64,U64)
2085 NOT_AVAIL(Perl_my_betoh64,U64)
2089 #ifdef PERL_NEED_MY_HTOLES
2090 HTOLE(Perl_my_htoles,short)
2092 #ifdef PERL_NEED_MY_LETOHS
2093 LETOH(Perl_my_letohs,short)
2095 #ifdef PERL_NEED_MY_HTOBES
2096 HTOBE(Perl_my_htobes,short)
2098 #ifdef PERL_NEED_MY_BETOHS
2099 BETOH(Perl_my_betohs,short)
2102 #ifdef PERL_NEED_MY_HTOLEI
2103 HTOLE(Perl_my_htolei,int)
2105 #ifdef PERL_NEED_MY_LETOHI
2106 LETOH(Perl_my_letohi,int)
2108 #ifdef PERL_NEED_MY_HTOBEI
2109 HTOBE(Perl_my_htobei,int)
2111 #ifdef PERL_NEED_MY_BETOHI
2112 BETOH(Perl_my_betohi,int)
2115 #ifdef PERL_NEED_MY_HTOLEL
2116 HTOLE(Perl_my_htolel,long)
2118 #ifdef PERL_NEED_MY_LETOHL
2119 LETOH(Perl_my_letohl,long)
2121 #ifdef PERL_NEED_MY_HTOBEL
2122 HTOBE(Perl_my_htobel,long)
2124 #ifdef PERL_NEED_MY_BETOHL
2125 BETOH(Perl_my_betohl,long)
2129 Perl_my_swabn(void *ptr, int n)
2131 register char *s = (char *)ptr;
2132 register char *e = s + (n-1);
2135 for (n /= 2; n > 0; s++, e--, n--) {
2143 Perl_my_popen_list(pTHX_ char *mode, int n, SV **args)
2145 #if (!defined(DOSISH) || defined(HAS_FORK) || defined(AMIGAOS)) && !defined(OS2) && !defined(VMS) && !defined(__OPEN_VM) && !defined(EPOC) && !defined(MACOS_TRADITIONAL) && !defined(NETWARE)
2148 register I32 This, that;
2154 PERL_FLUSHALL_FOR_CHILD;
2155 This = (*mode == 'w');
2159 taint_proper("Insecure %s%s", "EXEC");
2161 if (PerlProc_pipe(p) < 0)
2163 /* Try for another pipe pair for error return */
2164 if (PerlProc_pipe(pp) >= 0)
2166 while ((pid = PerlProc_fork()) < 0) {
2167 if (errno != EAGAIN) {
2168 PerlLIO_close(p[This]);
2169 PerlLIO_close(p[that]);
2171 PerlLIO_close(pp[0]);
2172 PerlLIO_close(pp[1]);
2184 /* Close parent's end of error status pipe (if any) */
2186 PerlLIO_close(pp[0]);
2187 #if defined(HAS_FCNTL) && defined(F_SETFD)
2188 /* Close error pipe automatically if exec works */
2189 fcntl(pp[1], F_SETFD, FD_CLOEXEC);
2192 /* Now dup our end of _the_ pipe to right position */
2193 if (p[THIS] != (*mode == 'r')) {
2194 PerlLIO_dup2(p[THIS], *mode == 'r');
2195 PerlLIO_close(p[THIS]);
2196 if (p[THAT] != (*mode == 'r')) /* if dup2() didn't close it */
2197 PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
2200 PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
2201 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
2202 /* No automatic close - do it by hand */
2209 for (fd = PL_maxsysfd + 1; fd < NOFILE; fd++) {
2215 do_aexec5(NULL, args-1, args-1+n, pp[1], did_pipes);
2221 do_execfree(); /* free any memory malloced by child on fork */
2223 PerlLIO_close(pp[1]);
2224 /* Keep the lower of the two fd numbers */
2225 if (p[that] < p[This]) {
2226 PerlLIO_dup2(p[This], p[that]);
2227 PerlLIO_close(p[This]);
2231 PerlLIO_close(p[that]); /* close child's end of pipe */
2234 sv = *av_fetch(PL_fdpid,p[This],TRUE);
2236 SvUPGRADE(sv,SVt_IV);
2238 PL_forkprocess = pid;
2239 /* If we managed to get status pipe check for exec fail */
2240 if (did_pipes && pid > 0) {
2245 while (n < sizeof(int)) {
2246 n1 = PerlLIO_read(pp[0],
2247 (void*)(((char*)&errkid)+n),
2253 PerlLIO_close(pp[0]);
2255 if (n) { /* Error */
2257 PerlLIO_close(p[This]);
2258 if (n != sizeof(int))
2259 Perl_croak(aTHX_ "panic: kid popen errno read");
2261 pid2 = wait4pid(pid, &status, 0);
2262 } while (pid2 == -1 && errno == EINTR);
2263 errno = errkid; /* Propagate errno from kid */
2268 PerlLIO_close(pp[0]);
2269 return PerlIO_fdopen(p[This], mode);
2271 # ifdef OS2 /* Same, without fork()ing and all extra overhead... */
2272 return my_syspopen4(aTHX_ Nullch, mode, n, args);
2274 Perl_croak(aTHX_ "List form of piped open not implemented");
2275 return (PerlIO *) NULL;
2280 /* VMS' my_popen() is in VMS.c, same with OS/2. */
2281 #if (!defined(DOSISH) || defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(__OPEN_VM) && !defined(EPOC) && !defined(MACOS_TRADITIONAL)
2283 Perl_my_popen(pTHX_ const char *cmd, const char *mode)
2287 register I32 This, that;
2290 const I32 doexec = !(*cmd == '-' && cmd[1] == '\0');
2294 PERL_FLUSHALL_FOR_CHILD;
2297 return my_syspopen(aTHX_ cmd,mode);
2300 This = (*mode == 'w');
2302 if (doexec && PL_tainting) {
2304 taint_proper("Insecure %s%s", "EXEC");
2306 if (PerlProc_pipe(p) < 0)
2308 if (doexec && PerlProc_pipe(pp) >= 0)
2310 while ((pid = PerlProc_fork()) < 0) {
2311 if (errno != EAGAIN) {
2312 PerlLIO_close(p[This]);
2313 PerlLIO_close(p[that]);
2315 PerlLIO_close(pp[0]);
2316 PerlLIO_close(pp[1]);
2319 Perl_croak(aTHX_ "Can't fork");
2332 PerlLIO_close(pp[0]);
2333 #if defined(HAS_FCNTL) && defined(F_SETFD)
2334 fcntl(pp[1], F_SETFD, FD_CLOEXEC);
2337 if (p[THIS] != (*mode == 'r')) {
2338 PerlLIO_dup2(p[THIS], *mode == 'r');
2339 PerlLIO_close(p[THIS]);
2340 if (p[THAT] != (*mode == 'r')) /* if dup2() didn't close it */
2341 PerlLIO_close(p[THAT]);
2344 PerlLIO_close(p[THAT]);
2347 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
2354 for (fd = PL_maxsysfd + 1; fd < NOFILE; fd++)
2359 /* may or may not use the shell */
2360 do_exec3(cmd, pp[1], did_pipes);
2363 #endif /* defined OS2 */
2365 #ifdef PERLIO_USING_CRLF
2366 /* Since we circumvent IO layers when we manipulate low-level
2367 filedescriptors directly, need to manually switch to the
2368 default, binary, low-level mode; see PerlIOBuf_open(). */
2369 PerlLIO_setmode((*mode == 'r'), O_BINARY);
2372 if ((tmpgv = gv_fetchpvs("$", GV_ADD|GV_NOTQUAL, SVt_PV))) {
2373 SvREADONLY_off(GvSV(tmpgv));
2374 sv_setiv(GvSV(tmpgv), PerlProc_getpid());
2375 SvREADONLY_on(GvSV(tmpgv));
2377 #ifdef THREADS_HAVE_PIDS
2378 PL_ppid = (IV)getppid();
2381 #ifdef PERL_USES_PL_PIDSTATUS
2382 hv_clear(PL_pidstatus); /* we have no children */
2388 do_execfree(); /* free any memory malloced by child on vfork */
2390 PerlLIO_close(pp[1]);
2391 if (p[that] < p[This]) {
2392 PerlLIO_dup2(p[This], p[that]);
2393 PerlLIO_close(p[This]);
2397 PerlLIO_close(p[that]);
2400 sv = *av_fetch(PL_fdpid,p[This],TRUE);
2402 SvUPGRADE(sv,SVt_IV);
2404 PL_forkprocess = pid;
2405 if (did_pipes && pid > 0) {
2410 while (n < sizeof(int)) {
2411 n1 = PerlLIO_read(pp[0],
2412 (void*)(((char*)&errkid)+n),
2418 PerlLIO_close(pp[0]);
2420 if (n) { /* Error */
2422 PerlLIO_close(p[This]);
2423 if (n != sizeof(int))
2424 Perl_croak(aTHX_ "panic: kid popen errno read");
2426 pid2 = wait4pid(pid, &status, 0);
2427 } while (pid2 == -1 && errno == EINTR);
2428 errno = errkid; /* Propagate errno from kid */
2433 PerlLIO_close(pp[0]);
2434 return PerlIO_fdopen(p[This], mode);
2437 #if defined(atarist) || defined(EPOC)
2440 Perl_my_popen((pTHX_ const char *cmd, const char *mode)
2442 PERL_FLUSHALL_FOR_CHILD;
2443 /* Call system's popen() to get a FILE *, then import it.
2444 used 0 for 2nd parameter to PerlIO_importFILE;
2447 return PerlIO_importFILE(popen(cmd, mode), 0);
2451 FILE *djgpp_popen();
2453 Perl_my_popen((pTHX_ const char *cmd, const char *mode)
2455 PERL_FLUSHALL_FOR_CHILD;
2456 /* Call system's popen() to get a FILE *, then import it.
2457 used 0 for 2nd parameter to PerlIO_importFILE;
2460 return PerlIO_importFILE(djgpp_popen(cmd, mode), 0);
2465 #endif /* !DOSISH */
2467 /* this is called in parent before the fork() */
2469 Perl_atfork_lock(void)
2472 #if defined(USE_ITHREADS)
2473 /* locks must be held in locking order (if any) */
2475 MUTEX_LOCK(&PL_malloc_mutex);
2481 /* this is called in both parent and child after the fork() */
2483 Perl_atfork_unlock(void)
2486 #if defined(USE_ITHREADS)
2487 /* locks must be released in same order as in atfork_lock() */
2489 MUTEX_UNLOCK(&PL_malloc_mutex);
2498 #if defined(HAS_FORK)
2500 #if defined(USE_ITHREADS) && !defined(HAS_PTHREAD_ATFORK)
2505 /* atfork_lock() and atfork_unlock() are installed as pthread_atfork()
2506 * handlers elsewhere in the code */
2511 /* this "canna happen" since nothing should be calling here if !HAS_FORK */
2512 Perl_croak_nocontext("fork() not available");
2514 #endif /* HAS_FORK */
2519 Perl_dump_fds(pTHX_ char *s)
2524 PerlIO_printf(Perl_debug_log,"%s", s);
2525 for (fd = 0; fd < 32; fd++) {
2526 if (PerlLIO_fstat(fd,&tmpstatbuf) >= 0)
2527 PerlIO_printf(Perl_debug_log," %d",fd);
2529 PerlIO_printf(Perl_debug_log,"\n");
2532 #endif /* DUMP_FDS */
2536 dup2(int oldfd, int newfd)
2538 #if defined(HAS_FCNTL) && defined(F_DUPFD)
2541 PerlLIO_close(newfd);
2542 return fcntl(oldfd, F_DUPFD, newfd);
2544 #define DUP2_MAX_FDS 256
2545 int fdtmp[DUP2_MAX_FDS];
2551 PerlLIO_close(newfd);
2552 /* good enough for low fd's... */
2553 while ((fd = PerlLIO_dup(oldfd)) != newfd && fd >= 0) {
2554 if (fdx >= DUP2_MAX_FDS) {
2562 PerlLIO_close(fdtmp[--fdx]);
2569 #ifdef HAS_SIGACTION
2571 #ifdef MACOS_TRADITIONAL
2572 /* We don't want restart behavior on MacOS */
2577 Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
2580 struct sigaction act, oact;
2583 /* only "parent" interpreter can diddle signals */
2584 if (PL_curinterp != aTHX)
2585 return (Sighandler_t) SIG_ERR;
2588 act.sa_handler = (void(*)(int))handler;
2589 sigemptyset(&act.sa_mask);
2592 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
2593 act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
2595 #if defined(SA_NOCLDWAIT) && !defined(BSDish) /* See [perl #18849] */
2596 if (signo == SIGCHLD && handler == (Sighandler_t) SIG_IGN)
2597 act.sa_flags |= SA_NOCLDWAIT;
2599 if (sigaction(signo, &act, &oact) == -1)
2600 return (Sighandler_t) SIG_ERR;
2602 return (Sighandler_t) oact.sa_handler;
2606 Perl_rsignal_state(pTHX_ int signo)
2608 struct sigaction oact;
2609 PERL_UNUSED_CONTEXT;
2611 if (sigaction(signo, (struct sigaction *)NULL, &oact) == -1)
2612 return (Sighandler_t) SIG_ERR;
2614 return (Sighandler_t) oact.sa_handler;
2618 Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
2621 struct sigaction act;
2624 /* only "parent" interpreter can diddle signals */
2625 if (PL_curinterp != aTHX)
2629 act.sa_handler = (void(*)(int))handler;
2630 sigemptyset(&act.sa_mask);
2633 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
2634 act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
2636 #if defined(SA_NOCLDWAIT) && !defined(BSDish) /* See [perl #18849] */
2637 if (signo == SIGCHLD && handler == (Sighandler_t) SIG_IGN)
2638 act.sa_flags |= SA_NOCLDWAIT;
2640 return sigaction(signo, &act, save);
2644 Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
2648 /* only "parent" interpreter can diddle signals */
2649 if (PL_curinterp != aTHX)
2653 return sigaction(signo, save, (struct sigaction *)NULL);
2656 #else /* !HAS_SIGACTION */
2659 Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
2661 #if defined(USE_ITHREADS) && !defined(WIN32)
2662 /* only "parent" interpreter can diddle signals */
2663 if (PL_curinterp != aTHX)
2664 return (Sighandler_t) SIG_ERR;
2667 return PerlProc_signal(signo, handler);
2678 Perl_rsignal_state(pTHX_ int signo)
2681 Sighandler_t oldsig;
2683 #if defined(USE_ITHREADS) && !defined(WIN32)
2684 /* only "parent" interpreter can diddle signals */
2685 if (PL_curinterp != aTHX)
2686 return (Sighandler_t) SIG_ERR;
2690 oldsig = PerlProc_signal(signo, sig_trap);
2691 PerlProc_signal(signo, oldsig);
2693 PerlProc_kill(PerlProc_getpid(), signo);
2698 Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
2700 #if defined(USE_ITHREADS) && !defined(WIN32)
2701 /* only "parent" interpreter can diddle signals */
2702 if (PL_curinterp != aTHX)
2705 *save = PerlProc_signal(signo, handler);
2706 return (*save == (Sighandler_t) SIG_ERR) ? -1 : 0;
2710 Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
2712 #if defined(USE_ITHREADS) && !defined(WIN32)
2713 /* only "parent" interpreter can diddle signals */
2714 if (PL_curinterp != aTHX)
2717 return (PerlProc_signal(signo, *save) == (Sighandler_t) SIG_ERR) ? -1 : 0;
2720 #endif /* !HAS_SIGACTION */
2721 #endif /* !PERL_MICRO */
2723 /* VMS' my_pclose() is in VMS.c; same with OS/2 */
2724 #if (!defined(DOSISH) || defined(HAS_FORK) || defined(AMIGAOS)) && !defined(VMS) && !defined(__OPEN_VM) && !defined(EPOC) && !defined(MACOS_TRADITIONAL)
2726 Perl_my_pclose(pTHX_ PerlIO *ptr)
2729 Sigsave_t hstat, istat, qstat;
2735 int saved_errno = 0;
2737 int saved_win32_errno;
2741 svp = av_fetch(PL_fdpid,PerlIO_fileno(ptr),TRUE);
2743 pid = (SvTYPE(*svp) == SVt_IV) ? SvIVX(*svp) : -1;
2745 *svp = &PL_sv_undef;
2747 if (pid == -1) { /* Opened by popen. */
2748 return my_syspclose(ptr);
2751 if ((close_failed = (PerlIO_close(ptr) == EOF))) {
2752 saved_errno = errno;
2754 saved_win32_errno = GetLastError();
2758 if(PerlProc_kill(pid, 0) < 0) { return(pid); } /* HOM 12/23/91 */
2761 rsignal_save(SIGHUP, (Sighandler_t) SIG_IGN, &hstat);
2762 rsignal_save(SIGINT, (Sighandler_t) SIG_IGN, &istat);
2763 rsignal_save(SIGQUIT, (Sighandler_t) SIG_IGN, &qstat);
2766 pid2 = wait4pid(pid, &status, 0);
2767 } while (pid2 == -1 && errno == EINTR);
2769 rsignal_restore(SIGHUP, &hstat);
2770 rsignal_restore(SIGINT, &istat);
2771 rsignal_restore(SIGQUIT, &qstat);
2774 SETERRNO(saved_errno, 0);
2777 return(pid2 < 0 ? pid2 : status == 0 ? 0 : (errno = 0, status));
2779 #endif /* !DOSISH */
2781 #if (!defined(DOSISH) || defined(OS2) || defined(WIN32) || defined(NETWARE)) && !defined(MACOS_TRADITIONAL)
2783 Perl_wait4pid(pTHX_ Pid_t pid, int *statusp, int flags)
2789 #ifdef PERL_USES_PL_PIDSTATUS
2792 /* The keys in PL_pidstatus are now the raw 4 (or 8) bytes of the
2793 pid, rather than a string form. */
2794 SV * const * const svp = hv_fetch(PL_pidstatus,(const char*) &pid,sizeof(Pid_t),FALSE);
2795 if (svp && *svp != &PL_sv_undef) {
2796 *statusp = SvIVX(*svp);
2797 (void)hv_delete(PL_pidstatus,(const char*) &pid,sizeof(Pid_t),
2805 hv_iterinit(PL_pidstatus);
2806 if ((entry = hv_iternext(PL_pidstatus))) {
2807 SV * const sv = hv_iterval(PL_pidstatus,entry);
2809 const char * const spid = hv_iterkey(entry,&len);
2811 assert (len == sizeof(Pid_t));
2812 memcpy((char *)&pid, spid, len);
2813 *statusp = SvIVX(sv);
2814 /* The hash iterator is currently on this entry, so simply
2815 calling hv_delete would trigger the lazy delete, which on
2816 aggregate does more work, beacuse next call to hv_iterinit()
2817 would spot the flag, and have to call the delete routine,
2818 while in the meantime any new entries can't re-use that
2820 hv_iterinit(PL_pidstatus);
2821 (void)hv_delete(PL_pidstatus,spid,len,G_DISCARD);
2828 # ifdef HAS_WAITPID_RUNTIME
2829 if (!HAS_WAITPID_RUNTIME)
2832 result = PerlProc_waitpid(pid,statusp,flags);
2835 #if !defined(HAS_WAITPID) && defined(HAS_WAIT4)
2836 result = wait4((pid==-1)?0:pid,statusp,flags,NULL);
2839 #ifdef PERL_USES_PL_PIDSTATUS
2840 #if defined(HAS_WAITPID) && defined(HAS_WAITPID_RUNTIME)
2845 Perl_croak(aTHX_ "Can't do waitpid with flags");
2847 while ((result = PerlProc_wait(statusp)) != pid && pid > 0 && result >= 0)
2848 pidgone(result,*statusp);
2854 #if defined(HAS_WAITPID) || defined(HAS_WAIT4)
2857 if (result < 0 && errno == EINTR) {
2862 #endif /* !DOSISH || OS2 || WIN32 || NETWARE */
2864 #ifdef PERL_USES_PL_PIDSTATUS
2866 Perl_pidgone(pTHX_ Pid_t pid, int status)
2870 sv = *hv_fetch(PL_pidstatus,(const char*)&pid,sizeof(Pid_t),TRUE);
2871 SvUPGRADE(sv,SVt_IV);
2872 SvIV_set(sv, status);
2877 #if defined(atarist) || defined(OS2) || defined(EPOC)
2880 int /* Cannot prototype with I32
2882 my_syspclose(PerlIO *ptr)
2885 Perl_my_pclose(pTHX_ PerlIO *ptr)
2888 /* Needs work for PerlIO ! */
2889 FILE * const f = PerlIO_findFILE(ptr);
2890 const I32 result = pclose(f);
2891 PerlIO_releaseFILE(ptr,f);
2899 Perl_my_pclose(pTHX_ PerlIO *ptr)
2901 /* Needs work for PerlIO ! */
2902 FILE * const f = PerlIO_findFILE(ptr);
2903 I32 result = djgpp_pclose(f);
2904 result = (result << 8) & 0xff00;
2905 PerlIO_releaseFILE(ptr,f);
2911 Perl_repeatcpy(pTHX_ register char *to, register const char *from, I32 len, register I32 count)
2914 register const char * const frombase = from;
2915 PERL_UNUSED_CONTEXT;
2918 register const char c = *from;
2923 while (count-- > 0) {
2924 for (todo = len; todo > 0; todo--) {
2933 Perl_same_dirent(pTHX_ const char *a, const char *b)
2935 char *fa = strrchr(a,'/');
2936 char *fb = strrchr(b,'/');
2939 SV * const tmpsv = sv_newmortal();
2952 sv_setpvn(tmpsv, ".", 1);
2954 sv_setpvn(tmpsv, a, fa - a);
2955 if (PerlLIO_stat(SvPVX_const(tmpsv), &tmpstatbuf1) < 0)
2958 sv_setpvn(tmpsv, ".", 1);
2960 sv_setpvn(tmpsv, b, fb - b);
2961 if (PerlLIO_stat(SvPVX_const(tmpsv), &tmpstatbuf2) < 0)
2963 return tmpstatbuf1.st_dev == tmpstatbuf2.st_dev &&
2964 tmpstatbuf1.st_ino == tmpstatbuf2.st_ino;
2966 #endif /* !HAS_RENAME */
2969 Perl_find_script(pTHX_ const char *scriptname, bool dosearch,
2970 const char *const *const search_ext, I32 flags)
2973 const char *xfound = NULL;
2974 char *xfailed = NULL;
2975 char tmpbuf[MAXPATHLEN];
2979 #if defined(DOSISH) && !defined(OS2) && !defined(atarist)
2980 # define SEARCH_EXTS ".bat", ".cmd", NULL
2981 # define MAX_EXT_LEN 4
2984 # define SEARCH_EXTS ".cmd", ".btm", ".bat", ".pl", NULL
2985 # define MAX_EXT_LEN 4
2988 # define SEARCH_EXTS ".pl", ".com", NULL
2989 # define MAX_EXT_LEN 4
2991 /* additional extensions to try in each dir if scriptname not found */
2993 static const char *const exts[] = { SEARCH_EXTS };
2994 const char *const *const ext = search_ext ? search_ext : exts;
2995 int extidx = 0, i = 0;
2996 const char *curext = NULL;
2998 PERL_UNUSED_ARG(search_ext);
2999 # define MAX_EXT_LEN 0
3003 * If dosearch is true and if scriptname does not contain path
3004 * delimiters, search the PATH for scriptname.
3006 * If SEARCH_EXTS is also defined, will look for each
3007 * scriptname{SEARCH_EXTS} whenever scriptname is not found
3008 * while searching the PATH.
3010 * Assuming SEARCH_EXTS is C<".foo",".bar",NULL>, PATH search
3011 * proceeds as follows:
3012 * If DOSISH or VMSISH:
3013 * + look for ./scriptname{,.foo,.bar}
3014 * + search the PATH for scriptname{,.foo,.bar}
3017 * + look *only* in the PATH for scriptname{,.foo,.bar} (note
3018 * this will not look in '.' if it's not in the PATH)
3023 # ifdef ALWAYS_DEFTYPES
3024 len = strlen(scriptname);
3025 if (!(len == 1 && *scriptname == '-') && scriptname[len-1] != ':') {
3026 int idx = 0, deftypes = 1;
3029 const int hasdir = !dosearch || (strpbrk(scriptname,":[</") != NULL);
3032 int idx = 0, deftypes = 1;
3035 const int hasdir = (strpbrk(scriptname,":[</") != NULL);
3037 /* The first time through, just add SEARCH_EXTS to whatever we
3038 * already have, so we can check for default file types. */
3040 (!hasdir && my_trnlnm("DCL$PATH",tmpbuf,idx++)) )
3046 if ((strlen(tmpbuf) + strlen(scriptname)
3047 + MAX_EXT_LEN) >= sizeof tmpbuf)
3048 continue; /* don't search dir with too-long name */
3049 my_strlcat(tmpbuf, scriptname, sizeof(tmpbuf));
3053 if (strEQ(scriptname, "-"))
3055 if (dosearch) { /* Look in '.' first. */
3056 const char *cur = scriptname;
3058 if ((curext = strrchr(scriptname,'.'))) /* possible current ext */
3060 if (strEQ(ext[i++],curext)) {
3061 extidx = -1; /* already has an ext */
3066 DEBUG_p(PerlIO_printf(Perl_debug_log,
3067 "Looking for %s\n",cur));
3068 if (PerlLIO_stat(cur,&PL_statbuf) >= 0
3069 && !S_ISDIR(PL_statbuf.st_mode)) {
3077 if (cur == scriptname) {
3078 len = strlen(scriptname);
3079 if (len+MAX_EXT_LEN+1 >= sizeof(tmpbuf))
3081 my_strlcpy(tmpbuf, scriptname, sizeof(tmpbuf));
3084 } while (extidx >= 0 && ext[extidx] /* try an extension? */
3085 && my_strlcpy(tmpbuf+len, ext[extidx++], sizeof(tmpbuf) - len));
3090 #ifdef MACOS_TRADITIONAL
3091 if (dosearch && !strchr(scriptname, ':') &&
3092 (s = PerlEnv_getenv("Commands")))
3094 if (dosearch && !strchr(scriptname, '/')
3096 && !strchr(scriptname, '\\')
3098 && (s = PerlEnv_getenv("PATH")))
3103 PL_bufend = s + strlen(s);
3104 while (s < PL_bufend) {
3105 #ifdef MACOS_TRADITIONAL
3106 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, PL_bufend,
3110 #if defined(atarist) || defined(DOSISH)
3115 && *s != ';'; len++, s++) {
3116 if (len < sizeof tmpbuf)
3119 if (len < sizeof tmpbuf)
3121 #else /* ! (atarist || DOSISH) */
3122 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, PL_bufend,
3125 #endif /* ! (atarist || DOSISH) */
3126 #endif /* MACOS_TRADITIONAL */
3129 if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
3130 continue; /* don't search dir with too-long name */
3131 #ifdef MACOS_TRADITIONAL
3132 if (len && tmpbuf[len - 1] != ':')
3133 tmpbuf[len++] = ':';
3136 # if defined(atarist) || defined(__MINT__) || defined(DOSISH)
3137 && tmpbuf[len - 1] != '/'
3138 && tmpbuf[len - 1] != '\\'
3141 tmpbuf[len++] = '/';
3142 if (len == 2 && tmpbuf[0] == '.')
3145 (void)my_strlcpy(tmpbuf + len, scriptname, sizeof(tmpbuf) - len);
3149 len = strlen(tmpbuf);
3150 if (extidx > 0) /* reset after previous loop */
3154 DEBUG_p(PerlIO_printf(Perl_debug_log, "Looking for %s\n",tmpbuf));
3155 retval = PerlLIO_stat(tmpbuf,&PL_statbuf);
3156 if (S_ISDIR(PL_statbuf.st_mode)) {
3160 } while ( retval < 0 /* not there */
3161 && extidx>=0 && ext[extidx] /* try an extension? */
3162 && my_strlcpy(tmpbuf+len, ext[extidx++], sizeof(tmpbuf) - len)
3167 if (S_ISREG(PL_statbuf.st_mode)
3168 && cando(S_IRUSR,TRUE,&PL_statbuf)
3169 #if !defined(DOSISH) && !defined(MACOS_TRADITIONAL)
3170 && cando(S_IXUSR,TRUE,&PL_statbuf)
3174 xfound = tmpbuf; /* bingo! */
3178 xfailed = savepv(tmpbuf);
3181 if (!xfound && !seen_dot && !xfailed &&
3182 (PerlLIO_stat(scriptname,&PL_statbuf) < 0
3183 || S_ISDIR(PL_statbuf.st_mode)))
3185 seen_dot = 1; /* Disable message. */
3187 if (flags & 1) { /* do or die? */
3188 Perl_croak(aTHX_ "Can't %s %s%s%s",
3189 (xfailed ? "execute" : "find"),
3190 (xfailed ? xfailed : scriptname),
3191 (xfailed ? "" : " on PATH"),
3192 (xfailed || seen_dot) ? "" : ", '.' not in PATH");
3197 scriptname = xfound;
3199 return (scriptname ? savepv(scriptname) : NULL);
3202 #ifndef PERL_GET_CONTEXT_DEFINED
3205 Perl_get_context(void)
3208 #if defined(USE_ITHREADS)
3209 # ifdef OLD_PTHREADS_API
3211 if (pthread_getspecific(PL_thr_key, &t))
3212 Perl_croak_nocontext("panic: pthread_getspecific");
3215 # ifdef I_MACH_CTHREADS
3216 return (void*)cthread_data(cthread_self());
3218 return (void*)PTHREAD_GETSPECIFIC(PL_thr_key);
3227 Perl_set_context(void *t)
3230 #if defined(USE_ITHREADS)
3231 # ifdef I_MACH_CTHREADS
3232 cthread_set_data(cthread_self(), t);
3234 if (pthread_setspecific(PL_thr_key, t))
3235 Perl_croak_nocontext("panic: pthread_setspecific");
3242 #endif /* !PERL_GET_CONTEXT_DEFINED */
3244 #if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
3253 Perl_get_op_names(pTHX)
3255 PERL_UNUSED_CONTEXT;
3256 return (char **)PL_op_name;
3260 Perl_get_op_descs(pTHX)
3262 PERL_UNUSED_CONTEXT;
3263 return (char **)PL_op_desc;
3267 Perl_get_no_modify(pTHX)
3269 PERL_UNUSED_CONTEXT;
3270 return PL_no_modify;
3274 Perl_get_opargs(pTHX)
3276 PERL_UNUSED_CONTEXT;
3277 return (U32 *)PL_opargs;
3281 Perl_get_ppaddr(pTHX)
3284 PERL_UNUSED_CONTEXT;
3285 return (PPADDR_t*)PL_ppaddr;
3288 #ifndef HAS_GETENV_LEN
3290 Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len)
3292 char * const env_trans = PerlEnv_getenv(env_elem);
3293 PERL_UNUSED_CONTEXT;
3295 *len = strlen(env_trans);
3302 Perl_get_vtbl(pTHX_ int vtbl_id)
3304 const MGVTBL* result;
3305 PERL_UNUSED_CONTEXT;
3309 result = &PL_vtbl_sv;
3312 result = &PL_vtbl_env;
3314 case want_vtbl_envelem:
3315 result = &PL_vtbl_envelem;
3318 result = &PL_vtbl_sig;
3320 case want_vtbl_sigelem:
3321 result = &PL_vtbl_sigelem;
3323 case want_vtbl_pack:
3324 result = &PL_vtbl_pack;
3326 case want_vtbl_packelem:
3327 result = &PL_vtbl_packelem;
3329 case want_vtbl_dbline:
3330 result = &PL_vtbl_dbline;
3333 result = &PL_vtbl_isa;
3335 case want_vtbl_isaelem:
3336 result = &PL_vtbl_isaelem;
3338 case want_vtbl_arylen:
3339 result = &PL_vtbl_arylen;
3341 case want_vtbl_mglob:
3342 result = &PL_vtbl_mglob;
3344 case want_vtbl_nkeys:
3345 result = &PL_vtbl_nkeys;
3347 case want_vtbl_taint:
3348 result = &PL_vtbl_taint;
3350 case want_vtbl_substr:
3351 result = &PL_vtbl_substr;
3354 result = &PL_vtbl_vec;
3357 result = &PL_vtbl_pos;
3360 result = &PL_vtbl_bm;
3363 result = &PL_vtbl_fm;
3365 case want_vtbl_uvar:
3366 result = &PL_vtbl_uvar;
3368 case want_vtbl_defelem:
3369 result = &PL_vtbl_defelem;
3371 case want_vtbl_regexp:
3372 result = &PL_vtbl_regexp;
3374 case want_vtbl_regdata:
3375 result = &PL_vtbl_regdata;
3377 case want_vtbl_regdatum:
3378 result = &PL_vtbl_regdatum;
3380 #ifdef USE_LOCALE_COLLATE
3381 case want_vtbl_collxfrm:
3382 result = &PL_vtbl_collxfrm;
3385 case want_vtbl_amagic:
3386 result = &PL_vtbl_amagic;
3388 case want_vtbl_amagicelem:
3389 result = &PL_vtbl_amagicelem;
3391 case want_vtbl_backref:
3392 result = &PL_vtbl_backref;
3394 case want_vtbl_utf8:
3395 result = &PL_vtbl_utf8;
3401 return (MGVTBL*)result;
3405 Perl_my_fflush_all(pTHX)
3407 #if defined(USE_PERLIO) || defined(FFLUSH_NULL) || defined(USE_SFIO)
3408 return PerlIO_flush(NULL);
3410 # if defined(HAS__FWALK)
3411 extern int fflush(FILE *);
3412 /* undocumented, unprototyped, but very useful BSDism */
3413 extern void _fwalk(int (*)(FILE *));
3417 # if defined(FFLUSH_ALL) && defined(HAS_STDIO_STREAM_ARRAY)
3419 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
3420 open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
3422 # if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
3423 open_max = sysconf(_SC_OPEN_MAX);
3426 open_max = FOPEN_MAX;
3429 open_max = OPEN_MAX;
3440 for (i = 0; i < open_max; i++)
3441 if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
3442 STDIO_STREAM_ARRAY[i]._file < open_max &&
3443 STDIO_STREAM_ARRAY[i]._flag)
3444 PerlIO_flush(&STDIO_STREAM_ARRAY[i]);
3448 SETERRNO(EBADF,RMS_IFI);
3455 Perl_report_evil_fh(pTHX_ const GV *gv, const IO *io, I32 op)
3457 const char * const name = gv && isGV(gv) ? GvENAME(gv) : NULL;
3459 if (op == OP_phoney_OUTPUT_ONLY || op == OP_phoney_INPUT_ONLY) {
3460 if (ckWARN(WARN_IO)) {
3461 const char * const direction =
3462 (const char *)((op == OP_phoney_INPUT_ONLY) ? "in" : "out");
3464 Perl_warner(aTHX_ packWARN(WARN_IO),
3465 "Filehandle %s opened only for %sput",
3468 Perl_warner(aTHX_ packWARN(WARN_IO),
3469 "Filehandle opened only for %sput", direction);
3476 if (gv && io && IoTYPE(io) == IoTYPE_CLOSED) {
3478 warn_type = WARN_CLOSED;
3482 warn_type = WARN_UNOPENED;
3485 if (ckWARN(warn_type)) {
3486 const char * const pars =
3487 (const char *)(OP_IS_FILETEST(op) ? "" : "()");
3488 const char * const func =
3490 (op == OP_READLINE ? "readline" : /* "<HANDLE>" not nice */
3491 op == OP_LEAVEWRITE ? "write" : /* "write exit" not nice */
3492 op < 0 ? "" : /* handle phoney cases */
3494 const char * const type =
3496 (OP_IS_SOCKET(op) ||
3497 (gv && io && IoTYPE(io) == IoTYPE_SOCKET) ?
3498 "socket" : "filehandle");
3499 if (name && *name) {
3500 Perl_warner(aTHX_ packWARN(warn_type),
3501 "%s%s on %s %s %s", func, pars, vile, type, name);
3502 if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
3504 aTHX_ packWARN(warn_type),
3505 "\t(Are you trying to call %s%s on dirhandle %s?)\n",
3510 Perl_warner(aTHX_ packWARN(warn_type),
3511 "%s%s on %s %s", func, pars, vile, type);
3512 if (gv && io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
3514 aTHX_ packWARN(warn_type),
3515 "\t(Are you trying to call %s%s on dirhandle?)\n",
3524 /* in ASCII order, not that it matters */
3525 static const char controllablechars[] = "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
3528 Perl_ebcdic_control(pTHX_ int ch)
3536 if ((ctlp = strchr(controllablechars, ch)) == 0) {
3537 Perl_die(aTHX_ "unrecognised control character '%c'\n", ch);
3540 if (ctlp == controllablechars)
3541 return('\177'); /* DEL */
3543 return((unsigned char)(ctlp - controllablechars - 1));
3544 } else { /* Want uncontrol */
3545 if (ch == '\177' || ch == -1)
3547 else if (ch == '\157')
3549 else if (ch == '\174')
3551 else if (ch == '^') /* '\137' in 1047, '\260' in 819 */
3553 else if (ch == '\155')
3555 else if (0 < ch && ch < (sizeof(controllablechars) - 1))
3556 return(controllablechars[ch+1]);
3558 Perl_die(aTHX_ "invalid control request: '\\%03o'\n", ch & 0xFF);
3563 /* To workaround core dumps from the uninitialised tm_zone we get the
3564 * system to give us a reasonable struct to copy. This fix means that
3565 * strftime uses the tm_zone and tm_gmtoff values returned by
3566 * localtime(time()). That should give the desired result most of the
3567 * time. But probably not always!
3569 * This does not address tzname aspects of NETaa14816.
3574 # ifndef STRUCT_TM_HASZONE
3575 # define STRUCT_TM_HASZONE
3579 #ifdef STRUCT_TM_HASZONE /* Backward compat */
3580 # ifndef HAS_TM_TM_ZONE
3581 # define HAS_TM_TM_ZONE
3586 Perl_init_tm(pTHX_ struct tm *ptm) /* see mktime, strftime and asctime */
3588 #ifdef HAS_TM_TM_ZONE
3590 const struct tm* my_tm;
3592 my_tm = localtime(&now);
3594 Copy(my_tm, ptm, 1, struct tm);
3596 PERL_UNUSED_ARG(ptm);
3601 * mini_mktime - normalise struct tm values without the localtime()
3602 * semantics (and overhead) of mktime().
3605 Perl_mini_mktime(pTHX_ struct tm *ptm)
3609 int month, mday, year, jday;
3610 int odd_cent, odd_year;
3611 PERL_UNUSED_CONTEXT;
3613 #define DAYS_PER_YEAR 365
3614 #define DAYS_PER_QYEAR (4*DAYS_PER_YEAR+1)
3615 #define DAYS_PER_CENT (25*DAYS_PER_QYEAR-1)
3616 #define DAYS_PER_QCENT (4*DAYS_PER_CENT+1)
3617 #define SECS_PER_HOUR (60*60)
3618 #define SECS_PER_DAY (24*SECS_PER_HOUR)
3619 /* parentheses deliberately absent on these two, otherwise they don't work */
3620 #define MONTH_TO_DAYS 153/5
3621 #define DAYS_TO_MONTH 5/153
3622 /* offset to bias by March (month 4) 1st between month/mday & year finding */
3623 #define YEAR_ADJUST (4*MONTH_TO_DAYS+1)
3624 /* as used here, the algorithm leaves Sunday as day 1 unless we adjust it */
3625 #define WEEKDAY_BIAS 6 /* (1+6)%7 makes Sunday 0 again */
3628 * Year/day algorithm notes:
3630 * With a suitable offset for numeric value of the month, one can find
3631 * an offset into the year by considering months to have 30.6 (153/5) days,
3632 * using integer arithmetic (i.e., with truncation). To avoid too much
3633 * messing about with leap days, we consider January and February to be
3634 * the 13th and 14th month of the previous year. After that transformation,
3635 * we need the month index we use to be high by 1 from 'normal human' usage,
3636 * so the month index values we use run from 4 through 15.
3638 * Given that, and the rules for the Gregorian calendar (leap years are those
3639 * divisible by 4 unless also divisible by 100, when they must be divisible
3640 * by 400 instead), we can simply calculate the number of days since some
3641 * arbitrary 'beginning of time' by futzing with the (adjusted) year number,
3642 * the days we derive from our month index, and adding in the day of the
3643 * month. The value used here is not adjusted for the actual origin which
3644 * it normally would use (1 January A.D. 1), since we're not exposing it.
3645 * We're only building the value so we can turn around and get the
3646 * normalised values for the year, month, day-of-month, and day-of-year.
3648 * For going backward, we need to bias the value we're using so that we find
3649 * the right year value. (Basically, we don't want the contribution of
3650 * March 1st to the number to apply while deriving the year). Having done
3651 * that, we 'count up' the contribution to the year number by accounting for
3652 * full quadracenturies (400-year periods) with their extra leap days, plus
3653 * the contribution from full centuries (to avoid counting in the lost leap
3654 * days), plus the contribution from full quad-years (to count in the normal
3655 * leap days), plus the leftover contribution from any non-leap years.
3656 * At this point, if we were working with an actual leap day, we'll have 0
3657 * days left over. This is also true for March 1st, however. So, we have
3658 * to special-case that result, and (earlier) keep track of the 'odd'
3659 * century and year contributions. If we got 4 extra centuries in a qcent,
3660 * or 4 extra years in a qyear, then it's a leap day and we call it 29 Feb.
3661 * Otherwise, we add back in the earlier bias we removed (the 123 from
3662 * figuring in March 1st), find the month index (integer division by 30.6),
3663 * and the remainder is the day-of-month. We then have to convert back to
3664 * 'real' months (including fixing January and February from being 14/15 in
3665 * the previous year to being in the proper year). After that, to get
3666 * tm_yday, we work with the normalised year and get a new yearday value for
3667 * January 1st, which we subtract from the yearday value we had earlier,
3668 * representing the date we've re-built. This is done from January 1
3669 * because tm_yday is 0-origin.
3671 * Since POSIX time routines are only guaranteed to work for times since the
3672 * UNIX epoch (00:00:00 1 Jan 1970 UTC), the fact that this algorithm
3673 * applies Gregorian calendar rules even to dates before the 16th century
3674 * doesn't bother me. Besides, you'd need cultural context for a given
3675 * date to know whether it was Julian or Gregorian calendar, and that's
3676 * outside the scope for this routine. Since we convert back based on the
3677 * same rules we used to build the yearday, you'll only get strange results
3678 * for input which needed normalising, or for the 'odd' century years which
3679 * were leap years in the Julian calander but not in the Gregorian one.
3680 * I can live with that.
3682 * This algorithm also fails to handle years before A.D. 1 gracefully, but
3683 * that's still outside the scope for POSIX time manipulation, so I don't
3687 year = 1900 + ptm->tm_year;
3688 month = ptm->tm_mon;
3689 mday = ptm->tm_mday;
3690 /* allow given yday with no month & mday to dominate the result */
3691 if (ptm->tm_yday >= 0 && mday <= 0 && month <= 0) {
3694 jday = 1 + ptm->tm_yday;
3703 yearday = DAYS_PER_YEAR * year + year/4 - year/100 + year/400;
3704 yearday += month*MONTH_TO_DAYS + mday + jday;
3706 * Note that we don't know when leap-seconds were or will be,
3707 * so we have to trust the user if we get something which looks
3708 * like a sensible leap-second. Wild values for seconds will
3709 * be rationalised, however.
3711 if ((unsigned) ptm->tm_sec <= 60) {
3718 secs += 60 * ptm->tm_min;
3719 secs += SECS_PER_HOUR * ptm->tm_hour;
3721 if (secs-(secs/SECS_PER_DAY*SECS_PER_DAY) < 0) {
3722 /* got negative remainder, but need positive time */
3723 /* back off an extra day to compensate */
3724 yearday += (secs/SECS_PER_DAY)-1;
3725 secs -= SECS_PER_DAY * (secs/SECS_PER_DAY - 1);
3728 yearday += (secs/SECS_PER_DAY);
3729 secs -= SECS_PER_DAY * (secs/SECS_PER_DAY);
3732 else if (secs >= SECS_PER_DAY) {
3733 yearday += (secs/SECS_PER_DAY);
3734 secs %= SECS_PER_DAY;
3736 ptm->tm_hour = secs/SECS_PER_HOUR;
3737 secs %= SECS_PER_HOUR;
3738 ptm->tm_min = secs/60;
3740 ptm->tm_sec += secs;
3741 /* done with time of day effects */
3743 * The algorithm for yearday has (so far) left it high by 428.
3744 * To avoid mistaking a legitimate Feb 29 as Mar 1, we need to
3745 * bias it by 123 while trying to figure out what year it
3746 * really represents. Even with this tweak, the reverse
3747 * translation fails for years before A.D. 0001.
3748 * It would still fail for Feb 29, but we catch that one below.
3750 jday = yearday; /* save for later fixup vis-a-vis Jan 1 */
3751 yearday -= YEAR_ADJUST;
3752 year = (yearday / DAYS_PER_QCENT) * 400;
3753 yearday %= DAYS_PER_QCENT;
3754 odd_cent = yearday / DAYS_PER_CENT;
3755 year += odd_cent * 100;
3756 yearday %= DAYS_PER_CENT;
3757 year += (yearday / DAYS_PER_QYEAR) * 4;
3758 yearday %= DAYS_PER_QYEAR;
3759 odd_year = yearday / DAYS_PER_YEAR;
3761 yearday %= DAYS_PER_YEAR;
3762 if (!yearday && (odd_cent==4 || odd_year==4)) { /* catch Feb 29 */
3767 yearday += YEAR_ADJUST; /* recover March 1st crock */
3768 month = yearday*DAYS_TO_MONTH;
3769 yearday -= month*MONTH_TO_DAYS;
3770 /* recover other leap-year adjustment */
3779 ptm->tm_year = year - 1900;
3781 ptm->tm_mday = yearday;
3782 ptm->tm_mon = month;
3786 ptm->tm_mon = month - 1;
3788 /* re-build yearday based on Jan 1 to get tm_yday */
3790 yearday = year*DAYS_PER_YEAR + year/4 - year/100 + year/400;
3791 yearday += 14*MONTH_TO_DAYS + 1;
3792 ptm->tm_yday = jday - yearday;
3793 /* fix tm_wday if not overridden by caller */
3794 if ((unsigned)ptm->tm_wday > 6)
3795 ptm->tm_wday = (jday + WEEKDAY_BIAS) % 7;
3799 Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, int mon, int year, int wday, int yday, int isdst)
3807 init_tm(&mytm); /* XXX workaround - see init_tm() above */
3810 mytm.tm_hour = hour;
3811 mytm.tm_mday = mday;
3813 mytm.tm_year = year;
3814 mytm.tm_wday = wday;
3815 mytm.tm_yday = yday;
3816 mytm.tm_isdst = isdst;
3818 /* use libc to get the values for tm_gmtoff and tm_zone [perl #18238] */
3819 #if defined(HAS_MKTIME) && (defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE))
3824 #ifdef HAS_TM_TM_GMTOFF
3825 mytm.tm_gmtoff = mytm2.tm_gmtoff;
3827 #ifdef HAS_TM_TM_ZONE
3828 mytm.tm_zone = mytm2.tm_zone;
3833 Newx(buf, buflen, char);
3834 len = strftime(buf, buflen, fmt, &mytm);
3836 ** The following is needed to handle to the situation where
3837 ** tmpbuf overflows. Basically we want to allocate a buffer
3838 ** and try repeatedly. The reason why it is so complicated
3839 ** is that getting a return value of 0 from strftime can indicate
3840 ** one of the following:
3841 ** 1. buffer overflowed,
3842 ** 2. illegal conversion specifier, or
3843 ** 3. the format string specifies nothing to be returned(not
3844 ** an error). This could be because format is an empty string
3845 ** or it specifies %p that yields an empty string in some locale.
3846 ** If there is a better way to make it portable, go ahead by
3849 if ((len > 0 && len < buflen) || (len == 0 && *fmt == '\0'))
3852 /* Possibly buf overflowed - try again with a bigger buf */
3853 const int fmtlen = strlen(fmt);
3854 int bufsize = fmtlen + buflen;
3856 Newx(buf, bufsize, char);
3858 buflen = strftime(buf, bufsize, fmt, &mytm);
3859 if (buflen > 0 && buflen < bufsize)
3861 /* heuristic to prevent out-of-memory errors */
3862 if (bufsize > 100*fmtlen) {
3868 Renew(buf, bufsize, char);
3873 Perl_croak(aTHX_ "panic: no strftime");
3879 #define SV_CWD_RETURN_UNDEF \
3880 sv_setsv(sv, &PL_sv_undef); \
3883 #define SV_CWD_ISDOT(dp) \
3884 (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
3885 (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
3888 =head1 Miscellaneous Functions
3890 =for apidoc getcwd_sv
3892 Fill the sv with current working directory
3897 /* Originally written in Perl by John Bazik; rewritten in C by Ben Sugars.
3898 * rewritten again by dougm, optimized for use with xs TARG, and to prefer
3899 * getcwd(3) if available
3900 * Comments from the orignal:
3901 * This is a faster version of getcwd. It's also more dangerous
3902 * because you might chdir out of a directory that you can't chdir
3906 Perl_getcwd_sv(pTHX_ register SV *sv)
3910 #ifndef INCOMPLETE_TAINTS
3916 char buf[MAXPATHLEN];
3918 /* Some getcwd()s automatically allocate a buffer of the given
3919 * size from the heap if they are given a NULL buffer pointer.
3920 * The problem is that this behaviour is not portable. */
3921 if (getcwd(buf, sizeof(buf) - 1)) {
3926 sv_setsv(sv, &PL_sv_undef);
3934 int orig_cdev, orig_cino, cdev, cino, odev, oino, tdev, tino;
3938 SvUPGRADE(sv, SVt_PV);
3940 if (PerlLIO_lstat(".", &statbuf) < 0) {
3941 SV_CWD_RETURN_UNDEF;
3944 orig_cdev = statbuf.st_dev;
3945 orig_cino = statbuf.st_ino;
3954 if (PerlDir_chdir("..") < 0) {
3955 SV_CWD_RETURN_UNDEF;
3957 if (PerlLIO_stat(".", &statbuf) < 0) {
3958 SV_CWD_RETURN_UNDEF;
3961 cdev = statbuf.st_dev;
3962 cino = statbuf.st_ino;
3964 if (odev == cdev && oino == cino) {
3967 if (!(dir = PerlDir_open("."))) {
3968 SV_CWD_RETURN_UNDEF;
3971 while ((dp = PerlDir_read(dir)) != NULL) {
3973 const int namelen = dp->d_namlen;
3975 const int namelen = strlen(dp->d_name);
3978 if (SV_CWD_ISDOT(dp)) {
3982 if (PerlLIO_lstat(dp->d_name, &statbuf) < 0) {
3983 SV_CWD_RETURN_UNDEF;
3986 tdev = statbuf.st_dev;
3987 tino = statbuf.st_ino;
3988 if (tino == oino && tdev == odev) {
3994 SV_CWD_RETURN_UNDEF;
3997 if (pathlen + namelen + 1 >= MAXPATHLEN) {
3998 SV_CWD_RETURN_UNDEF;
4001 SvGROW(sv, pathlen + namelen + 1);
4005 Move(SvPVX_const(sv), SvPVX(sv) + namelen + 1, pathlen, char);
4008 /* prepend current directory to the front */
4010 Move(dp->d_name, SvPVX(sv)+1, namelen, char);
4011 pathlen += (namelen + 1);
4013 #ifdef VOID_CLOSEDIR
4016 if (PerlDir_close(dir) < 0) {
4017 SV_CWD_RETURN_UNDEF;
4023 SvCUR_set(sv, pathlen);
4027 if (PerlDir_chdir(SvPVX_const(sv)) < 0) {
4028 SV_CWD_RETURN_UNDEF;
4031 if (PerlLIO_stat(".", &statbuf) < 0) {
4032 SV_CWD_RETURN_UNDEF;
4035 cdev = statbuf.st_dev;
4036 cino = statbuf.st_ino;
4038 if (cdev != orig_cdev || cino != orig_cino) {
4039 Perl_croak(aTHX_ "Unstable directory path, "
4040 "current directory changed unexpectedly");
4052 =for apidoc scan_version
4054 Returns a pointer to the next character after the parsed
4055 version string, as well as upgrading the passed in SV to
4058 Function must be called with an already existing SV like
4061 s = scan_version(s,SV *sv, bool qv);
4063 Performs some preprocessing to the string to ensure that
4064 it has the correct characteristics of a version. Flags the
4065 object if it contains an underscore (which denotes this
4066 is a alpha version). The boolean qv denotes that the version
4067 should be interpreted as if it had multiple decimals, even if
4074 Perl_scan_version(pTHX_ const char *s, SV *rv, bool qv)
4082 AV * const av = newAV();
4083 SV * const hv = newSVrv(rv, "version"); /* create an SV and upgrade the RV */
4084 (void)sv_upgrade(hv, SVt_PVHV); /* needs to be an HV type */
4086 #ifndef NODEFAULT_SHAREKEYS
4087 HvSHAREKEYS_on(hv); /* key-sharing on by default */
4090 while (isSPACE(*s)) /* leading whitespace is OK */
4094 s++; /* get past 'v' */
4095 qv = 1; /* force quoted version processing */
4098 start = last = pos = s;
4100 /* pre-scan the input string to check for decimals/underbars */
4101 while ( *pos == '.' || *pos == '_' || isDIGIT(*pos) )
4106 Perl_croak(aTHX_ "Invalid version format (underscores before decimal)");
4110 else if ( *pos == '_' )
4113 Perl_croak(aTHX_ "Invalid version format (multiple underscores)");
4115 width = pos - last - 1; /* natural width of sub-version */
4120 if ( alpha && !saw_period )
4121 Perl_croak(aTHX_ "Invalid version format (alpha without decimal)");
4123 if ( saw_period > 1 )
4124 qv = 1; /* force quoted version processing */
4129 hv_store((HV *)hv, "qv", 2, newSViv(qv), 0);
4131 hv_store((HV *)hv, "alpha", 5, newSViv(alpha), 0);
4132 if ( !qv && width < 3 )
4133 hv_store((HV *)hv, "width", 5, newSViv(width), 0);
4135 while (isDIGIT(*pos))
4137 if (!isALPHA(*pos)) {
4143 /* this is atoi() that delimits on underscores */
4144 const char *end = pos;
4148 /* the following if() will only be true after the decimal
4149 * point of a version originally created with a bare
4150 * floating point number, i.e. not quoted in any way
4152 if ( !qv && s > start && saw_period == 1 ) {
4156 rev += (*s - '0') * mult;
4158 if ( PERL_ABS(orev) > PERL_ABS(rev) )
4159 Perl_croak(aTHX_ "Integer overflow in version");
4166 while (--end >= s) {
4168 rev += (*end - '0') * mult;
4170 if ( PERL_ABS(orev) > PERL_ABS(rev) )
4171 Perl_croak(aTHX_ "Integer overflow in version");
4176 /* Append revision */
4177 av_push(av, newSViv(rev));
4180 else if ( *pos == '_' && isDIGIT(pos[1]) )
4182 else if ( isDIGIT(*pos) )
4189 while ( isDIGIT(*pos) )
4194 while ( ( isDIGIT(*pos) || *pos == '_' ) && digits < 3 ) {
4202 if ( qv ) { /* quoted versions always get at least three terms*/
4203 I32 len = av_len(av);
4204 /* This for loop appears to trigger a compiler bug on OS X, as it
4205 loops infinitely. Yes, len is negative. No, it makes no sense.
4206 Compiler in question is:
4207 gcc version 3.3 20030304 (Apple Computer, Inc. build 1640)
4208 for ( len = 2 - len; len > 0; len-- )
4209 av_push((AV *)sv, newSViv(0));
4213 av_push(av, newSViv(0));
4216 if ( av_len(av) == -1 ) /* oops, someone forgot to pass a value */
4217 av_push(av, newSViv(0));
4219 /* fix RT#19517 - special case 'undef' as string */
4220 if ( *s == 'u' && strEQ(s,"undef") ) {
4224 /* And finally, store the AV in the hash */
4225 hv_store((HV *)hv, "version", 7, newRV_noinc((SV *)av), 0);
4230 =for apidoc new_version
4232 Returns a new version object based on the passed in SV:
4234 SV *sv = new_version(SV *ver);
4236 Does not alter the passed in ver SV. See "upg_version" if you
4237 want to upgrade the SV.
4243 Perl_new_version(pTHX_ SV *ver)
4246 SV * const rv = newSV(0);
4247 if ( sv_derived_from(ver,"version") ) /* can just copy directly */
4250 AV * const av = newAV();
4252 /* This will get reblessed later if a derived class*/
4253 SV * const hv = newSVrv(rv, "version");
4254 (void)sv_upgrade(hv, SVt_PVHV); /* needs to be an HV type */
4255 #ifndef NODEFAULT_SHAREKEYS
4256 HvSHAREKEYS_on(hv); /* key-sharing on by default */
4262 /* Begin copying all of the elements */
4263 if ( hv_exists((HV *)ver, "qv", 2) )
4264 hv_store((HV *)hv, "qv", 2, &PL_sv_yes, 0);
4266 if ( hv_exists((HV *)ver, "alpha", 5) )
4267 hv_store((HV *)hv, "alpha", 5, &PL_sv_yes, 0);
4269 if ( hv_exists((HV*)ver, "width", 5 ) )
4271 const I32 width = SvIV(*hv_fetchs((HV*)ver, "width", FALSE));
4272 hv_store((HV *)hv, "width", 5, newSViv(width), 0);
4275 sav = (AV *)SvRV(*hv_fetchs((HV*)ver, "version", FALSE));
4276 /* This will get reblessed later if a derived class*/
4277 for ( key = 0; key <= av_len(sav); key++ )
4279 const I32 rev = SvIV(*av_fetch(sav, key, FALSE));
4280 av_push(av, newSViv(rev));
4283 hv_store((HV *)hv, "version", 7, newRV_noinc((SV *)av), 0);
4288 const MAGIC* const mg = SvVSTRING_mg(ver);
4289 if ( mg ) { /* already a v-string */
4290 const STRLEN len = mg->mg_len;
4291 char * const version = savepvn( (const char*)mg->mg_ptr, len);
4292 sv_setpvn(rv,version,len);
4297 sv_setsv(rv,ver); /* make a duplicate */
4302 return upg_version(rv);
4306 =for apidoc upg_version
4308 In-place upgrade of the supplied SV to a version object.
4310 SV *sv = upg_version(SV *sv);
4312 Returns a pointer to the upgraded SV.
4318 Perl_upg_version(pTHX_ SV *ver)
4320 const char *version, *s;
4326 if ( SvNOK(ver) ) /* may get too much accuracy */
4329 #ifdef USE_LOCALE_NUMERIC
4330 char *loc = setlocale(LC_NUMERIC, "C");
4332 STRLEN len = my_snprintf(tbuf, sizeof(tbuf), "%.9"NVff, SvNVX(ver));
4333 #ifdef USE_LOCALE_NUMERIC
4334 setlocale(LC_NUMERIC, loc);
4336 while (tbuf[len-1] == '0' && len > 0) len--;
4337 version = savepvn(tbuf, len);
4340 else if ( (mg = SvVSTRING_mg(ver)) ) { /* already a v-string */
4341 version = savepvn( (const char*)mg->mg_ptr,mg->mg_len );
4345 else /* must be a string or something like a string */
4347 version = savepv(SvPV_nolen(ver));
4350 s = scan_version(version, ver, qv);
4352 if(ckWARN(WARN_MISC))
4353 Perl_warner(aTHX_ packWARN(WARN_MISC),
4354 "Version string '%s' contains invalid data; "
4355 "ignoring: '%s'", version, s);
4363 Validates that the SV contains a valid version object.
4365 bool vverify(SV *vobj);
4367 Note that it only confirms the bare minimum structure (so as not to get
4368 confused by derived classes which may contain additional hash entries):
4372 =item * The SV contains a [reference to a] hash
4374 =item * The hash contains a "version" key
4376 =item * The "version" key has [a reference to] an AV as its value
4384 Perl_vverify(pTHX_ SV *vs)
4390 /* see if the appropriate elements exist */
4391 if ( SvTYPE(vs) == SVt_PVHV
4392 && hv_exists((HV*)vs, "version", 7)
4393 && (sv = SvRV(*hv_fetchs((HV*)vs, "version", FALSE)))
4394 && SvTYPE(sv) == SVt_PVAV )
4403 Accepts a version object and returns the normalized floating
4404 point representation. Call like:
4408 NOTE: you can pass either the object directly or the SV
4409 contained within the RV.
4415 Perl_vnumify(pTHX_ SV *vs)
4420 SV * const sv = newSV(0);
4426 Perl_croak(aTHX_ "Invalid version object");
4428 /* see if various flags exist */
4429 if ( hv_exists((HV*)vs, "alpha", 5 ) )
4431 if ( hv_exists((HV*)vs, "width", 5 ) )
4432 width = SvIV(*hv_fetchs((HV*)vs, "width", FALSE));
4437 /* attempt to retrieve the version array */
4438 if ( !(av = (AV *)SvRV(*hv_fetchs((HV*)vs, "version", FALSE)) ) ) {
4450 digit = SvIV(*av_fetch(av, 0, 0));
4451 Perl_sv_setpvf(aTHX_ sv, "%d.", (int)PERL_ABS(digit));
4452 for ( i = 1 ; i < len ; i++ )
4454 digit = SvIV(*av_fetch(av, i, 0));
4456 const int denom = (width == 2 ? 10 : 100);
4457 const div_t term = div((int)PERL_ABS(digit),denom);
4458 Perl_sv_catpvf(aTHX_ sv, "%0*d_%d", width, term.quot, term.rem);
4461 Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
4467 digit = SvIV(*av_fetch(av, len, 0));
4468 if ( alpha && width == 3 ) /* alpha version */
4470 Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit);
4474 sv_catpvs(sv, "000");
4482 Accepts a version object and returns the normalized string
4483 representation. Call like:
4487 NOTE: you can pass either the object directly or the SV
4488 contained within the RV.
4494 Perl_vnormal(pTHX_ SV *vs)
4498 SV * const sv = newSV(0);
4504 Perl_croak(aTHX_ "Invalid version object");
4506 if ( hv_exists((HV*)vs, "alpha", 5 ) )
4508 av = (AV *)SvRV(*hv_fetchs((HV*)vs, "version", FALSE));
4516 digit = SvIV(*av_fetch(av, 0, 0));
4517 Perl_sv_setpvf(aTHX_ sv, "v%"IVdf, (IV)digit);
4518 for ( i = 1 ; i < len ; i++ ) {
4519 digit = SvIV(*av_fetch(av, i, 0));
4520 Perl_sv_catpvf(aTHX_ sv, ".%"IVdf, (IV)digit);
4525 /* handle last digit specially */
4526 digit = SvIV(*av_fetch(av, len, 0));
4528 Perl_sv_catpvf(aTHX_ sv, "_%"IVdf, (IV)digit);
4530 Perl_sv_catpvf(aTHX_ sv, ".%"IVdf, (IV)digit);
4533 if ( len <= 2 ) { /* short version, must be at least three */
4534 for ( len = 2 - len; len != 0; len-- )
4541 =for apidoc vstringify
4543 In order to maintain maximum compatibility with earlier versions
4544 of Perl, this function will return either the floating point
4545 notation or the multiple dotted notation, depending on whether
4546 the original version contained 1 or more dots, respectively
4552 Perl_vstringify(pTHX_ SV *vs)
4558 Perl_croak(aTHX_ "Invalid version object");
4560 if ( hv_exists((HV *)vs, "qv", 2) )
4569 Version object aware cmp. Both operands must already have been
4570 converted into version objects.
4576 Perl_vcmp(pTHX_ SV *lhv, SV *rhv)
4579 bool lalpha = FALSE;
4580 bool ralpha = FALSE;
4589 if ( !vverify(lhv) )
4590 Perl_croak(aTHX_ "Invalid version object");
4592 if ( !vverify(rhv) )
4593 Perl_croak(aTHX_ "Invalid version object");
4595 /* get the left hand term */
4596 lav = (AV *)SvRV(*hv_fetchs((HV*)lhv, "version", FALSE));
4597 if ( hv_exists((HV*)lhv, "alpha", 5 ) )
4600 /* and the right hand term */
4601 rav = (AV *)SvRV(*hv_fetchs((HV*)rhv, "version", FALSE));
4602 if ( hv_exists((HV*)rhv, "alpha", 5 ) )
4610 while ( i <= m && retval == 0 )
4612 left = SvIV(*av_fetch(lav,i,0));
4613 right = SvIV(*av_fetch(rav,i,0));
4621 /* tiebreaker for alpha with identical terms */
4622 if ( retval == 0 && l == r && left == right && ( lalpha || ralpha ) )
4624 if ( lalpha && !ralpha )
4628 else if ( ralpha && !lalpha)
4634 if ( l != r && retval == 0 ) /* possible match except for trailing 0's */
4638 while ( i <= r && retval == 0 )
4640 if ( SvIV(*av_fetch(rav,i,0)) != 0 )
4641 retval = -1; /* not a match after all */
4647 while ( i <= l && retval == 0 )
4649 if ( SvIV(*av_fetch(lav,i,0)) != 0 )
4650 retval = +1; /* not a match after all */
4658 #if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET) && defined(AF_INET) && defined(PF_INET) && defined(SOCK_DGRAM) && defined(HAS_SELECT)
4659 # define EMULATE_SOCKETPAIR_UDP
4662 #ifdef EMULATE_SOCKETPAIR_UDP
4664 S_socketpair_udp (int fd[2]) {
4666 /* Fake a datagram socketpair using UDP to localhost. */
4667 int sockets[2] = {-1, -1};
4668 struct sockaddr_in addresses[2];
4670 Sock_size_t size = sizeof(struct sockaddr_in);
4671 unsigned short port;
4674 memset(&addresses, 0, sizeof(addresses));
4677 sockets[i] = PerlSock_socket(AF_INET, SOCK_DGRAM, PF_INET);
4678 if (sockets[i] == -1)
4679 goto tidy_up_and_fail;
4681 addresses[i].sin_family = AF_INET;
4682 addresses[i].sin_addr.s_addr = htonl(INADDR_LOOPBACK);
4683 addresses[i].sin_port = 0; /* kernel choses port. */
4684 if (PerlSock_bind(sockets[i], (struct sockaddr *) &addresses[i],
4685 sizeof(struct sockaddr_in)) == -1)
4686 goto tidy_up_and_fail;
4689 /* Now have 2 UDP sockets. Find out which port each is connected to, and
4690 for each connect the other socket to it. */
4693 if (PerlSock_getsockname(sockets[i], (struct sockaddr *) &addresses[i],
4695 goto tidy_up_and_fail;
4696 if (size != sizeof(struct sockaddr_in))
4697 goto abort_tidy_up_and_fail;
4698 /* !1 is 0, !0 is 1 */
4699 if (PerlSock_connect(sockets[!i], (struct sockaddr *) &addresses[i],
4700 sizeof(struct sockaddr_in)) == -1)
4701 goto tidy_up_and_fail;
4704 /* Now we have 2 sockets connected to each other. I don't trust some other
4705 process not to have already sent a packet to us (by random) so send
4706 a packet from each to the other. */
4709 /* I'm going to send my own port number. As a short.
4710 (Who knows if someone somewhere has sin_port as a bitfield and needs
4711 this routine. (I'm assuming crays have socketpair)) */
4712 port = addresses[i].sin_port;
4713 got = PerlLIO_write(sockets[i], &port, sizeof(port));
4714 if (got != sizeof(port)) {
4716 goto tidy_up_and_fail;
4717 goto abort_tidy_up_and_fail;
4721 /* Packets sent. I don't trust them to have arrived though.
4722 (As I understand it Solaris TCP stack is multithreaded. Non-blocking
4723 connect to localhost will use a second kernel thread. In 2.6 the
4724 first thread running the connect() returns before the second completes,
4725 so EINPROGRESS> In 2.7 the improved stack is faster and connect()
4726 returns 0. Poor programs have tripped up. One poor program's authors'
4727 had a 50-1 reverse stock split. Not sure how connected these were.)
4728 So I don't trust someone not to have an unpredictable UDP stack.
4732 struct timeval waitfor = {0, 100000}; /* You have 0.1 seconds */
4733 int max = sockets[1] > sockets[0] ? sockets[1] : sockets[0];
4737 FD_SET((unsigned int)sockets[0], &rset);
4738 FD_SET((unsigned int)sockets[1], &rset);
4740 got = PerlSock_select(max + 1, &rset, NULL, NULL, &waitfor);
4741 if (got != 2 || !FD_ISSET(sockets[0], &rset)
4742 || !FD_ISSET(sockets[1], &rset)) {
4743 /* I hope this is portable and appropriate. */
4745 goto tidy_up_and_fail;
4746 goto abort_tidy_up_and_fail;
4750 /* And the paranoia department even now doesn't trust it to have arrive
4751 (hence MSG_DONTWAIT). Or that what arrives was sent by us. */
4753 struct sockaddr_in readfrom;
4754 unsigned short buffer[2];
4759 got = PerlSock_recvfrom(sockets[i], (char *) &buffer,
4760 sizeof(buffer), MSG_DONTWAIT,
4761 (struct sockaddr *) &readfrom, &size);
4763 got = PerlSock_recvfrom(sockets[i], (char *) &buffer,
4765 (struct sockaddr *) &readfrom, &size);
4769 goto tidy_up_and_fail;
4770 if (got != sizeof(port)
4771 || size != sizeof(struct sockaddr_in)
4772 /* Check other socket sent us its port. */
4773 || buffer[0] != (unsigned short) addresses[!i].sin_port
4774 /* Check kernel says we got the datagram from that socket */
4775 || readfrom.sin_family != addresses[!i].sin_family
4776 || readfrom.sin_addr.s_addr != addresses[!i].sin_addr.s_addr
4777 || readfrom.sin_port != addresses[!i].sin_port)
4778 goto abort_tidy_up_and_fail;
4781 /* My caller (my_socketpair) has validated that this is non-NULL */
4784 /* I hereby declare this connection open. May God bless all who cross
4788 abort_tidy_up_and_fail:
4789 errno = ECONNABORTED;
4792 const int save_errno = errno;
4793 if (sockets[0] != -1)
4794 PerlLIO_close(sockets[0]);
4795 if (sockets[1] != -1)
4796 PerlLIO_close(sockets[1]);
4801 #endif /* EMULATE_SOCKETPAIR_UDP */
4803 #if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET) && defined(AF_INET) && defined(PF_INET)
4805 Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
4806 /* Stevens says that family must be AF_LOCAL, protocol 0.
4807 I'm going to enforce that, then ignore it, and use TCP (or UDP). */
4812 struct sockaddr_in listen_addr;
4813 struct sockaddr_in connect_addr;
4818 || family != AF_UNIX
4821 errno = EAFNOSUPPORT;
4829 #ifdef EMULATE_SOCKETPAIR_UDP
4830 if (type == SOCK_DGRAM)
4831 return S_socketpair_udp(fd);
4834 listener = PerlSock_socket(AF_INET, type, 0);
4837 memset(&listen_addr, 0, sizeof(listen_addr));
4838 listen_addr.sin_family = AF_INET;
4839 listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
4840 listen_addr.sin_port = 0; /* kernel choses port. */
4841 if (PerlSock_bind(listener, (struct sockaddr *) &listen_addr,
4842 sizeof(listen_addr)) == -1)
4843 goto tidy_up_and_fail;
4844 if (PerlSock_listen(listener, 1) == -1)
4845 goto tidy_up_and_fail;
4847 connector = PerlSock_socket(AF_INET, type, 0);
4848 if (connector == -1)
4849 goto tidy_up_and_fail;
4850 /* We want to find out the port number to connect to. */
4851 size = sizeof(connect_addr);
4852 if (PerlSock_getsockname(listener, (struct sockaddr *) &connect_addr,
4854 goto tidy_up_and_fail;
4855 if (size != sizeof(connect_addr))
4856 goto abort_tidy_up_and_fail;
4857 if (PerlSock_connect(connector, (struct sockaddr *) &connect_addr,
4858 sizeof(connect_addr)) == -1)
4859 goto tidy_up_and_fail;
4861 size = sizeof(listen_addr);
4862 acceptor = PerlSock_accept(listener, (struct sockaddr *) &listen_addr,
4865 goto tidy_up_and_fail;
4866 if (size != sizeof(listen_addr))
4867 goto abort_tidy_up_and_fail;
4868 PerlLIO_close(listener);
4869 /* Now check we are talking to ourself by matching port and host on the
4871 if (PerlSock_getsockname(connector, (struct sockaddr *) &connect_addr,
4873 goto tidy_up_and_fail;
4874 if (size != sizeof(connect_addr)
4875 || listen_addr.sin_family != connect_addr.sin_family
4876 || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr
4877 || listen_addr.sin_port != connect_addr.sin_port) {
4878 goto abort_tidy_up_and_fail;
4884 abort_tidy_up_and_fail:
4886 errno = ECONNABORTED; /* This would be the standard thing to do. */
4888 # ifdef ECONNREFUSED
4889 errno = ECONNREFUSED; /* E.g. Symbian does not have ECONNABORTED. */
4891 errno = ETIMEDOUT; /* Desperation time. */
4896 const int save_errno = errno;
4898 PerlLIO_close(listener);
4899 if (connector != -1)
4900 PerlLIO_close(connector);
4902 PerlLIO_close(acceptor);
4908 /* In any case have a stub so that there's code corresponding
4909 * to the my_socketpair in global.sym. */
4911 Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
4912 #ifdef HAS_SOCKETPAIR
4913 return socketpair(family, type, protocol, fd);
4922 =for apidoc sv_nosharing
4924 Dummy routine which "shares" an SV when there is no sharing module present.
4925 Or "locks" it. Or "unlocks" it. In other words, ignores its single SV argument.
4926 Exists to avoid test for a NULL function pointer and because it could
4927 potentially warn under some level of strict-ness.
4933 Perl_sv_nosharing(pTHX_ SV *sv)
4935 PERL_UNUSED_CONTEXT;
4936 PERL_UNUSED_ARG(sv);
4940 Perl_parse_unicode_opts(pTHX_ const char **popt)
4942 const char *p = *popt;
4947 opt = (U32) atoi(p);
4950 if (*p && *p != '\n' && *p != '\r')
4951 Perl_croak(aTHX_ "Unknown Unicode option letter '%c'", *p);
4956 case PERL_UNICODE_STDIN:
4957 opt |= PERL_UNICODE_STDIN_FLAG; break;
4958 case PERL_UNICODE_STDOUT:
4959 opt |= PERL_UNICODE_STDOUT_FLAG; break;
4960 case PERL_UNICODE_STDERR:
4961 opt |= PERL_UNICODE_STDERR_FLAG; break;
4962 case PERL_UNICODE_STD:
4963 opt |= PERL_UNICODE_STD_FLAG; break;
4964 case PERL_UNICODE_IN:
4965 opt |= PERL_UNICODE_IN_FLAG; break;
4966 case PERL_UNICODE_OUT:
4967 opt |= PERL_UNICODE_OUT_FLAG; break;
4968 case PERL_UNICODE_INOUT:
4969 opt |= PERL_UNICODE_INOUT_FLAG; break;
4970 case PERL_UNICODE_LOCALE:
4971 opt |= PERL_UNICODE_LOCALE_FLAG; break;
4972 case PERL_UNICODE_ARGV:
4973 opt |= PERL_UNICODE_ARGV_FLAG; break;
4974 case PERL_UNICODE_UTF8CACHEASSERT:
4975 opt |= PERL_UNICODE_UTF8CACHEASSERT_FLAG; break;
4977 if (*p != '\n' && *p != '\r')
4979 "Unknown Unicode option letter '%c'", *p);
4985 opt = PERL_UNICODE_DEFAULT_FLAGS;
4987 if (opt & ~PERL_UNICODE_ALL_FLAGS)
4988 Perl_croak(aTHX_ "Unknown Unicode option value %"UVuf,
4989 (UV) (opt & ~PERL_UNICODE_ALL_FLAGS));
5001 * This is really just a quick hack which grabs various garbage
5002 * values. It really should be a real hash algorithm which
5003 * spreads the effect of every input bit onto every output bit,
5004 * if someone who knows about such things would bother to write it.
5005 * Might be a good idea to add that function to CORE as well.
5006 * No numbers below come from careful analysis or anything here,
5007 * except they are primes and SEED_C1 > 1E6 to get a full-width
5008 * value from (tv_sec * SEED_C1 + tv_usec). The multipliers should
5009 * probably be bigger too.
5012 # define SEED_C1 1000003
5013 #define SEED_C4 73819
5015 # define SEED_C1 25747
5016 #define SEED_C4 20639
5020 #define SEED_C5 26107
5022 #ifndef PERL_NO_DEV_RANDOM
5027 # include <starlet.h>
5028 /* when[] = (low 32 bits, high 32 bits) of time since epoch
5029 * in 100-ns units, typically incremented ever 10 ms. */
5030 unsigned int when[2];
5032 # ifdef HAS_GETTIMEOFDAY
5033 struct timeval when;
5039 /* This test is an escape hatch, this symbol isn't set by Configure. */
5040 #ifndef PERL_NO_DEV_RANDOM
5041 #ifndef PERL_RANDOM_DEVICE
5042 /* /dev/random isn't used by default because reads from it will block
5043 * if there isn't enough entropy available. You can compile with
5044 * PERL_RANDOM_DEVICE to it if you'd prefer Perl to block until there
5045 * is enough real entropy to fill the seed. */
5046 # define PERL_RANDOM_DEVICE "/dev/urandom"
5048 fd = PerlLIO_open(PERL_RANDOM_DEVICE, 0);
5050 if (PerlLIO_read(fd, (void*)&u, sizeof u) != sizeof u)
5059 _ckvmssts(sys$gettim(when));
5060 u = (U32)SEED_C1 * when[0] + (U32)SEED_C2 * when[1];
5062 # ifdef HAS_GETTIMEOFDAY
5063 PerlProc_gettimeofday(&when,NULL);
5064 u = (U32)SEED_C1 * when.tv_sec + (U32)SEED_C2 * when.tv_usec;
5067 u = (U32)SEED_C1 * when;
5070 u += SEED_C3 * (U32)PerlProc_getpid();
5071 u += SEED_C4 * (U32)PTR2UV(PL_stack_sp);
5072 #ifndef PLAN9 /* XXX Plan9 assembler chokes on this; fix needed */
5073 u += SEED_C5 * (U32)PTR2UV(&when);
5079 Perl_get_hash_seed(pTHX)
5082 const char *s = PerlEnv_getenv("PERL_HASH_SEED");
5088 if (s && isDIGIT(*s))
5089 myseed = (UV)Atoul(s);
5091 #ifdef USE_HASH_SEED_EXPLICIT
5095 /* Compute a random seed */
5096 (void)seedDrand01((Rand_seed_t)seed());
5097 myseed = (UV)(Drand01() * (NV)UV_MAX);
5098 #if RANDBITS < (UVSIZE * 8)
5099 /* Since there are not enough randbits to to reach all
5100 * the bits of a UV, the low bits might need extra
5101 * help. Sum in another random number that will
5102 * fill in the low bits. */
5104 (UV)(Drand01() * (NV)((1 << ((UVSIZE * 8 - RANDBITS))) - 1));
5105 #endif /* RANDBITS < (UVSIZE * 8) */
5106 if (myseed == 0) { /* Superparanoia. */
5107 myseed = (UV)(Drand01() * (NV)UV_MAX); /* One more chance. */
5109 Perl_croak(aTHX_ "Your random numbers are not that random");
5112 PL_rehash_seed_set = TRUE;
5119 Perl_stashpv_hvname_match(pTHX_ const COP *c, const HV *hv)
5121 const char * const stashpv = CopSTASHPV(c);
5122 const char * const name = HvNAME_get(hv);
5123 PERL_UNUSED_CONTEXT;
5125 if (stashpv == name)
5127 if (stashpv && name)
5128 if (strEQ(stashpv, name))
5135 #ifdef PERL_GLOBAL_STRUCT
5138 Perl_init_global_struct(pTHX)
5140 struct perl_vars *plvarsp = NULL;
5141 #ifdef PERL_GLOBAL_STRUCT
5142 # define PERL_GLOBAL_STRUCT_INIT
5143 # include "opcode.h" /* the ppaddr and check */
5144 const IV nppaddr = sizeof(Gppaddr)/sizeof(Perl_ppaddr_t);
5145 const IV ncheck = sizeof(Gcheck) /sizeof(Perl_check_t);
5146 # ifdef PERL_GLOBAL_STRUCT_PRIVATE
5147 /* PerlMem_malloc() because can't use even safesysmalloc() this early. */
5148 plvarsp = (struct perl_vars*)PerlMem_malloc(sizeof(struct perl_vars));
5152 plvarsp = PL_VarsPtr;
5153 # endif /* PERL_GLOBAL_STRUCT_PRIVATE */
5159 # define PERLVAR(var,type) /**/
5160 # define PERLVARA(var,n,type) /**/
5161 # define PERLVARI(var,type,init) plvarsp->var = init;
5162 # define PERLVARIC(var,type,init) plvarsp->var = init;
5163 # define PERLVARISC(var,init) Copy(init, plvarsp->var, sizeof(init), char);
5164 # include "perlvars.h"
5170 # ifdef PERL_GLOBAL_STRUCT
5171 plvarsp->Gppaddr = PerlMem_malloc(nppaddr * sizeof(Perl_ppaddr_t));
5172 if (!plvarsp->Gppaddr)
5174 plvarsp->Gcheck = PerlMem_malloc(ncheck * sizeof(Perl_check_t));
5175 if (!plvarsp->Gcheck)
5177 Copy(Gppaddr, plvarsp->Gppaddr, nppaddr, Perl_ppaddr_t);
5178 Copy(Gcheck, plvarsp->Gcheck, ncheck, Perl_check_t);
5180 # ifdef PERL_SET_VARS
5181 PERL_SET_VARS(plvarsp);
5183 # undef PERL_GLOBAL_STRUCT_INIT
5188 #endif /* PERL_GLOBAL_STRUCT */
5190 #ifdef PERL_GLOBAL_STRUCT
5193 Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp)
5195 #ifdef PERL_GLOBAL_STRUCT
5196 # ifdef PERL_UNSET_VARS
5197 PERL_UNSET_VARS(plvarsp);
5199 free(plvarsp->Gppaddr);
5200 free(plvarsp->Gcheck);
5201 # ifdef PERL_GLOBAL_STRUCT_PRIVATE
5207 #endif /* PERL_GLOBAL_STRUCT */
5212 * PERL_MEM_LOG: the Perl_mem_log_..() will be compiled.
5214 * PERL_MEM_LOG_ENV: if defined, during run time the environment
5215 * variable PERL_MEM_LOG will be consulted, and if the integer value
5216 * of that is true, the logging will happen. (The default is to
5217 * always log if the PERL_MEM_LOG define was in effect.)
5221 * PERL_MEM_LOG_SPRINTF_BUF_SIZE: size of a (stack-allocated) buffer
5222 * the Perl_mem_log_...() will use (either via sprintf or snprintf).
5224 #define PERL_MEM_LOG_SPRINTF_BUF_SIZE 128
5227 * PERL_MEM_LOG_FD: the file descriptor the Perl_mem_log_...() will
5228 * log to. You can also define in compile time PERL_MEM_LOG_ENV_FD,
5229 * in which case the environment variable PERL_MEM_LOG_FD will be
5230 * consulted for the file descriptor number to use.
5232 #ifndef PERL_MEM_LOG_FD
5233 # define PERL_MEM_LOG_FD 2 /* If STDERR is too boring for you. */
5237 Perl_mem_log_alloc(const UV n, const UV typesize, const char *typename, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname)
5239 #ifdef PERL_MEM_LOG_STDERR
5240 # if defined(PERL_MEM_LOG_ENV) || defined(PERL_MEM_LOG_ENV_FD)
5243 # ifdef PERL_MEM_LOG_ENV
5244 s = getenv("PERL_MEM_LOG");
5245 if (s ? atoi(s) : 0)
5248 /* We can't use SVs or PerlIO for obvious reasons,
5249 * so we'll use stdio and low-level IO instead. */
5250 char buf[PERL_MEM_LOG_SPRINTF_BUF_SIZE];
5251 # ifdef PERL_MEM_LOG_TIMESTAMP
5253 # ifdef HAS_GETTIMEOFDAY
5254 gettimeofday(&tv, 0);
5256 /* If there are other OS specific ways of hires time than
5257 * gettimeofday() (see ext/Time/HiRes), the easiest way is
5258 * probably that they would be used to fill in the struct
5265 # ifdef PERL_MEM_LOG_TIMESTAMP
5268 "alloc: %s:%d:%s: %"IVdf" %"UVuf
5269 " %s = %"IVdf": %"UVxf"\n",
5270 # ifdef PERL_MEM_LOG_TIMESTAMP
5271 (int)tv.tv_sec, (int)tv.tv_usec,
5273 filename, linenumber, funcname, n, typesize,
5274 typename, n * typesize, PTR2UV(newalloc));
5275 # ifdef PERL_MEM_LOG_ENV_FD
5276 s = PerlEnv_getenv("PERL_MEM_LOG_FD");
5277 PerlLIO_write(s ? atoi(s) : PERL_MEM_LOG_FD, buf, len);
5279 PerlLIO_write(PERL_MEM_LOG_FD, buf, len);
5288 Perl_mem_log_realloc(const UV n, const UV typesize, const char *typename, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname)
5290 #ifdef PERL_MEM_LOG_STDERR
5291 # if defined(PERL_MEM_LOG_ENV) || defined(PERL_MEM_LOG_ENV_FD)
5294 # ifdef PERL_MEM_LOG_ENV
5295 s = PerlEnv_getenv("PERL_MEM_LOG");
5296 if (s ? atoi(s) : 0)
5299 /* We can't use SVs or PerlIO for obvious reasons,
5300 * so we'll use stdio and low-level IO instead. */
5301 char buf[PERL_MEM_LOG_SPRINTF_BUF_SIZE];
5302 # ifdef PERL_MEM_LOG_TIMESTAMP
5304 gettimeofday(&tv, 0);
5310 # ifdef PERL_MEM_LOG_TIMESTAMP
5313 "realloc: %s:%d:%s: %"IVdf" %"UVuf
5314 " %s = %"IVdf": %"UVxf" -> %"UVxf"\n",
5315 # ifdef PERL_MEM_LOG_TIMESTAMP
5316 (int)tv.tv_sec, (int)tv.tv_usec,
5318 filename, linenumber, funcname, n, typesize,
5319 typename, n * typesize, PTR2UV(oldalloc),
5321 # ifdef PERL_MEM_LOG_ENV_FD
5322 s = PerlEnv_getenv("PERL_MEM_LOG_FD");
5323 PerlLIO_write(s ? atoi(s) : PERL_MEM_LOG_FD, buf, len);
5325 PerlLIO_write(PERL_MEM_LOG_FD, buf, len);
5334 Perl_mem_log_free(Malloc_t oldalloc, const char *filename, const int linenumber, const char *funcname)
5336 #ifdef PERL_MEM_LOG_STDERR
5337 # if defined(PERL_MEM_LOG_ENV) || defined(PERL_MEM_LOG_ENV_FD)
5340 # ifdef PERL_MEM_LOG_ENV
5341 s = PerlEnv_getenv("PERL_MEM_LOG");
5342 if (s ? atoi(s) : 0)
5345 /* We can't use SVs or PerlIO for obvious reasons,
5346 * so we'll use stdio and low-level IO instead. */
5347 char buf[PERL_MEM_LOG_SPRINTF_BUF_SIZE];
5348 # ifdef PERL_MEM_LOG_TIMESTAMP
5350 gettimeofday(&tv, 0);
5356 # ifdef PERL_MEM_LOG_TIMESTAMP
5359 "free: %s:%d:%s: %"UVxf"\n",
5360 # ifdef PERL_MEM_LOG_TIMESTAMP
5361 (int)tv.tv_sec, (int)tv.tv_usec,
5363 filename, linenumber, funcname,
5365 # ifdef PERL_MEM_LOG_ENV_FD
5366 s = PerlEnv_getenv("PERL_MEM_LOG_FD");
5367 PerlLIO_write(s ? atoi(s) : PERL_MEM_LOG_FD, buf, len);
5369 PerlLIO_write(PERL_MEM_LOG_FD, buf, len);
5377 #endif /* PERL_MEM_LOG */
5380 =for apidoc my_sprintf
5382 The C library C<sprintf>, wrapped if necessary, to ensure that it will return
5383 the length of the string written to the buffer. Only rare pre-ANSI systems
5384 need the wrapper function - usually this is a direct call to C<sprintf>.
5388 #ifndef SPRINTF_RETURNS_STRLEN
5390 Perl_my_sprintf(char *buffer, const char* pat, ...)
5393 va_start(args, pat);
5394 vsprintf(buffer, pat, args);
5396 return strlen(buffer);
5401 =for apidoc my_snprintf
5403 The C library C<snprintf> functionality, if available and
5404 standards-compliant (uses C<vsnprintf>, actually). However, if the
5405 C<vsnprintf> is not available, will unfortunately use the unsafe
5406 C<vsprintf> which can overrun the buffer (there is an overrun check,
5407 but that may be too late). Consider using C<sv_vcatpvf> instead, or
5408 getting C<vsnprintf>.
5413 Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
5418 va_start(ap, format);
5419 #ifdef HAS_VSNPRINTF
5420 retval = vsnprintf(buffer, len, format, ap);
5422 retval = vsprintf(buffer, format, ap);
5425 /* vsnprintf() shows failure with >= len, vsprintf() with < 0 */
5426 if (retval < 0 || (len > 0 && (Size_t)retval >= len))
5427 Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
5432 =for apidoc my_vsnprintf
5434 The C library C<vsnprintf> if available and standards-compliant.
5435 However, if if the C<vsnprintf> is not available, will unfortunately
5436 use the unsafe C<vsprintf> which can overrun the buffer (there is an
5437 overrun check, but that may be too late). Consider using
5438 C<sv_vcatpvf> instead, or getting C<vsnprintf>.
5443 Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap)
5449 Perl_va_copy(ap, apc);
5450 # ifdef HAS_VSNPRINTF
5451 retval = vsnprintf(buffer, len, format, apc);
5453 retval = vsprintf(buffer, format, apc);
5456 # ifdef HAS_VSNPRINTF
5457 retval = vsnprintf(buffer, len, format, ap);
5459 retval = vsprintf(buffer, format, ap);
5461 #endif /* #ifdef NEED_VA_COPY */
5462 /* vsnprintf() shows failure with >= len, vsprintf() with < 0 */
5463 if (retval < 0 || (len > 0 && (Size_t)retval >= len))
5464 Perl_croak(aTHX_ "panic: my_vsnprintf buffer overflow");
5469 Perl_my_clearenv(pTHX)
5472 #if ! defined(PERL_MICRO)
5473 # if defined(PERL_IMPLICIT_SYS) || defined(WIN32)
5475 # else /* ! (PERL_IMPLICIT_SYS || WIN32) */
5476 # if defined(USE_ENVIRON_ARRAY)
5477 # if defined(USE_ITHREADS)
5478 /* only the parent thread can clobber the process environment */
5479 if (PL_curinterp == aTHX)
5480 # endif /* USE_ITHREADS */
5482 # if ! defined(PERL_USE_SAFE_PUTENV)
5483 if ( !PL_use_safe_putenv) {
5485 if (environ == PL_origenviron)
5486 environ = (char**)safesysmalloc(sizeof(char*));
5488 for (i = 0; environ[i]; i++)
5489 (void)safesysfree(environ[i]);
5492 # else /* PERL_USE_SAFE_PUTENV */
5493 # if defined(HAS_CLEARENV)
5495 # elif defined(HAS_UNSETENV)
5496 int bsiz = 80; /* Most envvar names will be shorter than this. */
5497 int bufsiz = bsiz * sizeof(char); /* sizeof(char) paranoid? */
5498 char *buf = (char*)safesysmalloc(bufsiz);
5499 while (*environ != NULL) {
5500 char *e = strchr(*environ, '=');
5501 int l = e ? e - *environ : (int)strlen(*environ);
5503 (void)safesysfree(buf);
5504 bsiz = l + 1; /* + 1 for the \0. */
5505 buf = (char*)safesysmalloc(bufsiz);
5507 my_strlcpy(buf, *environ, l + 1);
5508 (void)unsetenv(buf);
5510 (void)safesysfree(buf);
5511 # else /* ! HAS_CLEARENV && ! HAS_UNSETENV */
5512 /* Just null environ and accept the leakage. */
5514 # endif /* HAS_CLEARENV || HAS_UNSETENV */
5515 # endif /* ! PERL_USE_SAFE_PUTENV */
5517 # endif /* USE_ENVIRON_ARRAY */
5518 # endif /* PERL_IMPLICIT_SYS || WIN32 */
5519 #endif /* PERL_MICRO */
5522 #ifdef PERL_IMPLICIT_CONTEXT
5524 /* Implements the MY_CXT_INIT macro. The first time a module is loaded,
5525 the global PL_my_cxt_index is incremented, and that value is assigned to
5526 that module's static my_cxt_index (who's address is passed as an arg).
5527 Then, for each interpreter this function is called for, it makes sure a
5528 void* slot is available to hang the static data off, by allocating or
5529 extending the interpreter's PL_my_cxt_list array */
5531 #ifndef PERL_GLOBAL_STRUCT_PRIVATE
5533 Perl_my_cxt_init(pTHX_ int *index, size_t size)
5538 /* this module hasn't been allocated an index yet */
5539 MUTEX_LOCK(&PL_my_ctx_mutex);
5540 *index = PL_my_cxt_index++;
5541 MUTEX_UNLOCK(&PL_my_ctx_mutex);
5544 /* make sure the array is big enough */
5545 if (PL_my_cxt_size <= *index) {
5546 if (PL_my_cxt_size) {
5547 while (PL_my_cxt_size <= *index)
5548 PL_my_cxt_size *= 2;
5549 Renew(PL_my_cxt_list, PL_my_cxt_size, void *);
5552 PL_my_cxt_size = 16;
5553 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
5556 /* newSV() allocates one more than needed */
5557 p = (void*)SvPVX(newSV(size-1));
5558 PL_my_cxt_list[*index] = p;
5559 Zero(p, size, char);
5563 #else /* #ifndef PERL_GLOBAL_STRUCT_PRIVATE */
5566 Perl_my_cxt_index(pTHX_ const char *my_cxt_key)
5571 for (index = 0; index < PL_my_cxt_index; index++) {
5572 const char *key = PL_my_cxt_keys[index];
5573 /* try direct pointer compare first - there are chances to success,
5574 * and it's much faster.
5576 if ((key == my_cxt_key) || strEQ(key, my_cxt_key))
5583 Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size)
5589 index = Perl_my_cxt_index(aTHX_ my_cxt_key);
5591 /* this module hasn't been allocated an index yet */
5592 MUTEX_LOCK(&PL_my_ctx_mutex);
5593 index = PL_my_cxt_index++;
5594 MUTEX_UNLOCK(&PL_my_ctx_mutex);
5597 /* make sure the array is big enough */
5598 if (PL_my_cxt_size <= index) {
5599 int old_size = PL_my_cxt_size;
5601 if (PL_my_cxt_size) {
5602 while (PL_my_cxt_size <= index)
5603 PL_my_cxt_size *= 2;
5604 Renew(PL_my_cxt_list, PL_my_cxt_size, void *);
5605 Renew(PL_my_cxt_keys, PL_my_cxt_size, const char *);
5608 PL_my_cxt_size = 16;
5609 Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
5610 Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
5612 for (i = old_size; i < PL_my_cxt_size; i++) {
5613 PL_my_cxt_keys[i] = 0;
5614 PL_my_cxt_list[i] = 0;
5617 PL_my_cxt_keys[index] = my_cxt_key;
5618 /* newSV() allocates one more than needed */
5619 p = (void*)SvPVX(newSV(size-1));
5620 PL_my_cxt_list[index] = p;
5621 Zero(p, size, char);
5624 #endif /* #ifndef PERL_GLOBAL_STRUCT_PRIVATE */
5625 #endif /* PERL_IMPLICIT_CONTEXT */
5629 Perl_my_strlcat(char *dst, const char *src, Size_t size)
5631 Size_t used, length, copy;
5634 length = strlen(src);
5635 if (size > 0 && used < size - 1) {
5636 copy = (length >= size - used) ? size - used - 1 : length;
5637 memcpy(dst + used, src, copy);
5638 dst[used + copy] = '\0';
5640 return used + length;
5646 Perl_my_strlcpy(char *dst, const char *src, Size_t size)
5648 Size_t length, copy;
5650 length = strlen(src);
5652 copy = (length >= size) ? size - 1 : length;
5653 memcpy(dst, src, copy);
5660 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && (_MSC_VER < 1400) && (WINVER < 0x0500)
5661 /* VC7 or 7.1, building with pre-VC7 runtime libraries. */
5662 long _ftol( double ); /* Defined by VC6 C libs. */
5663 long _ftol2( double dblSource ) { return _ftol( dblSource ); }
5667 Perl_get_db_sub(pTHX_ SV **svp, CV *cv)
5670 SV * const dbsv = GvSVn(PL_DBsub);
5671 /* We do not care about using sv to call CV;
5672 * it's for informational purposes only.
5676 if (!PERLDB_SUB_NN) {
5677 GV * const gv = CvGV(cv);
5679 if ( svp && ((CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
5680 || strEQ(GvNAME(gv), "END")
5681 || ((GvCV(gv) != cv) && /* Could be imported, and old sub redefined. */
5682 !( (SvTYPE(*svp) == SVt_PVGV) && (GvCV((GV*)*svp) == cv) )))) {
5683 /* Use GV from the stack as a fallback. */
5684 /* GV is potentially non-unique, or contain different CV. */
5685 SV * const tmp = newRV((SV*)cv);
5686 sv_setsv(dbsv, tmp);
5690 gv_efullname3(dbsv, gv, NULL);
5694 const int type = SvTYPE(dbsv);
5695 if (type < SVt_PVIV && type != SVt_IV)
5696 sv_upgrade(dbsv, SVt_PVIV);
5697 (void)SvIOK_on(dbsv);
5698 SvIV_set(dbsv, PTR2IV(cv)); /* Do it the quickest way */
5704 * c-indentation-style: bsd
5706 * indent-tabs-mode: t
5709 * ex: set ts=8 sts=4 sw=4 noet: