This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to threads 2.15
[perl5.git] / util.c
1 /*    util.c
2  *
3  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4  *    2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
5  *
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.
8  *
9  */
10
11 /*
12  * 'Very useful, no doubt, that was to Saruman; yet it seems that he was
13  *  not content.'                                    --Gandalf to Pippin
14  *
15  *     [p.598 of _The Lord of the Rings_, III/xi: "The Palantír"]
16  */
17
18 /* This file contains assorted utility routines.
19  * Which is a polite way of saying any stuff that people couldn't think of
20  * a better place for. Amongst other things, it includes the warning and
21  * dieing stuff, plus wrappers for malloc code.
22  */
23
24 #include "EXTERN.h"
25 #define PERL_IN_UTIL_C
26 #include "perl.h"
27 #include "reentr.h"
28
29 #if defined(USE_PERLIO)
30 #include "perliol.h" /* For PerlIOUnix_refcnt */
31 #endif
32
33 #ifndef PERL_MICRO
34 #include <signal.h>
35 #ifndef SIG_ERR
36 # define SIG_ERR ((Sighandler_t) -1)
37 #endif
38 #endif
39
40 #include <math.h>
41 #include <stdlib.h>
42
43 #ifdef __Lynx__
44 /* Missing protos on LynxOS */
45 int putenv(char *);
46 #endif
47
48 #ifdef __amigaos__
49 # include "amigaos4/amigaio.h"
50 #endif
51
52 #ifdef HAS_SELECT
53 # ifdef I_SYS_SELECT
54 #  include <sys/select.h>
55 # endif
56 #endif
57
58 #ifdef USE_C_BACKTRACE
59 #  ifdef I_BFD
60 #    define USE_BFD
61 #    ifdef PERL_DARWIN
62 #      undef USE_BFD /* BFD is useless in OS X. */
63 #    endif
64 #    ifdef USE_BFD
65 #      include <bfd.h>
66 #    endif
67 #  endif
68 #  ifdef I_DLFCN
69 #    include <dlfcn.h>
70 #  endif
71 #  ifdef I_EXECINFO
72 #    include <execinfo.h>
73 #  endif
74 #endif
75
76 #ifdef PERL_DEBUG_READONLY_COW
77 # include <sys/mman.h>
78 #endif
79
80 #define FLUSH
81
82 /* NOTE:  Do not call the next three routines directly.  Use the macros
83  * in handy.h, so that we can easily redefine everything to do tracking of
84  * allocated hunks back to the original New to track down any memory leaks.
85  * XXX This advice seems to be widely ignored :-(   --AD  August 1996.
86  */
87
88 #if defined (DEBUGGING) || defined(PERL_IMPLICIT_SYS) || defined (PERL_TRACK_MEMPOOL)
89 #  define ALWAYS_NEED_THX
90 #endif
91
92 #if defined(PERL_TRACK_MEMPOOL) && defined(PERL_DEBUG_READONLY_COW)
93 static void
94 S_maybe_protect_rw(pTHX_ struct perl_memory_debug_header *header)
95 {
96     if (header->readonly
97      && mprotect(header, header->size, PROT_READ|PROT_WRITE))
98         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
99                          header, header->size, errno);
100 }
101
102 static void
103 S_maybe_protect_ro(pTHX_ struct perl_memory_debug_header *header)
104 {
105     if (header->readonly
106      && mprotect(header, header->size, PROT_READ))
107         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
108                          header, header->size, errno);
109 }
110 # define maybe_protect_rw(foo) S_maybe_protect_rw(aTHX_ foo)
111 # define maybe_protect_ro(foo) S_maybe_protect_ro(aTHX_ foo)
112 #else
113 # define maybe_protect_rw(foo) NOOP
114 # define maybe_protect_ro(foo) NOOP
115 #endif
116
117 #if defined(PERL_TRACK_MEMPOOL) || defined(PERL_DEBUG_READONLY_COW)
118  /* Use memory_debug_header */
119 # define USE_MDH
120 # if (defined(PERL_POISON) && defined(PERL_TRACK_MEMPOOL)) \
121    || defined(PERL_DEBUG_READONLY_COW)
122 #  define MDH_HAS_SIZE
123 # endif
124 #endif
125
126 /* paranoid version of system's malloc() */
127
128 Malloc_t
129 Perl_safesysmalloc(MEM_SIZE size)
130 {
131 #ifdef ALWAYS_NEED_THX
132     dTHX;
133 #endif
134     Malloc_t ptr;
135
136 #ifdef USE_MDH
137     if (size + PERL_MEMORY_DEBUG_HEADER_SIZE < size)
138         goto out_of_memory;
139     size += PERL_MEMORY_DEBUG_HEADER_SIZE;
140 #endif
141 #ifdef DEBUGGING
142     if ((SSize_t)size < 0)
143         Perl_croak_nocontext("panic: malloc, size=%" UVuf, (UV) size);
144 #endif
145     if (!size) size = 1;        /* malloc(0) is NASTY on our system */
146 #ifdef PERL_DEBUG_READONLY_COW
147     if ((ptr = mmap(0, size, PROT_READ|PROT_WRITE,
148                     MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) {
149         perror("mmap failed");
150         abort();
151     }
152 #else
153     ptr = (Malloc_t)PerlMem_malloc(size?size:1);
154 #endif
155     PERL_ALLOC_CHECK(ptr);
156     if (ptr != NULL) {
157 #ifdef USE_MDH
158         struct perl_memory_debug_header *const header
159             = (struct perl_memory_debug_header *)ptr;
160 #endif
161
162 #ifdef PERL_POISON
163         PoisonNew(((char *)ptr), size, char);
164 #endif
165
166 #ifdef PERL_TRACK_MEMPOOL
167         header->interpreter = aTHX;
168         /* Link us into the list.  */
169         header->prev = &PL_memory_debug_header;
170         header->next = PL_memory_debug_header.next;
171         PL_memory_debug_header.next = header;
172         maybe_protect_rw(header->next);
173         header->next->prev = header;
174         maybe_protect_ro(header->next);
175 #  ifdef PERL_DEBUG_READONLY_COW
176         header->readonly = 0;
177 #  endif
178 #endif
179 #ifdef MDH_HAS_SIZE
180         header->size = size;
181 #endif
182         ptr = (Malloc_t)((char*)ptr+PERL_MEMORY_DEBUG_HEADER_SIZE);
183         DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) malloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
184
185     }
186     else {
187 #ifdef USE_MDH
188       out_of_memory:
189 #endif
190         {
191 #ifndef ALWAYS_NEED_THX
192             dTHX;
193 #endif
194             if (PL_nomemok)
195                 ptr =  NULL;
196             else
197                 croak_no_mem();
198         }
199     }
200     return ptr;
201 }
202
203 /* paranoid version of system's realloc() */
204
205 Malloc_t
206 Perl_safesysrealloc(Malloc_t where,MEM_SIZE size)
207 {
208 #ifdef ALWAYS_NEED_THX
209     dTHX;
210 #endif
211     Malloc_t ptr;
212 #ifdef PERL_DEBUG_READONLY_COW
213     const MEM_SIZE oldsize = where
214         ? ((struct perl_memory_debug_header *)((char *)where - PERL_MEMORY_DEBUG_HEADER_SIZE))->size
215         : 0;
216 #endif
217 #if !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) && !defined(PERL_MICRO)
218     Malloc_t PerlMem_realloc();
219 #endif /* !defined(STANDARD_C) && !defined(HAS_REALLOC_PROTOTYPE) */
220
221     if (!size) {
222         safesysfree(where);
223         ptr = NULL;
224     }
225     else if (!where) {
226         ptr = safesysmalloc(size);
227     }
228     else {
229 #ifdef USE_MDH
230         where = (Malloc_t)((char*)where-PERL_MEMORY_DEBUG_HEADER_SIZE);
231         if (size + PERL_MEMORY_DEBUG_HEADER_SIZE < size)
232             goto out_of_memory;
233         size += PERL_MEMORY_DEBUG_HEADER_SIZE;
234         {
235             struct perl_memory_debug_header *const header
236                 = (struct perl_memory_debug_header *)where;
237
238 # ifdef PERL_TRACK_MEMPOOL
239             if (header->interpreter != aTHX) {
240                 Perl_croak_nocontext("panic: realloc from wrong pool, %p!=%p",
241                                      header->interpreter, aTHX);
242             }
243             assert(header->next->prev == header);
244             assert(header->prev->next == header);
245 #  ifdef PERL_POISON
246             if (header->size > size) {
247                 const MEM_SIZE freed_up = header->size - size;
248                 char *start_of_freed = ((char *)where) + size;
249                 PoisonFree(start_of_freed, freed_up, char);
250             }
251 #  endif
252 # endif
253 # ifdef MDH_HAS_SIZE
254             header->size = size;
255 # endif
256         }
257 #endif
258 #ifdef DEBUGGING
259         if ((SSize_t)size < 0)
260             Perl_croak_nocontext("panic: realloc, size=%" UVuf, (UV)size);
261 #endif
262 #ifdef PERL_DEBUG_READONLY_COW
263         if ((ptr = mmap(0, size, PROT_READ|PROT_WRITE,
264                         MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) {
265             perror("mmap failed");
266             abort();
267         }
268         Copy(where,ptr,oldsize < size ? oldsize : size,char);
269         if (munmap(where, oldsize)) {
270             perror("munmap failed");
271             abort();
272         }
273 #else
274         ptr = (Malloc_t)PerlMem_realloc(where,size);
275 #endif
276         PERL_ALLOC_CHECK(ptr);
277
278     /* MUST do this fixup first, before doing ANYTHING else, as anything else
279        might allocate memory/free/move memory, and until we do the fixup, it
280        may well be chasing (and writing to) free memory.  */
281         if (ptr != NULL) {
282 #ifdef PERL_TRACK_MEMPOOL
283             struct perl_memory_debug_header *const header
284                 = (struct perl_memory_debug_header *)ptr;
285
286 #  ifdef PERL_POISON
287             if (header->size < size) {
288                 const MEM_SIZE fresh = size - header->size;
289                 char *start_of_fresh = ((char *)ptr) + size;
290                 PoisonNew(start_of_fresh, fresh, char);
291             }
292 #  endif
293
294             maybe_protect_rw(header->next);
295             header->next->prev = header;
296             maybe_protect_ro(header->next);
297             maybe_protect_rw(header->prev);
298             header->prev->next = header;
299             maybe_protect_ro(header->prev);
300 #endif
301             ptr = (Malloc_t)((char*)ptr+PERL_MEMORY_DEBUG_HEADER_SIZE);
302         }
303
304     /* In particular, must do that fixup above before logging anything via
305      *printf(), as it can reallocate memory, which can cause SEGVs.  */
306
307         DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
308         DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
309
310         if (ptr == NULL) {
311 #ifdef USE_MDH
312           out_of_memory:
313 #endif
314             {
315 #ifndef ALWAYS_NEED_THX
316                 dTHX;
317 #endif
318                 if (PL_nomemok)
319                     ptr = NULL;
320                 else
321                     croak_no_mem();
322             }
323         }
324     }
325     return ptr;
326 }
327
328 /* safe version of system's free() */
329
330 Free_t
331 Perl_safesysfree(Malloc_t where)
332 {
333 #ifdef ALWAYS_NEED_THX
334     dTHX;
335 #endif
336     DEBUG_m( PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) free\n",PTR2UV(where),(long)PL_an++));
337     if (where) {
338 #ifdef USE_MDH
339         Malloc_t where_intrn = (Malloc_t)((char*)where-PERL_MEMORY_DEBUG_HEADER_SIZE);
340         {
341             struct perl_memory_debug_header *const header
342                 = (struct perl_memory_debug_header *)where_intrn;
343
344 # ifdef MDH_HAS_SIZE
345             const MEM_SIZE size = header->size;
346 # endif
347 # ifdef PERL_TRACK_MEMPOOL
348             if (header->interpreter != aTHX) {
349                 Perl_croak_nocontext("panic: free from wrong pool, %p!=%p",
350                                      header->interpreter, aTHX);
351             }
352             if (!header->prev) {
353                 Perl_croak_nocontext("panic: duplicate free");
354             }
355             if (!(header->next))
356                 Perl_croak_nocontext("panic: bad free, header->next==NULL");
357             if (header->next->prev != header || header->prev->next != header) {
358                 Perl_croak_nocontext("panic: bad free, ->next->prev=%p, "
359                                      "header=%p, ->prev->next=%p",
360                                      header->next->prev, header,
361                                      header->prev->next);
362             }
363             /* Unlink us from the chain.  */
364             maybe_protect_rw(header->next);
365             header->next->prev = header->prev;
366             maybe_protect_ro(header->next);
367             maybe_protect_rw(header->prev);
368             header->prev->next = header->next;
369             maybe_protect_ro(header->prev);
370             maybe_protect_rw(header);
371 #  ifdef PERL_POISON
372             PoisonNew(where_intrn, size, char);
373 #  endif
374             /* Trigger the duplicate free warning.  */
375             header->next = NULL;
376 # endif
377 # ifdef PERL_DEBUG_READONLY_COW
378             if (munmap(where_intrn, size)) {
379                 perror("munmap failed");
380                 abort();
381             }   
382 # endif
383         }
384 #else
385         Malloc_t where_intrn = where;
386 #endif /* USE_MDH */
387 #ifndef PERL_DEBUG_READONLY_COW
388         PerlMem_free(where_intrn);
389 #endif
390     }
391 }
392
393 /* safe version of system's calloc() */
394
395 Malloc_t
396 Perl_safesyscalloc(MEM_SIZE count, MEM_SIZE size)
397 {
398 #ifdef ALWAYS_NEED_THX
399     dTHX;
400 #endif
401     Malloc_t ptr;
402 #if defined(USE_MDH) || defined(DEBUGGING)
403     MEM_SIZE total_size = 0;
404 #endif
405
406     /* Even though calloc() for zero bytes is strange, be robust. */
407     if (size && (count <= MEM_SIZE_MAX / size)) {
408 #if defined(USE_MDH) || defined(DEBUGGING)
409         total_size = size * count;
410 #endif
411     }
412     else
413         croak_memory_wrap();
414 #ifdef USE_MDH
415     if (PERL_MEMORY_DEBUG_HEADER_SIZE <= MEM_SIZE_MAX - (MEM_SIZE)total_size)
416         total_size += PERL_MEMORY_DEBUG_HEADER_SIZE;
417     else
418         croak_memory_wrap();
419 #endif
420 #ifdef DEBUGGING
421     if ((SSize_t)size < 0 || (SSize_t)count < 0)
422         Perl_croak_nocontext("panic: calloc, size=%" UVuf ", count=%" UVuf,
423                              (UV)size, (UV)count);
424 #endif
425 #ifdef PERL_DEBUG_READONLY_COW
426     if ((ptr = mmap(0, total_size ? total_size : 1, PROT_READ|PROT_WRITE,
427                     MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) {
428         perror("mmap failed");
429         abort();
430     }
431 #elif defined(PERL_TRACK_MEMPOOL)
432     /* Have to use malloc() because we've added some space for our tracking
433        header.  */
434     /* malloc(0) is non-portable. */
435     ptr = (Malloc_t)PerlMem_malloc(total_size ? total_size : 1);
436 #else
437     /* Use calloc() because it might save a memset() if the memory is fresh
438        and clean from the OS.  */
439     if (count && size)
440         ptr = (Malloc_t)PerlMem_calloc(count, size);
441     else /* calloc(0) is non-portable. */
442         ptr = (Malloc_t)PerlMem_calloc(count ? count : 1, size ? size : 1);
443 #endif
444     PERL_ALLOC_CHECK(ptr);
445     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) calloc %ld x %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)count,(long)total_size));
446     if (ptr != NULL) {
447 #ifdef USE_MDH
448         {
449             struct perl_memory_debug_header *const header
450                 = (struct perl_memory_debug_header *)ptr;
451
452 #  ifndef PERL_DEBUG_READONLY_COW
453             memset((void*)ptr, 0, total_size);
454 #  endif
455 #  ifdef PERL_TRACK_MEMPOOL
456             header->interpreter = aTHX;
457             /* Link us into the list.  */
458             header->prev = &PL_memory_debug_header;
459             header->next = PL_memory_debug_header.next;
460             PL_memory_debug_header.next = header;
461             maybe_protect_rw(header->next);
462             header->next->prev = header;
463             maybe_protect_ro(header->next);
464 #    ifdef PERL_DEBUG_READONLY_COW
465             header->readonly = 0;
466 #    endif
467 #  endif
468 #  ifdef MDH_HAS_SIZE
469             header->size = total_size;
470 #  endif
471             ptr = (Malloc_t)((char*)ptr+PERL_MEMORY_DEBUG_HEADER_SIZE);
472         }
473 #endif
474         return ptr;
475     }
476     else {
477 #ifndef ALWAYS_NEED_THX
478         dTHX;
479 #endif
480         if (PL_nomemok)
481             return NULL;
482         croak_no_mem();
483     }
484 }
485
486 /* These must be defined when not using Perl's malloc for binary
487  * compatibility */
488
489 #ifndef MYMALLOC
490
491 Malloc_t Perl_malloc (MEM_SIZE nbytes)
492 {
493 #ifdef PERL_IMPLICIT_SYS
494     dTHX;
495 #endif
496     return (Malloc_t)PerlMem_malloc(nbytes);
497 }
498
499 Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size)
500 {
501 #ifdef PERL_IMPLICIT_SYS
502     dTHX;
503 #endif
504     return (Malloc_t)PerlMem_calloc(elements, size);
505 }
506
507 Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes)
508 {
509 #ifdef PERL_IMPLICIT_SYS
510     dTHX;
511 #endif
512     return (Malloc_t)PerlMem_realloc(where, nbytes);
513 }
514
515 Free_t   Perl_mfree (Malloc_t where)
516 {
517 #ifdef PERL_IMPLICIT_SYS
518     dTHX;
519 #endif
520     PerlMem_free(where);
521 }
522
523 #endif
524
525 /* copy a string up to some (non-backslashed) delimiter, if any.
526  * With allow_escape, converts \<delimiter> to <delimiter>, while leaves
527  * \<non-delimiter> as-is.
528  * Returns the position in the src string of the closing delimiter, if
529  * any, or returns fromend otherwise.
530  * This is the internal implementation for Perl_delimcpy and
531  * Perl_delimcpy_no_escape.
532  */
533
534 static char *
535 S_delimcpy_intern(char *to, const char *toend, const char *from,
536            const char *fromend, int delim, I32 *retlen,
537            const bool allow_escape)
538 {
539     I32 tolen;
540
541     PERL_ARGS_ASSERT_DELIMCPY;
542
543     for (tolen = 0; from < fromend; from++, tolen++) {
544         if (allow_escape && *from == '\\' && from + 1 < fromend) {
545             if (from[1] != delim) {
546                 if (to < toend)
547                     *to++ = *from;
548                 tolen++;
549             }
550             from++;
551         }
552         else if (*from == delim)
553             break;
554         if (to < toend)
555             *to++ = *from;
556     }
557     if (to < toend)
558         *to = '\0';
559     *retlen = tolen;
560     return (char *)from;
561 }
562
563 char *
564 Perl_delimcpy(char *to, const char *toend, const char *from, const char *fromend, int delim, I32 *retlen)
565 {
566     PERL_ARGS_ASSERT_DELIMCPY;
567
568     return S_delimcpy_intern(to, toend, from, fromend, delim, retlen, 1);
569 }
570
571 char *
572 Perl_delimcpy_no_escape(char *to, const char *toend, const char *from,
573                         const char *fromend, int delim, I32 *retlen)
574 {
575     PERL_ARGS_ASSERT_DELIMCPY_NO_ESCAPE;
576
577     return S_delimcpy_intern(to, toend, from, fromend, delim, retlen, 0);
578 }
579
580 /*
581 =head1 Miscellaneous Functions
582
583 =for apidoc Am|char *|ninstr|char * big|char * bigend|char * little|char * little_end
584
585 Find the first (leftmost) occurrence of a sequence of bytes within another
586 sequence.  This is the Perl version of C<strstr()>, extended to handle
587 arbitrary sequences, potentially containing embedded C<NUL> characters (C<NUL>
588 is what the initial C<n> in the function name stands for; some systems have an
589 equivalent, C<memmem()>, but with a somewhat different API).
590
591 Another way of thinking about this function is finding a needle in a haystack.
592 C<big> points to the first byte in the haystack.  C<big_end> points to one byte
593 beyond the final byte in the haystack.  C<little> points to the first byte in
594 the needle.  C<little_end> points to one byte beyond the final byte in the
595 needle.  All the parameters must be non-C<NULL>.
596
597 The function returns C<NULL> if there is no occurrence of C<little> within
598 C<big>.  If C<little> is the empty string, C<big> is returned.
599
600 Because this function operates at the byte level, and because of the inherent
601 characteristics of UTF-8 (or UTF-EBCDIC), it will work properly if both the
602 needle and the haystack are strings with the same UTF-8ness, but not if the
603 UTF-8ness differs.
604
605 =cut
606
607 */
608
609 char *
610 Perl_ninstr(const char *big, const char *bigend, const char *little, const char *lend)
611 {
612     PERL_ARGS_ASSERT_NINSTR;
613
614 #ifdef HAS_MEMMEM
615     return ninstr(big, bigend, little, lend);
616 #else
617
618     if (little >= lend)
619         return (char*)big;
620     {
621         const char first = *little;
622         bigend -= lend - little++;
623     OUTER:
624         while (big <= bigend) {
625             if (*big++ == first) {
626                 const char *s, *x;
627                 for (x=big,s=little; s < lend; x++,s++) {
628                     if (*s != *x)
629                         goto OUTER;
630                 }
631                 return (char*)(big-1);
632             }
633         }
634     }
635     return NULL;
636
637 #endif
638
639 }
640
641 /*
642 =head1 Miscellaneous Functions
643
644 =for apidoc Am|char *|rninstr|char * big|char * bigend|char * little|char * little_end
645
646 Like C<L</ninstr>>, but instead finds the final (rightmost) occurrence of a
647 sequence of bytes within another sequence, returning C<NULL> if there is no
648 such occurrence.
649
650 =cut
651
652 */
653
654 char *
655 Perl_rninstr(const char *big, const char *bigend, const char *little, const char *lend)
656 {
657     const char *bigbeg;
658     const I32 first = *little;
659     const char * const littleend = lend;
660
661     PERL_ARGS_ASSERT_RNINSTR;
662
663     if (little >= littleend)
664         return (char*)bigend;
665     bigbeg = big;
666     big = bigend - (littleend - little++);
667     while (big >= bigbeg) {
668         const char *s, *x;
669         if (*big-- != first)
670             continue;
671         for (x=big+2,s=little; s < littleend; /**/ ) {
672             if (*s != *x)
673                 break;
674             else {
675                 x++;
676                 s++;
677             }
678         }
679         if (s >= littleend)
680             return (char*)(big+1);
681     }
682     return NULL;
683 }
684
685 /* As a space optimization, we do not compile tables for strings of length
686    0 and 1, and for strings of length 2 unless FBMcf_TAIL.  These are
687    special-cased in fbm_instr().
688
689    If FBMcf_TAIL, the table is created as if the string has a trailing \n. */
690
691 /*
692 =head1 Miscellaneous Functions
693
694 =for apidoc fbm_compile
695
696 Analyses the string in order to make fast searches on it using C<fbm_instr()>
697 -- the Boyer-Moore algorithm.
698
699 =cut
700 */
701
702 void
703 Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
704 {
705     const U8 *s;
706     STRLEN i;
707     STRLEN len;
708     U32 frequency = 256;
709     MAGIC *mg;
710     PERL_DEB( STRLEN rarest = 0 );
711
712     PERL_ARGS_ASSERT_FBM_COMPILE;
713
714     if (isGV_with_GP(sv) || SvROK(sv))
715         return;
716
717     if (SvVALID(sv))
718         return;
719
720     if (flags & FBMcf_TAIL) {
721         MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
722         sv_catpvs(sv, "\n");            /* Taken into account in fbm_instr() */
723         if (mg && mg->mg_len >= 0)
724             mg->mg_len++;
725     }
726     if (!SvPOK(sv) || SvNIOKp(sv))
727         s = (U8*)SvPV_force_mutable(sv, len);
728     else s = (U8 *)SvPV_mutable(sv, len);
729     if (len == 0)               /* TAIL might be on a zero-length string. */
730         return;
731     SvUPGRADE(sv, SVt_PVMG);
732     SvIOK_off(sv);
733     SvNOK_off(sv);
734
735     /* add PERL_MAGIC_bm magic holding the FBM lookup table */
736
737     assert(!mg_find(sv, PERL_MAGIC_bm));
738     mg = sv_magicext(sv, NULL, PERL_MAGIC_bm, &PL_vtbl_bm, NULL, 0);
739     assert(mg);
740
741     if (len > 2) {
742         /* Shorter strings are special-cased in Perl_fbm_instr(), and don't use
743            the BM table.  */
744         const U8 mlen = (len>255) ? 255 : (U8)len;
745         const unsigned char *const sb = s + len - mlen; /* first char (maybe) */
746         U8 *table;
747
748         Newx(table, 256, U8);
749         memset((void*)table, mlen, 256);
750         mg->mg_ptr = (char *)table;
751         mg->mg_len = 256;
752
753         s += len - 1; /* last char */
754         i = 0;
755         while (s >= sb) {
756             if (table[*s] == mlen)
757                 table[*s] = (U8)i;
758             s--, i++;
759         }
760     }
761
762     s = (const unsigned char*)(SvPVX_const(sv));        /* deeper magic */
763     for (i = 0; i < len; i++) {
764         if (PL_freq[s[i]] < frequency) {
765             PERL_DEB( rarest = i );
766             frequency = PL_freq[s[i]];
767         }
768     }
769     BmUSEFUL(sv) = 100;                 /* Initial value */
770     ((XPVNV*)SvANY(sv))->xnv_u.xnv_bm_tail = cBOOL(flags & FBMcf_TAIL);
771     DEBUG_r(PerlIO_printf(Perl_debug_log, "rarest char %c at %" UVuf "\n",
772                           s[rarest], (UV)rarest));
773 }
774
775
776 /*
777 =for apidoc fbm_instr
778
779 Returns the location of the SV in the string delimited by C<big> and
780 C<bigend> (C<bigend>) is the char following the last char).
781 It returns C<NULL> if the string can't be found.  The C<sv>
782 does not have to be C<fbm_compiled>, but the search will not be as fast
783 then.
784
785 =cut
786
787 If SvTAIL(littlestr) is true, a fake "\n" was appended to to the string
788 during FBM compilation due to FBMcf_TAIL in flags. It indicates that
789 the littlestr must be anchored to the end of bigstr (or to any \n if
790 FBMrf_MULTILINE).
791
792 E.g. The regex compiler would compile /abc/ to a littlestr of "abc",
793 while /abc$/ compiles to "abc\n" with SvTAIL() true.
794
795 A littlestr of "abc", !SvTAIL matches as /abc/;
796 a littlestr of "ab\n", SvTAIL matches as:
797    without FBMrf_MULTILINE: /ab\n?\z/
798    with    FBMrf_MULTILINE: /ab\n/ || /ab\z/;
799
800 (According to Ilya from 1999; I don't know if this is still true, DAPM 2015):
801   "If SvTAIL is actually due to \Z or \z, this gives false positives
802   if multiline".
803 */
804
805
806 char *
807 Perl_fbm_instr(pTHX_ unsigned char *big, unsigned char *bigend, SV *littlestr, U32 flags)
808 {
809     unsigned char *s;
810     STRLEN l;
811     const unsigned char *little = (const unsigned char *)SvPV_const(littlestr,l);
812     STRLEN littlelen = l;
813     const I32 multiline = flags & FBMrf_MULTILINE;
814     bool valid = SvVALID(littlestr);
815     bool tail = valid ? cBOOL(SvTAIL(littlestr)) : FALSE;
816
817     PERL_ARGS_ASSERT_FBM_INSTR;
818
819     if ((STRLEN)(bigend - big) < littlelen) {
820         if (     tail
821              && ((STRLEN)(bigend - big) == littlelen - 1)
822              && (littlelen == 1
823                  || (*big == *little &&
824                      memEQ((char *)big, (char *)little, littlelen - 1))))
825             return (char*)big;
826         return NULL;
827     }
828
829     switch (littlelen) { /* Special cases for 0, 1 and 2  */
830     case 0:
831         return (char*)big;              /* Cannot be SvTAIL! */
832
833     case 1:
834             if (tail && !multiline) /* Anchor only! */
835                 /* [-1] is safe because we know that bigend != big.  */
836                 return (char *) (bigend - (bigend[-1] == '\n'));
837
838             s = (unsigned char *)memchr((void*)big, *little, bigend-big);
839             if (s)
840                 return (char *)s;
841             if (tail)
842                 return (char *) bigend;
843             return NULL;
844
845     case 2:
846         if (tail && !multiline) {
847             /* a littlestr with SvTAIL must be of the form "X\n" (where X
848              * is a single char). It is anchored, and can only match
849              * "....X\n"  or  "....X" */
850             if (bigend[-2] == *little && bigend[-1] == '\n')
851                 return (char*)bigend - 2;
852             if (bigend[-1] == *little)
853                 return (char*)bigend - 1;
854             return NULL;
855         }
856
857         {
858             /* memchr() is likely to be very fast, possibly using whatever
859              * hardware support is available, such as checking a whole
860              * cache line in one instruction.
861              * So for a 2 char pattern, calling memchr() is likely to be
862              * faster than running FBM, or rolling our own. The previous
863              * version of this code was roll-your-own which typically
864              * only needed to read every 2nd char, which was good back in
865              * the day, but no longer.
866              */
867             unsigned char c1 = little[0];
868             unsigned char c2 = little[1];
869
870             /* *** for all this case, bigend points to the last char,
871              * not the trailing \0: this makes the conditions slightly
872              * simpler */
873             bigend--;
874             s = big;
875             if (c1 != c2) {
876                 while (s < bigend) {
877                     /* do a quick test for c1 before calling memchr();
878                      * this avoids the expensive fn call overhead when
879                      * there are lots of c1's */
880                     if (LIKELY(*s != c1)) {
881                         s++;
882                         s = (unsigned char *)memchr((void*)s, c1, bigend - s);
883                         if (!s)
884                             break;
885                     }
886                     if (s[1] == c2)
887                         return (char*)s;
888
889                     /* failed; try searching for c2 this time; that way
890                      * we don't go pathologically slow when the string
891                      * consists mostly of c1's or vice versa.
892                      */
893                     s += 2;
894                     if (s > bigend)
895                         break;
896                     s = (unsigned char *)memchr((void*)s, c2, bigend - s + 1);
897                     if (!s)
898                         break;
899                     if (s[-1] == c1)
900                         return (char*)s - 1;
901                 }
902             }
903             else {
904                 /* c1, c2 the same */
905                 while (s < bigend) {
906                     if (s[0] == c1) {
907                       got_1char:
908                         if (s[1] == c1)
909                             return (char*)s;
910                         s += 2;
911                     }
912                     else {
913                         s++;
914                         s = (unsigned char *)memchr((void*)s, c1, bigend - s);
915                         if (!s || s >= bigend)
916                             break;
917                         goto got_1char;
918                     }
919                 }
920             }
921
922             /* failed to find 2 chars; try anchored match at end without
923              * the \n */
924             if (tail && bigend[0] == little[0])
925                 return (char *)bigend;
926             return NULL;
927         }
928
929     default:
930         break; /* Only lengths 0 1 and 2 have special-case code.  */
931     }
932
933     if (tail && !multiline) {   /* tail anchored? */
934         s = bigend - littlelen;
935         if (s >= big && bigend[-1] == '\n' && *s == *little
936             /* Automatically of length > 2 */
937             && memEQ((char*)s + 1, (char*)little + 1, littlelen - 2))
938         {
939             return (char*)s;            /* how sweet it is */
940         }
941         if (s[1] == *little
942             && memEQ((char*)s + 2, (char*)little + 1, littlelen - 2))
943         {
944             return (char*)s + 1;        /* how sweet it is */
945         }
946         return NULL;
947     }
948
949     if (!valid) {
950         /* not compiled; use Perl_ninstr() instead */
951         char * const b = ninstr((char*)big,(char*)bigend,
952                          (char*)little, (char*)little + littlelen);
953
954         assert(!tail); /* valid => FBM; tail only set on SvVALID SVs */
955         return b;
956     }
957
958     /* Do actual FBM.  */
959     if (littlelen > (STRLEN)(bigend - big))
960         return NULL;
961
962     {
963         const MAGIC *const mg = mg_find(littlestr, PERL_MAGIC_bm);
964         const unsigned char *oldlittle;
965
966         assert(mg);
967
968         --littlelen;                    /* Last char found by table lookup */
969
970         s = big + littlelen;
971         little += littlelen;            /* last char */
972         oldlittle = little;
973         if (s < bigend) {
974             const unsigned char * const table = (const unsigned char *) mg->mg_ptr;
975             const unsigned char lastc = *little;
976             I32 tmp;
977
978           top2:
979             if ((tmp = table[*s])) {
980                 /* *s != lastc; earliest position it could match now is
981                  * tmp slots further on */
982                 if ((s += tmp) >= bigend)
983                     goto check_end;
984                 if (LIKELY(*s != lastc)) {
985                     s++;
986                     s = (unsigned char *)memchr((void*)s, lastc, bigend - s);
987                     if (!s) {
988                         s = bigend;
989                         goto check_end;
990                     }
991                     goto top2;
992                 }
993             }
994
995
996             /* hand-rolled strncmp(): less expensive than calling the
997              * real function (maybe???) */
998             {
999                 unsigned char * const olds = s;
1000
1001                 tmp = littlelen;
1002
1003                 while (tmp--) {
1004                     if (*--s == *--little)
1005                         continue;
1006                     s = olds + 1;       /* here we pay the price for failure */
1007                     little = oldlittle;
1008                     if (s < bigend)     /* fake up continue to outer loop */
1009                         goto top2;
1010                     goto check_end;
1011                 }
1012                 return (char *)s;
1013             }
1014         }
1015       check_end:
1016         if ( s == bigend
1017              && tail
1018              && memEQ((char *)(bigend - littlelen),
1019                       (char *)(oldlittle - littlelen), littlelen) )
1020             return (char*)bigend - littlelen;
1021         return NULL;
1022     }
1023 }
1024
1025 /* copy a string to a safe spot */
1026
1027 /*
1028 =head1 Memory Management
1029
1030 =for apidoc savepv
1031
1032 Perl's version of C<strdup()>.  Returns a pointer to a newly allocated
1033 string which is a duplicate of C<pv>.  The size of the string is
1034 determined by C<strlen()>, which means it may not contain embedded C<NUL>
1035 characters and must have a trailing C<NUL>.  The memory allocated for the new
1036 string can be freed with the C<Safefree()> function.
1037
1038 On some platforms, Windows for example, all allocated memory owned by a thread
1039 is deallocated when that thread ends.  So if you need that not to happen, you
1040 need to use the shared memory functions, such as C<L</savesharedpv>>.
1041
1042 =cut
1043 */
1044
1045 char *
1046 Perl_savepv(pTHX_ const char *pv)
1047 {
1048     PERL_UNUSED_CONTEXT;
1049     if (!pv)
1050         return NULL;
1051     else {
1052         char *newaddr;
1053         const STRLEN pvlen = strlen(pv)+1;
1054         Newx(newaddr, pvlen, char);
1055         return (char*)memcpy(newaddr, pv, pvlen);
1056     }
1057 }
1058
1059 /* same thing but with a known length */
1060
1061 /*
1062 =for apidoc savepvn
1063
1064 Perl's version of what C<strndup()> would be if it existed.  Returns a
1065 pointer to a newly allocated string which is a duplicate of the first
1066 C<len> bytes from C<pv>, plus a trailing
1067 C<NUL> byte.  The memory allocated for
1068 the new string can be freed with the C<Safefree()> function.
1069
1070 On some platforms, Windows for example, all allocated memory owned by a thread
1071 is deallocated when that thread ends.  So if you need that not to happen, you
1072 need to use the shared memory functions, such as C<L</savesharedpvn>>.
1073
1074 =cut
1075 */
1076
1077 char *
1078 Perl_savepvn(pTHX_ const char *pv, I32 len)
1079 {
1080     char *newaddr;
1081     PERL_UNUSED_CONTEXT;
1082
1083     assert(len >= 0);
1084
1085     Newx(newaddr,len+1,char);
1086     /* Give a meaning to NULL pointer mainly for the use in sv_magic() */
1087     if (pv) {
1088         /* might not be null terminated */
1089         newaddr[len] = '\0';
1090         return (char *) CopyD(pv,newaddr,len,char);
1091     }
1092     else {
1093         return (char *) ZeroD(newaddr,len+1,char);
1094     }
1095 }
1096
1097 /*
1098 =for apidoc savesharedpv
1099
1100 A version of C<savepv()> which allocates the duplicate string in memory
1101 which is shared between threads.
1102
1103 =cut
1104 */
1105 char *
1106 Perl_savesharedpv(pTHX_ const char *pv)
1107 {
1108     char *newaddr;
1109     STRLEN pvlen;
1110
1111     PERL_UNUSED_CONTEXT;
1112
1113     if (!pv)
1114         return NULL;
1115
1116     pvlen = strlen(pv)+1;
1117     newaddr = (char*)PerlMemShared_malloc(pvlen);
1118     if (!newaddr) {
1119         croak_no_mem();
1120     }
1121     return (char*)memcpy(newaddr, pv, pvlen);
1122 }
1123
1124 /*
1125 =for apidoc savesharedpvn
1126
1127 A version of C<savepvn()> which allocates the duplicate string in memory
1128 which is shared between threads.  (With the specific difference that a C<NULL>
1129 pointer is not acceptable)
1130
1131 =cut
1132 */
1133 char *
1134 Perl_savesharedpvn(pTHX_ const char *const pv, const STRLEN len)
1135 {
1136     char *const newaddr = (char*)PerlMemShared_malloc(len + 1);
1137
1138     PERL_UNUSED_CONTEXT;
1139     /* PERL_ARGS_ASSERT_SAVESHAREDPVN; */
1140
1141     if (!newaddr) {
1142         croak_no_mem();
1143     }
1144     newaddr[len] = '\0';
1145     return (char*)memcpy(newaddr, pv, len);
1146 }
1147
1148 /*
1149 =for apidoc savesvpv
1150
1151 A version of C<savepv()>/C<savepvn()> which gets the string to duplicate from
1152 the passed in SV using C<SvPV()>
1153
1154 On some platforms, Windows for example, all allocated memory owned by a thread
1155 is deallocated when that thread ends.  So if you need that not to happen, you
1156 need to use the shared memory functions, such as C<L</savesharedsvpv>>.
1157
1158 =cut
1159 */
1160
1161 char *
1162 Perl_savesvpv(pTHX_ SV *sv)
1163 {
1164     STRLEN len;
1165     const char * const pv = SvPV_const(sv, len);
1166     char *newaddr;
1167
1168     PERL_ARGS_ASSERT_SAVESVPV;
1169
1170     ++len;
1171     Newx(newaddr,len,char);
1172     return (char *) CopyD(pv,newaddr,len,char);
1173 }
1174
1175 /*
1176 =for apidoc savesharedsvpv
1177
1178 A version of C<savesharedpv()> which allocates the duplicate string in
1179 memory which is shared between threads.
1180
1181 =cut
1182 */
1183
1184 char *
1185 Perl_savesharedsvpv(pTHX_ SV *sv)
1186 {
1187     STRLEN len;
1188     const char * const pv = SvPV_const(sv, len);
1189
1190     PERL_ARGS_ASSERT_SAVESHAREDSVPV;
1191
1192     return savesharedpvn(pv, len);
1193 }
1194
1195 /* the SV for Perl_form() and mess() is not kept in an arena */
1196
1197 STATIC SV *
1198 S_mess_alloc(pTHX)
1199 {
1200     SV *sv;
1201     XPVMG *any;
1202
1203     if (PL_phase != PERL_PHASE_DESTRUCT)
1204         return newSVpvs_flags("", SVs_TEMP);
1205
1206     if (PL_mess_sv)
1207         return PL_mess_sv;
1208
1209     /* Create as PVMG now, to avoid any upgrading later */
1210     Newx(sv, 1, SV);
1211     Newxz(any, 1, XPVMG);
1212     SvFLAGS(sv) = SVt_PVMG;
1213     SvANY(sv) = (void*)any;
1214     SvPV_set(sv, NULL);
1215     SvREFCNT(sv) = 1 << 30; /* practically infinite */
1216     PL_mess_sv = sv;
1217     return sv;
1218 }
1219
1220 #if defined(PERL_IMPLICIT_CONTEXT)
1221 char *
1222 Perl_form_nocontext(const char* pat, ...)
1223 {
1224     dTHX;
1225     char *retval;
1226     va_list args;
1227     PERL_ARGS_ASSERT_FORM_NOCONTEXT;
1228     va_start(args, pat);
1229     retval = vform(pat, &args);
1230     va_end(args);
1231     return retval;
1232 }
1233 #endif /* PERL_IMPLICIT_CONTEXT */
1234
1235 /*
1236 =head1 Miscellaneous Functions
1237 =for apidoc form
1238
1239 Takes a sprintf-style format pattern and conventional
1240 (non-SV) arguments and returns the formatted string.
1241
1242     (char *) Perl_form(pTHX_ const char* pat, ...)
1243
1244 can be used any place a string (char *) is required:
1245
1246     char * s = Perl_form("%d.%d",major,minor);
1247
1248 Uses a single private buffer so if you want to format several strings you
1249 must explicitly copy the earlier strings away (and free the copies when you
1250 are done).
1251
1252 =cut
1253 */
1254
1255 char *
1256 Perl_form(pTHX_ const char* pat, ...)
1257 {
1258     char *retval;
1259     va_list args;
1260     PERL_ARGS_ASSERT_FORM;
1261     va_start(args, pat);
1262     retval = vform(pat, &args);
1263     va_end(args);
1264     return retval;
1265 }
1266
1267 char *
1268 Perl_vform(pTHX_ const char *pat, va_list *args)
1269 {
1270     SV * const sv = mess_alloc();
1271     PERL_ARGS_ASSERT_VFORM;
1272     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
1273     return SvPVX(sv);
1274 }
1275
1276 /*
1277 =for apidoc Am|SV *|mess|const char *pat|...
1278
1279 Take a sprintf-style format pattern and argument list.  These are used to
1280 generate a string message.  If the message does not end with a newline,
1281 then it will be extended with some indication of the current location
1282 in the code, as described for L</mess_sv>.
1283
1284 Normally, the resulting message is returned in a new mortal SV.
1285 During global destruction a single SV may be shared between uses of
1286 this function.
1287
1288 =cut
1289 */
1290
1291 #if defined(PERL_IMPLICIT_CONTEXT)
1292 SV *
1293 Perl_mess_nocontext(const char *pat, ...)
1294 {
1295     dTHX;
1296     SV *retval;
1297     va_list args;
1298     PERL_ARGS_ASSERT_MESS_NOCONTEXT;
1299     va_start(args, pat);
1300     retval = vmess(pat, &args);
1301     va_end(args);
1302     return retval;
1303 }
1304 #endif /* PERL_IMPLICIT_CONTEXT */
1305
1306 SV *
1307 Perl_mess(pTHX_ const char *pat, ...)
1308 {
1309     SV *retval;
1310     va_list args;
1311     PERL_ARGS_ASSERT_MESS;
1312     va_start(args, pat);
1313     retval = vmess(pat, &args);
1314     va_end(args);
1315     return retval;
1316 }
1317
1318 const COP*
1319 Perl_closest_cop(pTHX_ const COP *cop, const OP *o, const OP *curop,
1320                        bool opnext)
1321 {
1322     /* Look for curop starting from o.  cop is the last COP we've seen. */
1323     /* opnext means that curop is actually the ->op_next of the op we are
1324        seeking. */
1325
1326     PERL_ARGS_ASSERT_CLOSEST_COP;
1327
1328     if (!o || !curop || (
1329         opnext ? o->op_next == curop && o->op_type != OP_SCOPE : o == curop
1330     ))
1331         return cop;
1332
1333     if (o->op_flags & OPf_KIDS) {
1334         const OP *kid;
1335         for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
1336             const COP *new_cop;
1337
1338             /* If the OP_NEXTSTATE has been optimised away we can still use it
1339              * the get the file and line number. */
1340
1341             if (kid->op_type == OP_NULL && kid->op_targ == OP_NEXTSTATE)
1342                 cop = (const COP *)kid;
1343
1344             /* Keep searching, and return when we've found something. */
1345
1346             new_cop = closest_cop(cop, kid, curop, opnext);
1347             if (new_cop)
1348                 return new_cop;
1349         }
1350     }
1351
1352     /* Nothing found. */
1353
1354     return NULL;
1355 }
1356
1357 /*
1358 =for apidoc Am|SV *|mess_sv|SV *basemsg|bool consume
1359
1360 Expands a message, intended for the user, to include an indication of
1361 the current location in the code, if the message does not already appear
1362 to be complete.
1363
1364 C<basemsg> is the initial message or object.  If it is a reference, it
1365 will be used as-is and will be the result of this function.  Otherwise it
1366 is used as a string, and if it already ends with a newline, it is taken
1367 to be complete, and the result of this function will be the same string.
1368 If the message does not end with a newline, then a segment such as C<at
1369 foo.pl line 37> will be appended, and possibly other clauses indicating
1370 the current state of execution.  The resulting message will end with a
1371 dot and a newline.
1372
1373 Normally, the resulting message is returned in a new mortal SV.
1374 During global destruction a single SV may be shared between uses of this
1375 function.  If C<consume> is true, then the function is permitted (but not
1376 required) to modify and return C<basemsg> instead of allocating a new SV.
1377
1378 =cut
1379 */
1380
1381 SV *
1382 Perl_mess_sv(pTHX_ SV *basemsg, bool consume)
1383 {
1384     SV *sv;
1385
1386 #if defined(USE_C_BACKTRACE) && defined(USE_C_BACKTRACE_ON_ERROR)
1387     {
1388         char *ws;
1389         UV wi;
1390         /* The PERL_C_BACKTRACE_ON_WARN must be an integer of one or more. */
1391         if ((ws = PerlEnv_getenv("PERL_C_BACKTRACE_ON_ERROR"))
1392             && grok_atoUV(ws, &wi, NULL)
1393             && wi <= PERL_INT_MAX
1394         ) {
1395             Perl_dump_c_backtrace(aTHX_ Perl_debug_log, (int)wi, 1);
1396         }
1397     }
1398 #endif
1399
1400     PERL_ARGS_ASSERT_MESS_SV;
1401
1402     if (SvROK(basemsg)) {
1403         if (consume) {
1404             sv = basemsg;
1405         }
1406         else {
1407             sv = mess_alloc();
1408             sv_setsv(sv, basemsg);
1409         }
1410         return sv;
1411     }
1412
1413     if (SvPOK(basemsg) && consume) {
1414         sv = basemsg;
1415     }
1416     else {
1417         sv = mess_alloc();
1418         sv_copypv(sv, basemsg);
1419     }
1420
1421     if (!SvCUR(sv) || *(SvEND(sv) - 1) != '\n') {
1422         /*
1423          * Try and find the file and line for PL_op.  This will usually be
1424          * PL_curcop, but it might be a cop that has been optimised away.  We
1425          * can try to find such a cop by searching through the optree starting
1426          * from the sibling of PL_curcop.
1427          */
1428
1429         if (PL_curcop) {
1430             const COP *cop =
1431                 closest_cop(PL_curcop, OpSIBLING(PL_curcop), PL_op, FALSE);
1432             if (!cop)
1433                 cop = PL_curcop;
1434
1435             if (CopLINE(cop))
1436                 Perl_sv_catpvf(aTHX_ sv, " at %s line %" IVdf,
1437                                 OutCopFILE(cop), (IV)CopLINE(cop));
1438         }
1439
1440         /* Seems that GvIO() can be untrustworthy during global destruction. */
1441         if (GvIO(PL_last_in_gv) && (SvTYPE(GvIOp(PL_last_in_gv)) == SVt_PVIO)
1442                 && IoLINES(GvIOp(PL_last_in_gv)))
1443         {
1444             STRLEN l;
1445             const bool line_mode = (RsSIMPLE(PL_rs) &&
1446                                    *SvPV_const(PL_rs,l) == '\n' && l == 1);
1447             Perl_sv_catpvf(aTHX_ sv, ", <%" SVf "> %s %" IVdf,
1448                            SVfARG(PL_last_in_gv == PL_argvgv
1449                                  ? &PL_sv_no
1450                                  : sv_2mortal(newSVhek(GvNAME_HEK(PL_last_in_gv)))),
1451                            line_mode ? "line" : "chunk",
1452                            (IV)IoLINES(GvIOp(PL_last_in_gv)));
1453         }
1454         if (PL_phase == PERL_PHASE_DESTRUCT)
1455             sv_catpvs(sv, " during global destruction");
1456         sv_catpvs(sv, ".\n");
1457     }
1458     return sv;
1459 }
1460
1461 /*
1462 =for apidoc Am|SV *|vmess|const char *pat|va_list *args
1463
1464 C<pat> and C<args> are a sprintf-style format pattern and encapsulated
1465 argument list, respectively.  These are used to generate a string message.  If
1466 the
1467 message does not end with a newline, then it will be extended with
1468 some indication of the current location in the code, as described for
1469 L</mess_sv>.
1470
1471 Normally, the resulting message is returned in a new mortal SV.
1472 During global destruction a single SV may be shared between uses of
1473 this function.
1474
1475 =cut
1476 */
1477
1478 SV *
1479 Perl_vmess(pTHX_ const char *pat, va_list *args)
1480 {
1481     SV * const sv = mess_alloc();
1482
1483     PERL_ARGS_ASSERT_VMESS;
1484
1485     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
1486     return mess_sv(sv, 1);
1487 }
1488
1489 void
1490 Perl_write_to_stderr(pTHX_ SV* msv)
1491 {
1492     IO *io;
1493     MAGIC *mg;
1494
1495     PERL_ARGS_ASSERT_WRITE_TO_STDERR;
1496
1497     if (PL_stderrgv && SvREFCNT(PL_stderrgv) 
1498         && (io = GvIO(PL_stderrgv))
1499         && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) 
1500         Perl_magic_methcall(aTHX_ MUTABLE_SV(io), mg, SV_CONST(PRINT),
1501                             G_SCALAR | G_DISCARD | G_WRITING_TO_STDERR, 1, msv);
1502     else {
1503         PerlIO * const serr = Perl_error_log;
1504
1505         do_print(msv, serr);
1506         (void)PerlIO_flush(serr);
1507     }
1508 }
1509
1510 /*
1511 =head1 Warning and Dieing
1512 */
1513
1514 /* Common code used in dieing and warning */
1515
1516 STATIC SV *
1517 S_with_queued_errors(pTHX_ SV *ex)
1518 {
1519     PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS;
1520     if (PL_errors && SvCUR(PL_errors) && !SvROK(ex)) {
1521         sv_catsv(PL_errors, ex);
1522         ex = sv_mortalcopy(PL_errors);
1523         SvCUR_set(PL_errors, 0);
1524     }
1525     return ex;
1526 }
1527
1528 STATIC bool
1529 S_invoke_exception_hook(pTHX_ SV *ex, bool warn)
1530 {
1531     HV *stash;
1532     GV *gv;
1533     CV *cv;
1534     SV **const hook = warn ? &PL_warnhook : &PL_diehook;
1535     /* sv_2cv might call Perl_croak() or Perl_warner() */
1536     SV * const oldhook = *hook;
1537
1538     if (!oldhook)
1539         return FALSE;
1540
1541     ENTER;
1542     SAVESPTR(*hook);
1543     *hook = NULL;
1544     cv = sv_2cv(oldhook, &stash, &gv, 0);
1545     LEAVE;
1546     if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) {
1547         dSP;
1548         SV *exarg;
1549
1550         ENTER;
1551         save_re_context();
1552         if (warn) {
1553             SAVESPTR(*hook);
1554             *hook = NULL;
1555         }
1556         exarg = newSVsv(ex);
1557         SvREADONLY_on(exarg);
1558         SAVEFREESV(exarg);
1559
1560         PUSHSTACKi(warn ? PERLSI_WARNHOOK : PERLSI_DIEHOOK);
1561         PUSHMARK(SP);
1562         XPUSHs(exarg);
1563         PUTBACK;
1564         call_sv(MUTABLE_SV(cv), G_DISCARD);
1565         POPSTACK;
1566         LEAVE;
1567         return TRUE;
1568     }
1569     return FALSE;
1570 }
1571
1572 /*
1573 =for apidoc Am|OP *|die_sv|SV *baseex
1574
1575 Behaves the same as L</croak_sv>, except for the return type.
1576 It should be used only where the C<OP *> return type is required.
1577 The function never actually returns.
1578
1579 =cut
1580 */
1581
1582 #ifdef _MSC_VER
1583 #  pragma warning( push )
1584 #  pragma warning( disable : 4646 ) /* warning C4646: function declared with
1585     __declspec(noreturn) has non-void return type */
1586 #  pragma warning( disable : 4645 ) /* warning C4645: function declared with
1587 __declspec(noreturn) has a return statement */
1588 #endif
1589 OP *
1590 Perl_die_sv(pTHX_ SV *baseex)
1591 {
1592     PERL_ARGS_ASSERT_DIE_SV;
1593     croak_sv(baseex);
1594     /* NOTREACHED */
1595     NORETURN_FUNCTION_END;
1596 }
1597 #ifdef _MSC_VER
1598 #  pragma warning( pop )
1599 #endif
1600
1601 /*
1602 =for apidoc Am|OP *|die|const char *pat|...
1603
1604 Behaves the same as L</croak>, except for the return type.
1605 It should be used only where the C<OP *> return type is required.
1606 The function never actually returns.
1607
1608 =cut
1609 */
1610
1611 #if defined(PERL_IMPLICIT_CONTEXT)
1612 #ifdef _MSC_VER
1613 #  pragma warning( push )
1614 #  pragma warning( disable : 4646 ) /* warning C4646: function declared with
1615     __declspec(noreturn) has non-void return type */
1616 #  pragma warning( disable : 4645 ) /* warning C4645: function declared with
1617 __declspec(noreturn) has a return statement */
1618 #endif
1619 OP *
1620 Perl_die_nocontext(const char* pat, ...)
1621 {
1622     dTHX;
1623     va_list args;
1624     va_start(args, pat);
1625     vcroak(pat, &args);
1626     NOT_REACHED; /* NOTREACHED */
1627     va_end(args);
1628     NORETURN_FUNCTION_END;
1629 }
1630 #ifdef _MSC_VER
1631 #  pragma warning( pop )
1632 #endif
1633 #endif /* PERL_IMPLICIT_CONTEXT */
1634
1635 #ifdef _MSC_VER
1636 #  pragma warning( push )
1637 #  pragma warning( disable : 4646 ) /* warning C4646: function declared with
1638     __declspec(noreturn) has non-void return type */
1639 #  pragma warning( disable : 4645 ) /* warning C4645: function declared with
1640 __declspec(noreturn) has a return statement */
1641 #endif
1642 OP *
1643 Perl_die(pTHX_ const char* pat, ...)
1644 {
1645     va_list args;
1646     va_start(args, pat);
1647     vcroak(pat, &args);
1648     NOT_REACHED; /* NOTREACHED */
1649     va_end(args);
1650     NORETURN_FUNCTION_END;
1651 }
1652 #ifdef _MSC_VER
1653 #  pragma warning( pop )
1654 #endif
1655
1656 /*
1657 =for apidoc Am|void|croak_sv|SV *baseex
1658
1659 This is an XS interface to Perl's C<die> function.
1660
1661 C<baseex> is the error message or object.  If it is a reference, it
1662 will be used as-is.  Otherwise it is used as a string, and if it does
1663 not end with a newline then it will be extended with some indication of
1664 the current location in the code, as described for L</mess_sv>.
1665
1666 The error message or object will be used as an exception, by default
1667 returning control to the nearest enclosing C<eval>, but subject to
1668 modification by a C<$SIG{__DIE__}> handler.  In any case, the C<croak_sv>
1669 function never returns normally.
1670
1671 To die with a simple string message, the L</croak> function may be
1672 more convenient.
1673
1674 =cut
1675 */
1676
1677 void
1678 Perl_croak_sv(pTHX_ SV *baseex)
1679 {
1680     SV *ex = with_queued_errors(mess_sv(baseex, 0));
1681     PERL_ARGS_ASSERT_CROAK_SV;
1682     invoke_exception_hook(ex, FALSE);
1683     die_unwind(ex);
1684 }
1685
1686 /*
1687 =for apidoc Am|void|vcroak|const char *pat|va_list *args
1688
1689 This is an XS interface to Perl's C<die> function.
1690
1691 C<pat> and C<args> are a sprintf-style format pattern and encapsulated
1692 argument list.  These are used to generate a string message.  If the
1693 message does not end with a newline, then it will be extended with
1694 some indication of the current location in the code, as described for
1695 L</mess_sv>.
1696
1697 The error message will be used as an exception, by default
1698 returning control to the nearest enclosing C<eval>, but subject to
1699 modification by a C<$SIG{__DIE__}> handler.  In any case, the C<croak>
1700 function never returns normally.
1701
1702 For historical reasons, if C<pat> is null then the contents of C<ERRSV>
1703 (C<$@>) will be used as an error message or object instead of building an
1704 error message from arguments.  If you want to throw a non-string object,
1705 or build an error message in an SV yourself, it is preferable to use
1706 the L</croak_sv> function, which does not involve clobbering C<ERRSV>.
1707
1708 =cut
1709 */
1710
1711 void
1712 Perl_vcroak(pTHX_ const char* pat, va_list *args)
1713 {
1714     SV *ex = with_queued_errors(pat ? vmess(pat, args) : mess_sv(ERRSV, 0));
1715     invoke_exception_hook(ex, FALSE);
1716     die_unwind(ex);
1717 }
1718
1719 /*
1720 =for apidoc Am|void|croak|const char *pat|...
1721
1722 This is an XS interface to Perl's C<die> function.
1723
1724 Take a sprintf-style format pattern and argument list.  These are used to
1725 generate a string message.  If the message does not end with a newline,
1726 then it will be extended with some indication of the current location
1727 in the code, as described for L</mess_sv>.
1728
1729 The error message will be used as an exception, by default
1730 returning control to the nearest enclosing C<eval>, but subject to
1731 modification by a C<$SIG{__DIE__}> handler.  In any case, the C<croak>
1732 function never returns normally.
1733
1734 For historical reasons, if C<pat> is null then the contents of C<ERRSV>
1735 (C<$@>) will be used as an error message or object instead of building an
1736 error message from arguments.  If you want to throw a non-string object,
1737 or build an error message in an SV yourself, it is preferable to use
1738 the L</croak_sv> function, which does not involve clobbering C<ERRSV>.
1739
1740 =cut
1741 */
1742
1743 #if defined(PERL_IMPLICIT_CONTEXT)
1744 void
1745 Perl_croak_nocontext(const char *pat, ...)
1746 {
1747     dTHX;
1748     va_list args;
1749     va_start(args, pat);
1750     vcroak(pat, &args);
1751     NOT_REACHED; /* NOTREACHED */
1752     va_end(args);
1753 }
1754 #endif /* PERL_IMPLICIT_CONTEXT */
1755
1756 void
1757 Perl_croak(pTHX_ const char *pat, ...)
1758 {
1759     va_list args;
1760     va_start(args, pat);
1761     vcroak(pat, &args);
1762     NOT_REACHED; /* NOTREACHED */
1763     va_end(args);
1764 }
1765
1766 /*
1767 =for apidoc Am|void|croak_no_modify
1768
1769 Exactly equivalent to C<Perl_croak(aTHX_ "%s", PL_no_modify)>, but generates
1770 terser object code than using C<Perl_croak>.  Less code used on exception code
1771 paths reduces CPU cache pressure.
1772
1773 =cut
1774 */
1775
1776 void
1777 Perl_croak_no_modify(void)
1778 {
1779     Perl_croak_nocontext( "%s", PL_no_modify);
1780 }
1781
1782 /* does not return, used in util.c perlio.c and win32.c
1783    This is typically called when malloc returns NULL.
1784 */
1785 void
1786 Perl_croak_no_mem(void)
1787 {
1788     dTHX;
1789
1790     int fd = PerlIO_fileno(Perl_error_log);
1791     if (fd < 0)
1792         SETERRNO(EBADF,RMS_IFI);
1793     else {
1794         /* Can't use PerlIO to write as it allocates memory */
1795         PERL_UNUSED_RESULT(PerlLIO_write(fd, PL_no_mem, sizeof(PL_no_mem)-1));
1796     }
1797     my_exit(1);
1798 }
1799
1800 /* does not return, used only in POPSTACK */
1801 void
1802 Perl_croak_popstack(void)
1803 {
1804     dTHX;
1805     PerlIO_printf(Perl_error_log, "panic: POPSTACK\n");
1806     my_exit(1);
1807 }
1808
1809 /*
1810 =for apidoc Am|void|warn_sv|SV *baseex
1811
1812 This is an XS interface to Perl's C<warn> function.
1813
1814 C<baseex> is the error message or object.  If it is a reference, it
1815 will be used as-is.  Otherwise it is used as a string, and if it does
1816 not end with a newline then it will be extended with some indication of
1817 the current location in the code, as described for L</mess_sv>.
1818
1819 The error message or object will by default be written to standard error,
1820 but this is subject to modification by a C<$SIG{__WARN__}> handler.
1821
1822 To warn with a simple string message, the L</warn> function may be
1823 more convenient.
1824
1825 =cut
1826 */
1827
1828 void
1829 Perl_warn_sv(pTHX_ SV *baseex)
1830 {
1831     SV *ex = mess_sv(baseex, 0);
1832     PERL_ARGS_ASSERT_WARN_SV;
1833     if (!invoke_exception_hook(ex, TRUE))
1834         write_to_stderr(ex);
1835 }
1836
1837 /*
1838 =for apidoc Am|void|vwarn|const char *pat|va_list *args
1839
1840 This is an XS interface to Perl's C<warn> function.
1841
1842 C<pat> and C<args> are a sprintf-style format pattern and encapsulated
1843 argument list.  These are used to generate a string message.  If the
1844 message does not end with a newline, then it will be extended with
1845 some indication of the current location in the code, as described for
1846 L</mess_sv>.
1847
1848 The error message or object will by default be written to standard error,
1849 but this is subject to modification by a C<$SIG{__WARN__}> handler.
1850
1851 Unlike with L</vcroak>, C<pat> is not permitted to be null.
1852
1853 =cut
1854 */
1855
1856 void
1857 Perl_vwarn(pTHX_ const char* pat, va_list *args)
1858 {
1859     SV *ex = vmess(pat, args);
1860     PERL_ARGS_ASSERT_VWARN;
1861     if (!invoke_exception_hook(ex, TRUE))
1862         write_to_stderr(ex);
1863 }
1864
1865 /*
1866 =for apidoc Am|void|warn|const char *pat|...
1867
1868 This is an XS interface to Perl's C<warn> function.
1869
1870 Take a sprintf-style format pattern and argument list.  These are used to
1871 generate a string message.  If the message does not end with a newline,
1872 then it will be extended with some indication of the current location
1873 in the code, as described for L</mess_sv>.
1874
1875 The error message or object will by default be written to standard error,
1876 but this is subject to modification by a C<$SIG{__WARN__}> handler.
1877
1878 Unlike with L</croak>, C<pat> is not permitted to be null.
1879
1880 =cut
1881 */
1882
1883 #if defined(PERL_IMPLICIT_CONTEXT)
1884 void
1885 Perl_warn_nocontext(const char *pat, ...)
1886 {
1887     dTHX;
1888     va_list args;
1889     PERL_ARGS_ASSERT_WARN_NOCONTEXT;
1890     va_start(args, pat);
1891     vwarn(pat, &args);
1892     va_end(args);
1893 }
1894 #endif /* PERL_IMPLICIT_CONTEXT */
1895
1896 void
1897 Perl_warn(pTHX_ const char *pat, ...)
1898 {
1899     va_list args;
1900     PERL_ARGS_ASSERT_WARN;
1901     va_start(args, pat);
1902     vwarn(pat, &args);
1903     va_end(args);
1904 }
1905
1906 #if defined(PERL_IMPLICIT_CONTEXT)
1907 void
1908 Perl_warner_nocontext(U32 err, const char *pat, ...)
1909 {
1910     dTHX; 
1911     va_list args;
1912     PERL_ARGS_ASSERT_WARNER_NOCONTEXT;
1913     va_start(args, pat);
1914     vwarner(err, pat, &args);
1915     va_end(args);
1916 }
1917 #endif /* PERL_IMPLICIT_CONTEXT */
1918
1919 void
1920 Perl_ck_warner_d(pTHX_ U32 err, const char* pat, ...)
1921 {
1922     PERL_ARGS_ASSERT_CK_WARNER_D;
1923
1924     if (Perl_ckwarn_d(aTHX_ err)) {
1925         va_list args;
1926         va_start(args, pat);
1927         vwarner(err, pat, &args);
1928         va_end(args);
1929     }
1930 }
1931
1932 void
1933 Perl_ck_warner(pTHX_ U32 err, const char* pat, ...)
1934 {
1935     PERL_ARGS_ASSERT_CK_WARNER;
1936
1937     if (Perl_ckwarn(aTHX_ err)) {
1938         va_list args;
1939         va_start(args, pat);
1940         vwarner(err, pat, &args);
1941         va_end(args);
1942     }
1943 }
1944
1945 void
1946 Perl_warner(pTHX_ U32  err, const char* pat,...)
1947 {
1948     va_list args;
1949     PERL_ARGS_ASSERT_WARNER;
1950     va_start(args, pat);
1951     vwarner(err, pat, &args);
1952     va_end(args);
1953 }
1954
1955 void
1956 Perl_vwarner(pTHX_ U32  err, const char* pat, va_list* args)
1957 {
1958     dVAR;
1959     PERL_ARGS_ASSERT_VWARNER;
1960     if (
1961         (PL_warnhook == PERL_WARNHOOK_FATAL || ckDEAD(err)) &&
1962         !(PL_in_eval & EVAL_KEEPERR)
1963     ) {
1964         SV * const msv = vmess(pat, args);
1965
1966         if (PL_parser && PL_parser->error_count) {
1967             qerror(msv);
1968         }
1969         else {
1970             invoke_exception_hook(msv, FALSE);
1971             die_unwind(msv);
1972         }
1973     }
1974     else {
1975         Perl_vwarn(aTHX_ pat, args);
1976     }
1977 }
1978
1979 /* implements the ckWARN? macros */
1980
1981 bool
1982 Perl_ckwarn(pTHX_ U32 w)
1983 {
1984     /* If lexical warnings have not been set, use $^W.  */
1985     if (isLEXWARN_off)
1986         return PL_dowarn & G_WARN_ON;
1987
1988     return ckwarn_common(w);
1989 }
1990
1991 /* implements the ckWARN?_d macro */
1992
1993 bool
1994 Perl_ckwarn_d(pTHX_ U32 w)
1995 {
1996     /* If lexical warnings have not been set then default classes warn.  */
1997     if (isLEXWARN_off)
1998         return TRUE;
1999
2000     return ckwarn_common(w);
2001 }
2002
2003 static bool
2004 S_ckwarn_common(pTHX_ U32 w)
2005 {
2006     if (PL_curcop->cop_warnings == pWARN_ALL)
2007         return TRUE;
2008
2009     if (PL_curcop->cop_warnings == pWARN_NONE)
2010         return FALSE;
2011
2012     /* Check the assumption that at least the first slot is non-zero.  */
2013     assert(unpackWARN1(w));
2014
2015     /* Check the assumption that it is valid to stop as soon as a zero slot is
2016        seen.  */
2017     if (!unpackWARN2(w)) {
2018         assert(!unpackWARN3(w));
2019         assert(!unpackWARN4(w));
2020     } else if (!unpackWARN3(w)) {
2021         assert(!unpackWARN4(w));
2022     }
2023         
2024     /* Right, dealt with all the special cases, which are implemented as non-
2025        pointers, so there is a pointer to a real warnings mask.  */
2026     do {
2027         if (isWARN_on(PL_curcop->cop_warnings, unpackWARN1(w)))
2028             return TRUE;
2029     } while (w >>= WARNshift);
2030
2031     return FALSE;
2032 }
2033
2034 /* Set buffer=NULL to get a new one.  */
2035 STRLEN *
2036 Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const char *const bits,
2037                            STRLEN size) {
2038     const MEM_SIZE len_wanted =
2039         sizeof(STRLEN) + (size > WARNsize ? size : WARNsize);
2040     PERL_UNUSED_CONTEXT;
2041     PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD;
2042
2043     buffer = (STRLEN*)
2044         (specialWARN(buffer) ?
2045          PerlMemShared_malloc(len_wanted) :
2046          PerlMemShared_realloc(buffer, len_wanted));
2047     buffer[0] = size;
2048     Copy(bits, (buffer + 1), size, char);
2049     if (size < WARNsize)
2050         Zero((char *)(buffer + 1) + size, WARNsize - size, char);
2051     return buffer;
2052 }
2053
2054 /* since we've already done strlen() for both nam and val
2055  * we can use that info to make things faster than
2056  * sprintf(s, "%s=%s", nam, val)
2057  */
2058 #define my_setenv_format(s, nam, nlen, val, vlen) \
2059    Copy(nam, s, nlen, char); \
2060    *(s+nlen) = '='; \
2061    Copy(val, s+(nlen+1), vlen, char); \
2062    *(s+(nlen+1+vlen)) = '\0'
2063
2064 #ifdef USE_ENVIRON_ARRAY
2065        /* VMS' my_setenv() is in vms.c */
2066 #if !defined(WIN32) && !defined(NETWARE)
2067 void
2068 Perl_my_setenv(pTHX_ const char *nam, const char *val)
2069 {
2070   dVAR;
2071 #ifdef __amigaos4__
2072   amigaos4_obtain_environ(__FUNCTION__);
2073 #endif
2074 #ifdef USE_ITHREADS
2075   /* only parent thread can modify process environment */
2076   if (PL_curinterp == aTHX)
2077 #endif
2078   {
2079 #ifndef PERL_USE_SAFE_PUTENV
2080     if (!PL_use_safe_putenv) {
2081         /* most putenv()s leak, so we manipulate environ directly */
2082         I32 i;
2083         const I32 len = strlen(nam);
2084         int nlen, vlen;
2085
2086         /* where does it go? */
2087         for (i = 0; environ[i]; i++) {
2088             if (strnEQ(environ[i],nam,len) && environ[i][len] == '=')
2089                 break;
2090         }
2091
2092         if (environ == PL_origenviron) {   /* need we copy environment? */
2093             I32 j;
2094             I32 max;
2095             char **tmpenv;
2096
2097             max = i;
2098             while (environ[max])
2099                 max++;
2100             tmpenv = (char**)safesysmalloc((max+2) * sizeof(char*));
2101             for (j=0; j<max; j++) {         /* copy environment */
2102                 const int len = strlen(environ[j]);
2103                 tmpenv[j] = (char*)safesysmalloc((len+1)*sizeof(char));
2104                 Copy(environ[j], tmpenv[j], len+1, char);
2105             }
2106             tmpenv[max] = NULL;
2107             environ = tmpenv;               /* tell exec where it is now */
2108         }
2109         if (!val) {
2110             safesysfree(environ[i]);
2111             while (environ[i]) {
2112                 environ[i] = environ[i+1];
2113                 i++;
2114             }
2115 #ifdef __amigaos4__
2116             goto my_setenv_out;
2117 #else
2118             return;
2119 #endif
2120         }
2121         if (!environ[i]) {                 /* does not exist yet */
2122             environ = (char**)safesysrealloc(environ, (i+2) * sizeof(char*));
2123             environ[i+1] = NULL;    /* make sure it's null terminated */
2124         }
2125         else
2126             safesysfree(environ[i]);
2127         nlen = strlen(nam);
2128         vlen = strlen(val);
2129
2130         environ[i] = (char*)safesysmalloc((nlen+vlen+2) * sizeof(char));
2131         /* all that work just for this */
2132         my_setenv_format(environ[i], nam, nlen, val, vlen);
2133     } else {
2134 # endif
2135     /* This next branch should only be called #if defined(HAS_SETENV), but
2136        Configure doesn't test for that yet.  For Solaris, setenv() and unsetenv()
2137        were introduced in Solaris 9, so testing for HAS UNSETENV is sufficient.
2138     */
2139 #   if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
2140 #       if defined(HAS_UNSETENV)
2141         if (val == NULL) {
2142             (void)unsetenv(nam);
2143         } else {
2144             (void)setenv(nam, val, 1);
2145         }
2146 #       else /* ! HAS_UNSETENV */
2147         (void)setenv(nam, val, 1);
2148 #       endif /* HAS_UNSETENV */
2149 #   else
2150 #       if defined(HAS_UNSETENV)
2151         if (val == NULL) {
2152             if (environ) /* old glibc can crash with null environ */
2153                 (void)unsetenv(nam);
2154         } else {
2155             const int nlen = strlen(nam);
2156             const int vlen = strlen(val);
2157             char * const new_env =
2158                 (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
2159             my_setenv_format(new_env, nam, nlen, val, vlen);
2160             (void)putenv(new_env);
2161         }
2162 #       else /* ! HAS_UNSETENV */
2163         char *new_env;
2164         const int nlen = strlen(nam);
2165         int vlen;
2166         if (!val) {
2167            val = "";
2168         }
2169         vlen = strlen(val);
2170         new_env = (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
2171         /* all that work just for this */
2172         my_setenv_format(new_env, nam, nlen, val, vlen);
2173         (void)putenv(new_env);
2174 #       endif /* HAS_UNSETENV */
2175 #   endif /* __CYGWIN__ */
2176 #ifndef PERL_USE_SAFE_PUTENV
2177     }
2178 #endif
2179   }
2180 #ifdef __amigaos4__
2181 my_setenv_out:
2182   amigaos4_release_environ(__FUNCTION__);
2183 #endif
2184 }
2185
2186 #else /* WIN32 || NETWARE */
2187
2188 void
2189 Perl_my_setenv(pTHX_ const char *nam, const char *val)
2190 {
2191     dVAR;
2192     char *envstr;
2193     const int nlen = strlen(nam);
2194     int vlen;
2195
2196     if (!val) {
2197        val = "";
2198     }
2199     vlen = strlen(val);
2200     Newx(envstr, nlen+vlen+2, char);
2201     my_setenv_format(envstr, nam, nlen, val, vlen);
2202     (void)PerlEnv_putenv(envstr);
2203     Safefree(envstr);
2204 }
2205
2206 #endif /* WIN32 || NETWARE */
2207
2208 #endif /* !VMS */
2209
2210 #ifdef UNLINK_ALL_VERSIONS
2211 I32
2212 Perl_unlnk(pTHX_ const char *f) /* unlink all versions of a file */
2213 {
2214     I32 retries = 0;
2215
2216     PERL_ARGS_ASSERT_UNLNK;
2217
2218     while (PerlLIO_unlink(f) >= 0)
2219         retries++;
2220     return retries ? 0 : -1;
2221 }
2222 #endif
2223
2224 /* this is a drop-in replacement for bcopy(), except for the return
2225  * value, which we need to be able to emulate memcpy()  */
2226 #if !defined(HAS_MEMCPY) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY))
2227 void *
2228 Perl_my_bcopy(const void *vfrom, void *vto, size_t len)
2229 {
2230 #if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)
2231     bcopy(vfrom, vto, len);
2232 #else
2233     const unsigned char *from = (const unsigned char *)vfrom;
2234     unsigned char *to = (unsigned char *)vto;
2235
2236     PERL_ARGS_ASSERT_MY_BCOPY;
2237
2238     if (from - to >= 0) {
2239         while (len--)
2240             *to++ = *from++;
2241     }
2242     else {
2243         to += len;
2244         from += len;
2245         while (len--)
2246             *(--to) = *(--from);
2247     }
2248 #endif
2249
2250     return vto;
2251 }
2252 #endif
2253
2254 /* this is a drop-in replacement for memset() */
2255 #ifndef HAS_MEMSET
2256 void *
2257 Perl_my_memset(void *vloc, int ch, size_t len)
2258 {
2259     unsigned char *loc = (unsigned char *)vloc;
2260
2261     PERL_ARGS_ASSERT_MY_MEMSET;
2262
2263     while (len--)
2264         *loc++ = ch;
2265     return vloc;
2266 }
2267 #endif
2268
2269 /* this is a drop-in replacement for bzero() */
2270 #if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
2271 void *
2272 Perl_my_bzero(void *vloc, size_t len)
2273 {
2274     unsigned char *loc = (unsigned char *)vloc;
2275
2276     PERL_ARGS_ASSERT_MY_BZERO;
2277
2278     while (len--)
2279         *loc++ = 0;
2280     return vloc;
2281 }
2282 #endif
2283
2284 /* this is a drop-in replacement for memcmp() */
2285 #if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
2286 int
2287 Perl_my_memcmp(const void *vs1, const void *vs2, size_t len)
2288 {
2289     const U8 *a = (const U8 *)vs1;
2290     const U8 *b = (const U8 *)vs2;
2291     int tmp;
2292
2293     PERL_ARGS_ASSERT_MY_MEMCMP;
2294
2295     while (len--) {
2296         if ((tmp = *a++ - *b++))
2297             return tmp;
2298     }
2299     return 0;
2300 }
2301 #endif /* !HAS_MEMCMP || !HAS_SANE_MEMCMP */
2302
2303 #ifndef HAS_VPRINTF
2304 /* This vsprintf replacement should generally never get used, since
2305    vsprintf was available in both System V and BSD 2.11.  (There may
2306    be some cross-compilation or embedded set-ups where it is needed,
2307    however.)
2308
2309    If you encounter a problem in this function, it's probably a symptom
2310    that Configure failed to detect your system's vprintf() function.
2311    See the section on "item vsprintf" in the INSTALL file.
2312
2313    This version may compile on systems with BSD-ish <stdio.h>,
2314    but probably won't on others.
2315 */
2316
2317 #ifdef USE_CHAR_VSPRINTF
2318 char *
2319 #else
2320 int
2321 #endif
2322 vsprintf(char *dest, const char *pat, void *args)
2323 {
2324     FILE fakebuf;
2325
2326 #if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
2327     FILE_ptr(&fakebuf) = (STDCHAR *) dest;
2328     FILE_cnt(&fakebuf) = 32767;
2329 #else
2330     /* These probably won't compile -- If you really need
2331        this, you'll have to figure out some other method. */
2332     fakebuf._ptr = dest;
2333     fakebuf._cnt = 32767;
2334 #endif
2335 #ifndef _IOSTRG
2336 #define _IOSTRG 0
2337 #endif
2338     fakebuf._flag = _IOWRT|_IOSTRG;
2339     _doprnt(pat, args, &fakebuf);       /* what a kludge */
2340 #if defined(STDIO_PTR_LVALUE)
2341     *(FILE_ptr(&fakebuf)++) = '\0';
2342 #else
2343     /* PerlIO has probably #defined away fputc, but we want it here. */
2344 #  ifdef fputc
2345 #    undef fputc  /* XXX Should really restore it later */
2346 #  endif
2347     (void)fputc('\0', &fakebuf);
2348 #endif
2349 #ifdef USE_CHAR_VSPRINTF
2350     return(dest);
2351 #else
2352     return 0;           /* perl doesn't use return value */
2353 #endif
2354 }
2355
2356 #endif /* HAS_VPRINTF */
2357
2358 PerlIO *
2359 Perl_my_popen_list(pTHX_ const char *mode, int n, SV **args)
2360 {
2361 #if (!defined(DOSISH) || defined(HAS_FORK)) && !defined(OS2) && !defined(VMS) && !defined(NETWARE) && !defined(__LIBCATAMOUNT__) && !defined(__amigaos4__)
2362     int p[2];
2363     I32 This, that;
2364     Pid_t pid;
2365     SV *sv;
2366     I32 did_pipes = 0;
2367     int pp[2];
2368
2369     PERL_ARGS_ASSERT_MY_POPEN_LIST;
2370
2371     PERL_FLUSHALL_FOR_CHILD;
2372     This = (*mode == 'w');
2373     that = !This;
2374     if (TAINTING_get) {
2375         taint_env();
2376         taint_proper("Insecure %s%s", "EXEC");
2377     }
2378     if (PerlProc_pipe(p) < 0)
2379         return NULL;
2380     /* Try for another pipe pair for error return */
2381     if (PerlProc_pipe(pp) >= 0)
2382         did_pipes = 1;
2383     while ((pid = PerlProc_fork()) < 0) {
2384         if (errno != EAGAIN) {
2385             PerlLIO_close(p[This]);
2386             PerlLIO_close(p[that]);
2387             if (did_pipes) {
2388                 PerlLIO_close(pp[0]);
2389                 PerlLIO_close(pp[1]);
2390             }
2391             return NULL;
2392         }
2393         Perl_ck_warner(aTHX_ packWARN(WARN_PIPE), "Can't fork, trying again in 5 seconds");
2394         sleep(5);
2395     }
2396     if (pid == 0) {
2397         /* Child */
2398 #undef THIS
2399 #undef THAT
2400 #define THIS that
2401 #define THAT This
2402         /* Close parent's end of error status pipe (if any) */
2403         if (did_pipes) {
2404             PerlLIO_close(pp[0]);
2405 #if defined(HAS_FCNTL) && defined(F_SETFD) && defined(FD_CLOEXEC)
2406             /* Close error pipe automatically if exec works */
2407             if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
2408                 return NULL;
2409 #endif
2410         }
2411         /* Now dup our end of _the_ pipe to right position */
2412         if (p[THIS] != (*mode == 'r')) {
2413             PerlLIO_dup2(p[THIS], *mode == 'r');
2414             PerlLIO_close(p[THIS]);
2415             if (p[THAT] != (*mode == 'r'))      /* if dup2() didn't close it */
2416                 PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
2417         }
2418         else
2419             PerlLIO_close(p[THAT]);     /* close parent's end of _the_ pipe */
2420 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
2421         /* No automatic close - do it by hand */
2422 #  ifndef NOFILE
2423 #  define NOFILE 20
2424 #  endif
2425         {
2426             int fd;
2427
2428             for (fd = PL_maxsysfd + 1; fd < NOFILE; fd++) {
2429                 if (fd != pp[1])
2430                     PerlLIO_close(fd);
2431             }
2432         }
2433 #endif
2434         do_aexec5(NULL, args-1, args-1+n, pp[1], did_pipes);
2435         PerlProc__exit(1);
2436 #undef THIS
2437 #undef THAT
2438     }
2439     /* Parent */
2440     do_execfree();      /* free any memory malloced by child on fork */
2441     if (did_pipes)
2442         PerlLIO_close(pp[1]);
2443     /* Keep the lower of the two fd numbers */
2444     if (p[that] < p[This]) {
2445         PerlLIO_dup2(p[This], p[that]);
2446         PerlLIO_close(p[This]);
2447         p[This] = p[that];
2448     }
2449     else
2450         PerlLIO_close(p[that]);         /* close child's end of pipe */
2451
2452     sv = *av_fetch(PL_fdpid,p[This],TRUE);
2453     SvUPGRADE(sv,SVt_IV);
2454     SvIV_set(sv, pid);
2455     PL_forkprocess = pid;
2456     /* If we managed to get status pipe check for exec fail */
2457     if (did_pipes && pid > 0) {
2458         int errkid;
2459         unsigned n = 0;
2460
2461         while (n < sizeof(int)) {
2462             const SSize_t n1 = PerlLIO_read(pp[0],
2463                               (void*)(((char*)&errkid)+n),
2464                               (sizeof(int)) - n);
2465             if (n1 <= 0)
2466                 break;
2467             n += n1;
2468         }
2469         PerlLIO_close(pp[0]);
2470         did_pipes = 0;
2471         if (n) {                        /* Error */
2472             int pid2, status;
2473             PerlLIO_close(p[This]);
2474             if (n != sizeof(int))
2475                 Perl_croak(aTHX_ "panic: kid popen errno read, n=%u", n);
2476             do {
2477                 pid2 = wait4pid(pid, &status, 0);
2478             } while (pid2 == -1 && errno == EINTR);
2479             errno = errkid;             /* Propagate errno from kid */
2480             return NULL;
2481         }
2482     }
2483     if (did_pipes)
2484          PerlLIO_close(pp[0]);
2485     return PerlIO_fdopen(p[This], mode);
2486 #else
2487 #  if defined(OS2)      /* Same, without fork()ing and all extra overhead... */
2488     return my_syspopen4(aTHX_ NULL, mode, n, args);
2489 #  elif defined(WIN32)
2490     return win32_popenlist(mode, n, args);
2491 #  else
2492     Perl_croak(aTHX_ "List form of piped open not implemented");
2493     return (PerlIO *) NULL;
2494 #  endif
2495 #endif
2496 }
2497
2498     /* VMS' my_popen() is in VMS.c, same with OS/2 and AmigaOS 4. */
2499 #if (!defined(DOSISH) || defined(HAS_FORK)) && !defined(VMS) && !defined(__LIBCATAMOUNT__) && !defined(__amigaos4__)
2500 PerlIO *
2501 Perl_my_popen(pTHX_ const char *cmd, const char *mode)
2502 {
2503     int p[2];
2504     I32 This, that;
2505     Pid_t pid;
2506     SV *sv;
2507     const I32 doexec = !(*cmd == '-' && cmd[1] == '\0');
2508     I32 did_pipes = 0;
2509     int pp[2];
2510
2511     PERL_ARGS_ASSERT_MY_POPEN;
2512
2513     PERL_FLUSHALL_FOR_CHILD;
2514 #ifdef OS2
2515     if (doexec) {
2516         return my_syspopen(aTHX_ cmd,mode);
2517     }
2518 #endif
2519     This = (*mode == 'w');
2520     that = !This;
2521     if (doexec && TAINTING_get) {
2522         taint_env();
2523         taint_proper("Insecure %s%s", "EXEC");
2524     }
2525     if (PerlProc_pipe(p) < 0)
2526         return NULL;
2527     if (doexec && PerlProc_pipe(pp) >= 0)
2528         did_pipes = 1;
2529     while ((pid = PerlProc_fork()) < 0) {
2530         if (errno != EAGAIN) {
2531             PerlLIO_close(p[This]);
2532             PerlLIO_close(p[that]);
2533             if (did_pipes) {
2534                 PerlLIO_close(pp[0]);
2535                 PerlLIO_close(pp[1]);
2536             }
2537             if (!doexec)
2538                 Perl_croak(aTHX_ "Can't fork: %s", Strerror(errno));
2539             return NULL;
2540         }
2541         Perl_ck_warner(aTHX_ packWARN(WARN_PIPE), "Can't fork, trying again in 5 seconds");
2542         sleep(5);
2543     }
2544     if (pid == 0) {
2545
2546 #undef THIS
2547 #undef THAT
2548 #define THIS that
2549 #define THAT This
2550         if (did_pipes) {
2551             PerlLIO_close(pp[0]);
2552 #if defined(HAS_FCNTL) && defined(F_SETFD)
2553             if (fcntl(pp[1], F_SETFD, FD_CLOEXEC) < 0)
2554                 return NULL;
2555 #endif
2556         }
2557         if (p[THIS] != (*mode == 'r')) {
2558             PerlLIO_dup2(p[THIS], *mode == 'r');
2559             PerlLIO_close(p[THIS]);
2560             if (p[THAT] != (*mode == 'r'))      /* if dup2() didn't close it */
2561                 PerlLIO_close(p[THAT]);
2562         }
2563         else
2564             PerlLIO_close(p[THAT]);
2565 #ifndef OS2
2566         if (doexec) {
2567 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
2568 #ifndef NOFILE
2569 #define NOFILE 20
2570 #endif
2571             {
2572                 int fd;
2573
2574                 for (fd = PL_maxsysfd + 1; fd < NOFILE; fd++)
2575                     if (fd != pp[1])
2576                         PerlLIO_close(fd);
2577             }
2578 #endif
2579             /* may or may not use the shell */
2580             do_exec3(cmd, pp[1], did_pipes);
2581             PerlProc__exit(1);
2582         }
2583 #endif  /* defined OS2 */
2584
2585 #ifdef PERLIO_USING_CRLF
2586    /* Since we circumvent IO layers when we manipulate low-level
2587       filedescriptors directly, need to manually switch to the
2588       default, binary, low-level mode; see PerlIOBuf_open(). */
2589    PerlLIO_setmode((*mode == 'r'), O_BINARY);
2590 #endif 
2591         PL_forkprocess = 0;
2592 #ifdef PERL_USES_PL_PIDSTATUS
2593         hv_clear(PL_pidstatus); /* we have no children */
2594 #endif
2595         return NULL;
2596 #undef THIS
2597 #undef THAT
2598     }
2599     do_execfree();      /* free any memory malloced by child on vfork */
2600     if (did_pipes)
2601         PerlLIO_close(pp[1]);
2602     if (p[that] < p[This]) {
2603         PerlLIO_dup2(p[This], p[that]);
2604         PerlLIO_close(p[This]);
2605         p[This] = p[that];
2606     }
2607     else
2608         PerlLIO_close(p[that]);
2609
2610     sv = *av_fetch(PL_fdpid,p[This],TRUE);
2611     SvUPGRADE(sv,SVt_IV);
2612     SvIV_set(sv, pid);
2613     PL_forkprocess = pid;
2614     if (did_pipes && pid > 0) {
2615         int errkid;
2616         unsigned n = 0;
2617
2618         while (n < sizeof(int)) {
2619             const SSize_t n1 = PerlLIO_read(pp[0],
2620                               (void*)(((char*)&errkid)+n),
2621                               (sizeof(int)) - n);
2622             if (n1 <= 0)
2623                 break;
2624             n += n1;
2625         }
2626         PerlLIO_close(pp[0]);
2627         did_pipes = 0;
2628         if (n) {                        /* Error */
2629             int pid2, status;
2630             PerlLIO_close(p[This]);
2631             if (n != sizeof(int))
2632                 Perl_croak(aTHX_ "panic: kid popen errno read, n=%u", n);
2633             do {
2634                 pid2 = wait4pid(pid, &status, 0);
2635             } while (pid2 == -1 && errno == EINTR);
2636             errno = errkid;             /* Propagate errno from kid */
2637             return NULL;
2638         }
2639     }
2640     if (did_pipes)
2641          PerlLIO_close(pp[0]);
2642     return PerlIO_fdopen(p[This], mode);
2643 }
2644 #else
2645 #if defined(DJGPP)
2646 FILE *djgpp_popen();
2647 PerlIO *
2648 Perl_my_popen(pTHX_ const char *cmd, const char *mode)
2649 {
2650     PERL_FLUSHALL_FOR_CHILD;
2651     /* Call system's popen() to get a FILE *, then import it.
2652        used 0 for 2nd parameter to PerlIO_importFILE;
2653        apparently not used
2654     */
2655     return PerlIO_importFILE(djgpp_popen(cmd, mode), 0);
2656 }
2657 #else
2658 #if defined(__LIBCATAMOUNT__)
2659 PerlIO *
2660 Perl_my_popen(pTHX_ const char *cmd, const char *mode)
2661 {
2662     return NULL;
2663 }
2664 #endif
2665 #endif
2666
2667 #endif /* !DOSISH */
2668
2669 /* this is called in parent before the fork() */
2670 void
2671 Perl_atfork_lock(void)
2672 #if defined(USE_ITHREADS)
2673 #  ifdef USE_PERLIO
2674   PERL_TSA_ACQUIRE(PL_perlio_mutex)
2675 #  endif
2676 #  ifdef MYMALLOC
2677   PERL_TSA_ACQUIRE(PL_malloc_mutex)
2678 #  endif
2679   PERL_TSA_ACQUIRE(PL_op_mutex)
2680 #endif
2681 {
2682 #if defined(USE_ITHREADS)
2683     dVAR;
2684     /* locks must be held in locking order (if any) */
2685 #  ifdef USE_PERLIO
2686     MUTEX_LOCK(&PL_perlio_mutex);
2687 #  endif
2688 #  ifdef MYMALLOC
2689     MUTEX_LOCK(&PL_malloc_mutex);
2690 #  endif
2691     OP_REFCNT_LOCK;
2692 #endif
2693 }
2694
2695 /* this is called in both parent and child after the fork() */
2696 void
2697 Perl_atfork_unlock(void)
2698 #if defined(USE_ITHREADS)
2699 #  ifdef USE_PERLIO
2700   PERL_TSA_RELEASE(PL_perlio_mutex)
2701 #  endif
2702 #  ifdef MYMALLOC
2703   PERL_TSA_RELEASE(PL_malloc_mutex)
2704 #  endif
2705   PERL_TSA_RELEASE(PL_op_mutex)
2706 #endif
2707 {
2708 #if defined(USE_ITHREADS)
2709     dVAR;
2710     /* locks must be released in same order as in atfork_lock() */
2711 #  ifdef USE_PERLIO
2712     MUTEX_UNLOCK(&PL_perlio_mutex);
2713 #  endif
2714 #  ifdef MYMALLOC
2715     MUTEX_UNLOCK(&PL_malloc_mutex);
2716 #  endif
2717     OP_REFCNT_UNLOCK;
2718 #endif
2719 }
2720
2721 Pid_t
2722 Perl_my_fork(void)
2723 {
2724 #if defined(HAS_FORK)
2725     Pid_t pid;
2726 #if defined(USE_ITHREADS) && !defined(HAS_PTHREAD_ATFORK)
2727     atfork_lock();
2728     pid = fork();
2729     atfork_unlock();
2730 #else
2731     /* atfork_lock() and atfork_unlock() are installed as pthread_atfork()
2732      * handlers elsewhere in the code */
2733     pid = fork();
2734 #endif
2735     return pid;
2736 #elif defined(__amigaos4__)
2737     return amigaos_fork();
2738 #else
2739     /* this "canna happen" since nothing should be calling here if !HAS_FORK */
2740     Perl_croak_nocontext("fork() not available");
2741     return 0;
2742 #endif /* HAS_FORK */
2743 }
2744
2745 #ifndef HAS_DUP2
2746 int
2747 dup2(int oldfd, int newfd)
2748 {
2749 #if defined(HAS_FCNTL) && defined(F_DUPFD)
2750     if (oldfd == newfd)
2751         return oldfd;
2752     PerlLIO_close(newfd);
2753     return fcntl(oldfd, F_DUPFD, newfd);
2754 #else
2755 #define DUP2_MAX_FDS 256
2756     int fdtmp[DUP2_MAX_FDS];
2757     I32 fdx = 0;
2758     int fd;
2759
2760     if (oldfd == newfd)
2761         return oldfd;
2762     PerlLIO_close(newfd);
2763     /* good enough for low fd's... */
2764     while ((fd = PerlLIO_dup(oldfd)) != newfd && fd >= 0) {
2765         if (fdx >= DUP2_MAX_FDS) {
2766             PerlLIO_close(fd);
2767             fd = -1;
2768             break;
2769         }
2770         fdtmp[fdx++] = fd;
2771     }
2772     while (fdx > 0)
2773         PerlLIO_close(fdtmp[--fdx]);
2774     return fd;
2775 #endif
2776 }
2777 #endif
2778
2779 #ifndef PERL_MICRO
2780 #ifdef HAS_SIGACTION
2781
2782 Sighandler_t
2783 Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
2784 {
2785     struct sigaction act, oact;
2786
2787 #ifdef USE_ITHREADS
2788     dVAR;
2789     /* only "parent" interpreter can diddle signals */
2790     if (PL_curinterp != aTHX)
2791         return (Sighandler_t) SIG_ERR;
2792 #endif
2793
2794     act.sa_handler = (void(*)(int))handler;
2795     sigemptyset(&act.sa_mask);
2796     act.sa_flags = 0;
2797 #ifdef SA_RESTART
2798     if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
2799         act.sa_flags |= SA_RESTART;     /* SVR4, 4.3+BSD */
2800 #endif
2801 #if defined(SA_NOCLDWAIT) && !defined(BSDish) /* See [perl #18849] */
2802     if (signo == SIGCHLD && handler == (Sighandler_t) SIG_IGN)
2803         act.sa_flags |= SA_NOCLDWAIT;
2804 #endif
2805     if (sigaction(signo, &act, &oact) == -1)
2806         return (Sighandler_t) SIG_ERR;
2807     else
2808         return (Sighandler_t) oact.sa_handler;
2809 }
2810
2811 Sighandler_t
2812 Perl_rsignal_state(pTHX_ int signo)
2813 {
2814     struct sigaction oact;
2815     PERL_UNUSED_CONTEXT;
2816
2817     if (sigaction(signo, (struct sigaction *)NULL, &oact) == -1)
2818         return (Sighandler_t) SIG_ERR;
2819     else
2820         return (Sighandler_t) oact.sa_handler;
2821 }
2822
2823 int
2824 Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
2825 {
2826 #ifdef USE_ITHREADS
2827     dVAR;
2828 #endif
2829     struct sigaction act;
2830
2831     PERL_ARGS_ASSERT_RSIGNAL_SAVE;
2832
2833 #ifdef USE_ITHREADS
2834     /* only "parent" interpreter can diddle signals */
2835     if (PL_curinterp != aTHX)
2836         return -1;
2837 #endif
2838
2839     act.sa_handler = (void(*)(int))handler;
2840     sigemptyset(&act.sa_mask);
2841     act.sa_flags = 0;
2842 #ifdef SA_RESTART
2843     if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)
2844         act.sa_flags |= SA_RESTART;     /* SVR4, 4.3+BSD */
2845 #endif
2846 #if defined(SA_NOCLDWAIT) && !defined(BSDish) /* See [perl #18849] */
2847     if (signo == SIGCHLD && handler == (Sighandler_t) SIG_IGN)
2848         act.sa_flags |= SA_NOCLDWAIT;
2849 #endif
2850     return sigaction(signo, &act, save);
2851 }
2852
2853 int
2854 Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
2855 {
2856 #ifdef USE_ITHREADS
2857     dVAR;
2858 #endif
2859     PERL_UNUSED_CONTEXT;
2860 #ifdef USE_ITHREADS
2861     /* only "parent" interpreter can diddle signals */
2862     if (PL_curinterp != aTHX)
2863         return -1;
2864 #endif
2865
2866     return sigaction(signo, save, (struct sigaction *)NULL);
2867 }
2868
2869 #else /* !HAS_SIGACTION */
2870
2871 Sighandler_t
2872 Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
2873 {
2874 #if defined(USE_ITHREADS) && !defined(WIN32)
2875     /* only "parent" interpreter can diddle signals */
2876     if (PL_curinterp != aTHX)
2877         return (Sighandler_t) SIG_ERR;
2878 #endif
2879
2880     return PerlProc_signal(signo, handler);
2881 }
2882
2883 static Signal_t
2884 sig_trap(int signo)
2885 {
2886     dVAR;
2887     PL_sig_trapped++;
2888 }
2889
2890 Sighandler_t
2891 Perl_rsignal_state(pTHX_ int signo)
2892 {
2893     dVAR;
2894     Sighandler_t oldsig;
2895
2896 #if defined(USE_ITHREADS) && !defined(WIN32)
2897     /* only "parent" interpreter can diddle signals */
2898     if (PL_curinterp != aTHX)
2899         return (Sighandler_t) SIG_ERR;
2900 #endif
2901
2902     PL_sig_trapped = 0;
2903     oldsig = PerlProc_signal(signo, sig_trap);
2904     PerlProc_signal(signo, oldsig);
2905     if (PL_sig_trapped)
2906         PerlProc_kill(PerlProc_getpid(), signo);
2907     return oldsig;
2908 }
2909
2910 int
2911 Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
2912 {
2913 #if defined(USE_ITHREADS) && !defined(WIN32)
2914     /* only "parent" interpreter can diddle signals */
2915     if (PL_curinterp != aTHX)
2916         return -1;
2917 #endif
2918     *save = PerlProc_signal(signo, handler);
2919     return (*save == (Sighandler_t) SIG_ERR) ? -1 : 0;
2920 }
2921
2922 int
2923 Perl_rsignal_restore(pTHX_ int signo, Sigsave_t *save)
2924 {
2925 #if defined(USE_ITHREADS) && !defined(WIN32)
2926     /* only "parent" interpreter can diddle signals */
2927     if (PL_curinterp != aTHX)
2928         return -1;
2929 #endif
2930     return (PerlProc_signal(signo, *save) == (Sighandler_t) SIG_ERR) ? -1 : 0;
2931 }
2932
2933 #endif /* !HAS_SIGACTION */
2934 #endif /* !PERL_MICRO */
2935
2936     /* VMS' my_pclose() is in VMS.c; same with OS/2 */
2937 #if (!defined(DOSISH) || defined(HAS_FORK)) && !defined(VMS) && !defined(__LIBCATAMOUNT__) && !defined(__amigaos4__)
2938 I32
2939 Perl_my_pclose(pTHX_ PerlIO *ptr)
2940 {
2941     int status;
2942     SV **svp;
2943     Pid_t pid;
2944     Pid_t pid2 = 0;
2945     bool close_failed;
2946     dSAVEDERRNO;
2947     const int fd = PerlIO_fileno(ptr);
2948     bool should_wait;
2949
2950     svp = av_fetch(PL_fdpid,fd,TRUE);
2951     pid = (SvTYPE(*svp) == SVt_IV) ? SvIVX(*svp) : -1;
2952     SvREFCNT_dec(*svp);
2953     *svp = NULL;
2954
2955 #if defined(USE_PERLIO)
2956     /* Find out whether the refcount is low enough for us to wait for the
2957        child proc without blocking. */
2958     should_wait = PerlIOUnix_refcnt(fd) == 1 && pid > 0;
2959 #else
2960     should_wait = pid > 0;
2961 #endif
2962
2963 #ifdef OS2
2964     if (pid == -1) {                    /* Opened by popen. */
2965         return my_syspclose(ptr);
2966     }
2967 #endif
2968     close_failed = (PerlIO_close(ptr) == EOF);
2969     SAVE_ERRNO;
2970     if (should_wait) do {
2971         pid2 = wait4pid(pid, &status, 0);
2972     } while (pid2 == -1 && errno == EINTR);
2973     if (close_failed) {
2974         RESTORE_ERRNO;
2975         return -1;
2976     }
2977     return(
2978       should_wait
2979        ? pid2 < 0 ? pid2 : status == 0 ? 0 : (errno = 0, status)
2980        : 0
2981     );
2982 }
2983 #else
2984 #if defined(__LIBCATAMOUNT__)
2985 I32
2986 Perl_my_pclose(pTHX_ PerlIO *ptr)
2987 {
2988     return -1;
2989 }
2990 #endif
2991 #endif /* !DOSISH */
2992
2993 #if  (!defined(DOSISH) || defined(OS2) || defined(WIN32) || defined(NETWARE)) && !defined(__LIBCATAMOUNT__)
2994 I32
2995 Perl_wait4pid(pTHX_ Pid_t pid, int *statusp, int flags)
2996 {
2997     I32 result = 0;
2998     PERL_ARGS_ASSERT_WAIT4PID;
2999 #ifdef PERL_USES_PL_PIDSTATUS
3000     if (!pid) {
3001         /* PERL_USES_PL_PIDSTATUS is only defined when neither
3002            waitpid() nor wait4() is available, or on OS/2, which
3003            doesn't appear to support waiting for a progress group
3004            member, so we can only treat a 0 pid as an unknown child.
3005         */
3006         errno = ECHILD;
3007         return -1;
3008     }
3009     {
3010         if (pid > 0) {
3011             /* The keys in PL_pidstatus are now the raw 4 (or 8) bytes of the
3012                pid, rather than a string form.  */
3013             SV * const * const svp = hv_fetch(PL_pidstatus,(const char*) &pid,sizeof(Pid_t),FALSE);
3014             if (svp && *svp != &PL_sv_undef) {
3015                 *statusp = SvIVX(*svp);
3016                 (void)hv_delete(PL_pidstatus,(const char*) &pid,sizeof(Pid_t),
3017                                 G_DISCARD);
3018                 return pid;
3019             }
3020         }
3021         else {
3022             HE *entry;
3023
3024             hv_iterinit(PL_pidstatus);
3025             if ((entry = hv_iternext(PL_pidstatus))) {
3026                 SV * const sv = hv_iterval(PL_pidstatus,entry);
3027                 I32 len;
3028                 const char * const spid = hv_iterkey(entry,&len);
3029
3030                 assert (len == sizeof(Pid_t));
3031                 memcpy((char *)&pid, spid, len);
3032                 *statusp = SvIVX(sv);
3033                 /* The hash iterator is currently on this entry, so simply
3034                    calling hv_delete would trigger the lazy delete, which on
3035                    aggregate does more work, because next call to hv_iterinit()
3036                    would spot the flag, and have to call the delete routine,
3037                    while in the meantime any new entries can't re-use that
3038                    memory.  */
3039                 hv_iterinit(PL_pidstatus);
3040                 (void)hv_delete(PL_pidstatus,spid,len,G_DISCARD);
3041                 return pid;
3042             }
3043         }
3044     }
3045 #endif
3046 #ifdef HAS_WAITPID
3047 #  ifdef HAS_WAITPID_RUNTIME
3048     if (!HAS_WAITPID_RUNTIME)
3049         goto hard_way;
3050 #  endif
3051     result = PerlProc_waitpid(pid,statusp,flags);
3052     goto finish;
3053 #endif
3054 #if !defined(HAS_WAITPID) && defined(HAS_WAIT4)
3055     result = wait4(pid,statusp,flags,NULL);
3056     goto finish;
3057 #endif
3058 #ifdef PERL_USES_PL_PIDSTATUS
3059 #if defined(HAS_WAITPID) && defined(HAS_WAITPID_RUNTIME)
3060   hard_way:
3061 #endif
3062     {
3063         if (flags)
3064             Perl_croak(aTHX_ "Can't do waitpid with flags");
3065         else {
3066             while ((result = PerlProc_wait(statusp)) != pid && pid > 0 && result >= 0)
3067                 pidgone(result,*statusp);
3068             if (result < 0)
3069                 *statusp = -1;
3070         }
3071     }
3072 #endif
3073 #if defined(HAS_WAITPID) || defined(HAS_WAIT4)
3074   finish:
3075 #endif
3076     if (result < 0 && errno == EINTR) {
3077         PERL_ASYNC_CHECK();
3078         errno = EINTR; /* reset in case a signal handler changed $! */
3079     }
3080     return result;
3081 }
3082 #endif /* !DOSISH || OS2 || WIN32 || NETWARE */
3083
3084 #ifdef PERL_USES_PL_PIDSTATUS
3085 void
3086 S_pidgone(pTHX_ Pid_t pid, int status)
3087 {
3088     SV *sv;
3089
3090     sv = *hv_fetch(PL_pidstatus,(const char*)&pid,sizeof(Pid_t),TRUE);
3091     SvUPGRADE(sv,SVt_IV);
3092     SvIV_set(sv, status);
3093     return;
3094 }
3095 #endif
3096
3097 #if defined(OS2)
3098 int pclose();
3099 #ifdef HAS_FORK
3100 int                                     /* Cannot prototype with I32
3101                                            in os2ish.h. */
3102 my_syspclose(PerlIO *ptr)
3103 #else
3104 I32
3105 Perl_my_pclose(pTHX_ PerlIO *ptr)
3106 #endif
3107 {
3108     /* Needs work for PerlIO ! */
3109     FILE * const f = PerlIO_findFILE(ptr);
3110     const I32 result = pclose(f);
3111     PerlIO_releaseFILE(ptr,f);
3112     return result;
3113 }
3114 #endif
3115
3116 #if defined(DJGPP)
3117 int djgpp_pclose();
3118 I32
3119 Perl_my_pclose(pTHX_ PerlIO *ptr)
3120 {
3121     /* Needs work for PerlIO ! */
3122     FILE * const f = PerlIO_findFILE(ptr);
3123     I32 result = djgpp_pclose(f);
3124     result = (result << 8) & 0xff00;
3125     PerlIO_releaseFILE(ptr,f);
3126     return result;
3127 }
3128 #endif
3129
3130 #define PERL_REPEATCPY_LINEAR 4
3131 void
3132 Perl_repeatcpy(char *to, const char *from, I32 len, IV count)
3133 {
3134     PERL_ARGS_ASSERT_REPEATCPY;
3135
3136     assert(len >= 0);
3137
3138     if (count < 0)
3139         croak_memory_wrap();
3140
3141     if (len == 1)
3142         memset(to, *from, count);
3143     else if (count) {
3144         char *p = to;
3145         IV items, linear, half;
3146
3147         linear = count < PERL_REPEATCPY_LINEAR ? count : PERL_REPEATCPY_LINEAR;
3148         for (items = 0; items < linear; ++items) {
3149             const char *q = from;
3150             IV todo;
3151             for (todo = len; todo > 0; todo--)
3152                 *p++ = *q++;
3153         }
3154
3155         half = count / 2;
3156         while (items <= half) {
3157             IV size = items * len;
3158             memcpy(p, to, size);
3159             p     += size;
3160             items *= 2;
3161         }
3162
3163         if (count > items)
3164             memcpy(p, to, (count - items) * len);
3165     }
3166 }
3167
3168 #ifndef HAS_RENAME
3169 I32
3170 Perl_same_dirent(pTHX_ const char *a, const char *b)
3171 {
3172     char *fa = strrchr(a,'/');
3173     char *fb = strrchr(b,'/');
3174     Stat_t tmpstatbuf1;
3175     Stat_t tmpstatbuf2;
3176     SV * const tmpsv = sv_newmortal();
3177
3178     PERL_ARGS_ASSERT_SAME_DIRENT;
3179
3180     if (fa)
3181         fa++;
3182     else
3183         fa = a;
3184     if (fb)
3185         fb++;
3186     else
3187         fb = b;
3188     if (strNE(a,b))
3189         return FALSE;
3190     if (fa == a)
3191         sv_setpvs(tmpsv, ".");
3192     else
3193         sv_setpvn(tmpsv, a, fa - a);
3194     if (PerlLIO_stat(SvPVX_const(tmpsv), &tmpstatbuf1) < 0)
3195         return FALSE;
3196     if (fb == b)
3197         sv_setpvs(tmpsv, ".");
3198     else
3199         sv_setpvn(tmpsv, b, fb - b);
3200     if (PerlLIO_stat(SvPVX_const(tmpsv), &tmpstatbuf2) < 0)
3201         return FALSE;
3202     return tmpstatbuf1.st_dev == tmpstatbuf2.st_dev &&
3203            tmpstatbuf1.st_ino == tmpstatbuf2.st_ino;
3204 }
3205 #endif /* !HAS_RENAME */
3206
3207 char*
3208 Perl_find_script(pTHX_ const char *scriptname, bool dosearch,
3209                  const char *const *const search_ext, I32 flags)
3210 {
3211     const char *xfound = NULL;
3212     char *xfailed = NULL;
3213     char tmpbuf[MAXPATHLEN];
3214     char *s;
3215     I32 len = 0;
3216     int retval;
3217     char *bufend;
3218 #if defined(DOSISH) && !defined(OS2)
3219 #  define SEARCH_EXTS ".bat", ".cmd", NULL
3220 #  define MAX_EXT_LEN 4
3221 #endif
3222 #ifdef OS2
3223 #  define SEARCH_EXTS ".cmd", ".btm", ".bat", ".pl", NULL
3224 #  define MAX_EXT_LEN 4
3225 #endif
3226 #ifdef VMS
3227 #  define SEARCH_EXTS ".pl", ".com", NULL
3228 #  define MAX_EXT_LEN 4
3229 #endif
3230     /* additional extensions to try in each dir if scriptname not found */
3231 #ifdef SEARCH_EXTS
3232     static const char *const exts[] = { SEARCH_EXTS };
3233     const char *const *const ext = search_ext ? search_ext : exts;
3234     int extidx = 0, i = 0;
3235     const char *curext = NULL;
3236 #else
3237     PERL_UNUSED_ARG(search_ext);
3238 #  define MAX_EXT_LEN 0
3239 #endif
3240
3241     PERL_ARGS_ASSERT_FIND_SCRIPT;
3242
3243     /*
3244      * If dosearch is true and if scriptname does not contain path
3245      * delimiters, search the PATH for scriptname.
3246      *
3247      * If SEARCH_EXTS is also defined, will look for each
3248      * scriptname{SEARCH_EXTS} whenever scriptname is not found
3249      * while searching the PATH.
3250      *
3251      * Assuming SEARCH_EXTS is C<".foo",".bar",NULL>, PATH search
3252      * proceeds as follows:
3253      *   If DOSISH or VMSISH:
3254      *     + look for ./scriptname{,.foo,.bar}
3255      *     + search the PATH for scriptname{,.foo,.bar}
3256      *
3257      *   If !DOSISH:
3258      *     + look *only* in the PATH for scriptname{,.foo,.bar} (note
3259      *       this will not look in '.' if it's not in the PATH)
3260      */
3261     tmpbuf[0] = '\0';
3262
3263 #ifdef VMS
3264 #  ifdef ALWAYS_DEFTYPES
3265     len = strlen(scriptname);
3266     if (!(len == 1 && *scriptname == '-') && scriptname[len-1] != ':') {
3267         int idx = 0, deftypes = 1;
3268         bool seen_dot = 1;
3269
3270         const int hasdir = !dosearch || (strpbrk(scriptname,":[</") != NULL);
3271 #  else
3272     if (dosearch) {
3273         int idx = 0, deftypes = 1;
3274         bool seen_dot = 1;
3275
3276         const int hasdir = (strpbrk(scriptname,":[</") != NULL);
3277 #  endif
3278         /* The first time through, just add SEARCH_EXTS to whatever we
3279          * already have, so we can check for default file types. */
3280         while (deftypes ||
3281                (!hasdir && my_trnlnm("DCL$PATH",tmpbuf,idx++)) )
3282         {
3283             Stat_t statbuf;
3284             if (deftypes) {
3285                 deftypes = 0;
3286                 *tmpbuf = '\0';
3287             }
3288             if ((strlen(tmpbuf) + strlen(scriptname)
3289                  + MAX_EXT_LEN) >= sizeof tmpbuf)
3290                 continue;       /* don't search dir with too-long name */
3291             my_strlcat(tmpbuf, scriptname, sizeof(tmpbuf));
3292 #else  /* !VMS */
3293
3294 #ifdef DOSISH
3295     if (strEQ(scriptname, "-"))
3296         dosearch = 0;
3297     if (dosearch) {             /* Look in '.' first. */
3298         const char *cur = scriptname;
3299 #ifdef SEARCH_EXTS
3300         if ((curext = strrchr(scriptname,'.'))) /* possible current ext */
3301             while (ext[i])
3302                 if (strEQ(ext[i++],curext)) {
3303                     extidx = -1;                /* already has an ext */
3304                     break;
3305                 }
3306         do {
3307 #endif
3308             DEBUG_p(PerlIO_printf(Perl_debug_log,
3309                                   "Looking for %s\n",cur));
3310             {
3311                 Stat_t statbuf;
3312                 if (PerlLIO_stat(cur,&statbuf) >= 0
3313                     && !S_ISDIR(statbuf.st_mode)) {
3314                     dosearch = 0;
3315                     scriptname = cur;
3316 #ifdef SEARCH_EXTS
3317                     break;
3318 #endif
3319                 }
3320             }
3321 #ifdef SEARCH_EXTS
3322             if (cur == scriptname) {
3323                 len = strlen(scriptname);
3324                 if (len+MAX_EXT_LEN+1 >= sizeof(tmpbuf))
3325                     break;
3326                 my_strlcpy(tmpbuf, scriptname, sizeof(tmpbuf));
3327                 cur = tmpbuf;
3328             }
3329         } while (extidx >= 0 && ext[extidx]     /* try an extension? */
3330                  && my_strlcpy(tmpbuf+len, ext[extidx++], sizeof(tmpbuf) - len));
3331 #endif
3332     }
3333 #endif
3334
3335     if (dosearch && !strchr(scriptname, '/')
3336 #ifdef DOSISH
3337                  && !strchr(scriptname, '\\')
3338 #endif
3339                  && (s = PerlEnv_getenv("PATH")))
3340     {
3341         bool seen_dot = 0;
3342
3343         bufend = s + strlen(s);
3344         while (s < bufend) {
3345             Stat_t statbuf;
3346 #  ifdef DOSISH
3347             for (len = 0; *s
3348                     && *s != ';'; len++, s++) {
3349                 if (len < sizeof tmpbuf)
3350                     tmpbuf[len] = *s;
3351             }
3352             if (len < sizeof tmpbuf)
3353                 tmpbuf[len] = '\0';
3354 #  else
3355             s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf, s, bufend,
3356                         ':',
3357                         &len);
3358 #  endif
3359             if (s < bufend)
3360                 s++;
3361             if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
3362                 continue;       /* don't search dir with too-long name */
3363             if (len
3364 #  ifdef DOSISH
3365                 && tmpbuf[len - 1] != '/'
3366                 && tmpbuf[len - 1] != '\\'
3367 #  endif
3368                )
3369                 tmpbuf[len++] = '/';
3370             if (len == 2 && tmpbuf[0] == '.')
3371                 seen_dot = 1;
3372             (void)my_strlcpy(tmpbuf + len, scriptname, sizeof(tmpbuf) - len);
3373 #endif  /* !VMS */
3374
3375 #ifdef SEARCH_EXTS
3376             len = strlen(tmpbuf);
3377             if (extidx > 0)     /* reset after previous loop */
3378                 extidx = 0;
3379             do {
3380 #endif
3381                 DEBUG_p(PerlIO_printf(Perl_debug_log, "Looking for %s\n",tmpbuf));
3382                 retval = PerlLIO_stat(tmpbuf,&statbuf);
3383                 if (S_ISDIR(statbuf.st_mode)) {
3384                     retval = -1;
3385                 }
3386 #ifdef SEARCH_EXTS
3387             } while (  retval < 0               /* not there */
3388                     && extidx>=0 && ext[extidx] /* try an extension? */
3389                     && my_strlcpy(tmpbuf+len, ext[extidx++], sizeof(tmpbuf) - len)
3390                 );
3391 #endif
3392             if (retval < 0)
3393                 continue;
3394             if (S_ISREG(statbuf.st_mode)
3395                 && cando(S_IRUSR,TRUE,&statbuf)
3396 #if !defined(DOSISH)
3397                 && cando(S_IXUSR,TRUE,&statbuf)
3398 #endif
3399                 )
3400             {
3401                 xfound = tmpbuf;                /* bingo! */
3402                 break;
3403             }
3404             if (!xfailed)
3405                 xfailed = savepv(tmpbuf);
3406         }
3407 #ifndef DOSISH
3408         {
3409             Stat_t statbuf;
3410             if (!xfound && !seen_dot && !xfailed &&
3411                 (PerlLIO_stat(scriptname,&statbuf) < 0
3412                  || S_ISDIR(statbuf.st_mode)))
3413 #endif
3414                 seen_dot = 1;                   /* Disable message. */
3415 #ifndef DOSISH
3416         }
3417 #endif
3418         if (!xfound) {
3419             if (flags & 1) {                    /* do or die? */
3420                 /* diag_listed_as: Can't execute %s */
3421                 Perl_croak(aTHX_ "Can't %s %s%s%s",
3422                       (xfailed ? "execute" : "find"),
3423                       (xfailed ? xfailed : scriptname),
3424                       (xfailed ? "" : " on PATH"),
3425                       (xfailed || seen_dot) ? "" : ", '.' not in PATH");
3426             }
3427             scriptname = NULL;
3428         }
3429         Safefree(xfailed);
3430         scriptname = xfound;
3431     }
3432     return (scriptname ? savepv(scriptname) : NULL);
3433 }
3434
3435 #ifndef PERL_GET_CONTEXT_DEFINED
3436
3437 void *
3438 Perl_get_context(void)
3439 {
3440 #if defined(USE_ITHREADS)
3441     dVAR;
3442 #  ifdef OLD_PTHREADS_API
3443     pthread_addr_t t;
3444     int error = pthread_getspecific(PL_thr_key, &t)
3445     if (error)
3446         Perl_croak_nocontext("panic: pthread_getspecific, error=%d", error);
3447     return (void*)t;
3448 #  else
3449 #    ifdef I_MACH_CTHREADS
3450     return (void*)cthread_data(cthread_self());
3451 #    else
3452     return (void*)PTHREAD_GETSPECIFIC(PL_thr_key);
3453 #    endif
3454 #  endif
3455 #else
3456     return (void*)NULL;
3457 #endif
3458 }
3459
3460 void
3461 Perl_set_context(void *t)
3462 {
3463 #if defined(USE_ITHREADS)
3464     dVAR;
3465 #endif
3466     PERL_ARGS_ASSERT_SET_CONTEXT;
3467 #if defined(USE_ITHREADS)
3468 #  ifdef I_MACH_CTHREADS
3469     cthread_set_data(cthread_self(), t);
3470 #  else
3471     {
3472         const int error = pthread_setspecific(PL_thr_key, t);
3473         if (error)
3474             Perl_croak_nocontext("panic: pthread_setspecific, error=%d", error);
3475     }
3476 #  endif
3477 #else
3478     PERL_UNUSED_ARG(t);
3479 #endif
3480 }
3481
3482 #endif /* !PERL_GET_CONTEXT_DEFINED */
3483
3484 #if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
3485 struct perl_vars *
3486 Perl_GetVars(pTHX)
3487 {
3488     PERL_UNUSED_CONTEXT;
3489     return &PL_Vars;
3490 }
3491 #endif
3492
3493 char **
3494 Perl_get_op_names(pTHX)
3495 {
3496     PERL_UNUSED_CONTEXT;
3497     return (char **)PL_op_name;
3498 }
3499
3500 char **
3501 Perl_get_op_descs(pTHX)
3502 {
3503     PERL_UNUSED_CONTEXT;
3504     return (char **)PL_op_desc;
3505 }
3506
3507 const char *
3508 Perl_get_no_modify(pTHX)
3509 {
3510     PERL_UNUSED_CONTEXT;
3511     return PL_no_modify;
3512 }
3513
3514 U32 *
3515 Perl_get_opargs(pTHX)
3516 {
3517     PERL_UNUSED_CONTEXT;
3518     return (U32 *)PL_opargs;
3519 }
3520
3521 PPADDR_t*
3522 Perl_get_ppaddr(pTHX)
3523 {
3524     dVAR;
3525     PERL_UNUSED_CONTEXT;
3526     return (PPADDR_t*)PL_ppaddr;
3527 }
3528
3529 #ifndef HAS_GETENV_LEN
3530 char *
3531 Perl_getenv_len(pTHX_ const char *env_elem, unsigned long *len)
3532 {
3533     char * const env_trans = PerlEnv_getenv(env_elem);
3534     PERL_UNUSED_CONTEXT;
3535     PERL_ARGS_ASSERT_GETENV_LEN;
3536     if (env_trans)
3537         *len = strlen(env_trans);
3538     return env_trans;
3539 }
3540 #endif
3541
3542
3543 MGVTBL*
3544 Perl_get_vtbl(pTHX_ int vtbl_id)
3545 {
3546     PERL_UNUSED_CONTEXT;
3547
3548     return (vtbl_id < 0 || vtbl_id >= magic_vtable_max)
3549         ? NULL : (MGVTBL*)PL_magic_vtables + vtbl_id;
3550 }
3551
3552 I32
3553 Perl_my_fflush_all(pTHX)
3554 {
3555 #if defined(USE_PERLIO) || defined(FFLUSH_NULL)
3556     return PerlIO_flush(NULL);
3557 #else
3558 # if defined(HAS__FWALK)
3559     extern int fflush(FILE *);
3560     /* undocumented, unprototyped, but very useful BSDism */
3561     extern void _fwalk(int (*)(FILE *));
3562     _fwalk(&fflush);
3563     return 0;
3564 # else
3565 #  if defined(FFLUSH_ALL) && defined(HAS_STDIO_STREAM_ARRAY)
3566     long open_max = -1;
3567 #   ifdef PERL_FFLUSH_ALL_FOPEN_MAX
3568     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
3569 #   else
3570 #    if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
3571     open_max = sysconf(_SC_OPEN_MAX);
3572 #     else
3573 #      ifdef FOPEN_MAX
3574     open_max = FOPEN_MAX;
3575 #      else
3576 #       ifdef OPEN_MAX
3577     open_max = OPEN_MAX;
3578 #       else
3579 #        ifdef _NFILE
3580     open_max = _NFILE;
3581 #        endif
3582 #       endif
3583 #      endif
3584 #     endif
3585 #    endif
3586     if (open_max > 0) {
3587       long i;
3588       for (i = 0; i < open_max; i++)
3589             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
3590                 STDIO_STREAM_ARRAY[i]._file < open_max &&
3591                 STDIO_STREAM_ARRAY[i]._flag)
3592                 PerlIO_flush(&STDIO_STREAM_ARRAY[i]);
3593       return 0;
3594     }
3595 #  endif
3596     SETERRNO(EBADF,RMS_IFI);
3597     return EOF;
3598 # endif
3599 #endif
3600 }
3601
3602 void
3603 Perl_report_wrongway_fh(pTHX_ const GV *gv, const char have)
3604 {
3605     if (ckWARN(WARN_IO)) {
3606         HEK * const name
3607            = gv && (isGV_with_GP(gv))
3608                 ? GvENAME_HEK((gv))
3609                 : NULL;
3610         const char * const direction = have == '>' ? "out" : "in";
3611
3612         if (name && HEK_LEN(name))
3613             Perl_warner(aTHX_ packWARN(WARN_IO),
3614                         "Filehandle %" HEKf " opened only for %sput",
3615                         HEKfARG(name), direction);
3616         else
3617             Perl_warner(aTHX_ packWARN(WARN_IO),
3618                         "Filehandle opened only for %sput", direction);
3619     }
3620 }
3621
3622 void
3623 Perl_report_evil_fh(pTHX_ const GV *gv)
3624 {
3625     const IO *io = gv ? GvIO(gv) : NULL;
3626     const PERL_BITFIELD16 op = PL_op->op_type;
3627     const char *vile;
3628     I32 warn_type;
3629
3630     if (io && IoTYPE(io) == IoTYPE_CLOSED) {
3631         vile = "closed";
3632         warn_type = WARN_CLOSED;
3633     }
3634     else {
3635         vile = "unopened";
3636         warn_type = WARN_UNOPENED;
3637     }
3638
3639     if (ckWARN(warn_type)) {
3640         SV * const name
3641             = gv && isGV_with_GP(gv) && GvENAMELEN(gv) ?
3642                                      sv_2mortal(newSVhek(GvENAME_HEK(gv))) : NULL;
3643         const char * const pars =
3644             (const char *)(OP_IS_FILETEST(op) ? "" : "()");
3645         const char * const func =
3646             (const char *)
3647             (op == OP_READLINE || op == OP_RCATLINE
3648                                  ? "readline"  :        /* "<HANDLE>" not nice */
3649              op == OP_LEAVEWRITE ? "write" :            /* "write exit" not nice */
3650              PL_op_desc[op]);
3651         const char * const type =
3652             (const char *)
3653             (OP_IS_SOCKET(op) || (io && IoTYPE(io) == IoTYPE_SOCKET)
3654              ? "socket" : "filehandle");
3655         const bool have_name = name && SvCUR(name);
3656         Perl_warner(aTHX_ packWARN(warn_type),
3657                    "%s%s on %s %s%s%" SVf, func, pars, vile, type,
3658                     have_name ? " " : "",
3659                     SVfARG(have_name ? name : &PL_sv_no));
3660         if (io && IoDIRP(io) && !(IoFLAGS(io) & IOf_FAKE_DIRP))
3661                 Perl_warner(
3662                             aTHX_ packWARN(warn_type),
3663                         "\t(Are you trying to call %s%s on dirhandle%s%" SVf "?)\n",
3664                         func, pars, have_name ? " " : "",
3665                         SVfARG(have_name ? name : &PL_sv_no)
3666                             );
3667     }
3668 }
3669
3670 /* To workaround core dumps from the uninitialised tm_zone we get the
3671  * system to give us a reasonable struct to copy.  This fix means that
3672  * strftime uses the tm_zone and tm_gmtoff values returned by
3673  * localtime(time()). That should give the desired result most of the
3674  * time. But probably not always!
3675  *
3676  * This does not address tzname aspects of NETaa14816.
3677  *
3678  */
3679
3680 #ifdef __GLIBC__
3681 # ifndef STRUCT_TM_HASZONE
3682 #    define STRUCT_TM_HASZONE
3683 # endif
3684 #endif
3685
3686 #ifdef STRUCT_TM_HASZONE /* Backward compat */
3687 # ifndef HAS_TM_TM_ZONE
3688 #    define HAS_TM_TM_ZONE
3689 # endif
3690 #endif
3691
3692 void
3693 Perl_init_tm(pTHX_ struct tm *ptm)      /* see mktime, strftime and asctime */
3694 {
3695 #ifdef HAS_TM_TM_ZONE
3696     Time_t now;
3697     const struct tm* my_tm;
3698     PERL_UNUSED_CONTEXT;
3699     PERL_ARGS_ASSERT_INIT_TM;
3700     (void)time(&now);
3701     my_tm = localtime(&now);
3702     if (my_tm)
3703         Copy(my_tm, ptm, 1, struct tm);
3704 #else
3705     PERL_UNUSED_CONTEXT;
3706     PERL_ARGS_ASSERT_INIT_TM;
3707     PERL_UNUSED_ARG(ptm);
3708 #endif
3709 }
3710
3711 /*
3712  * mini_mktime - normalise struct tm values without the localtime()
3713  * semantics (and overhead) of mktime().
3714  */
3715 void
3716 Perl_mini_mktime(struct tm *ptm)
3717 {
3718     int yearday;
3719     int secs;
3720     int month, mday, year, jday;
3721     int odd_cent, odd_year;
3722
3723     PERL_ARGS_ASSERT_MINI_MKTIME;
3724
3725 #define DAYS_PER_YEAR   365
3726 #define DAYS_PER_QYEAR  (4*DAYS_PER_YEAR+1)
3727 #define DAYS_PER_CENT   (25*DAYS_PER_QYEAR-1)
3728 #define DAYS_PER_QCENT  (4*DAYS_PER_CENT+1)
3729 #define SECS_PER_HOUR   (60*60)
3730 #define SECS_PER_DAY    (24*SECS_PER_HOUR)
3731 /* parentheses deliberately absent on these two, otherwise they don't work */
3732 #define MONTH_TO_DAYS   153/5
3733 #define DAYS_TO_MONTH   5/153
3734 /* offset to bias by March (month 4) 1st between month/mday & year finding */
3735 #define YEAR_ADJUST     (4*MONTH_TO_DAYS+1)
3736 /* as used here, the algorithm leaves Sunday as day 1 unless we adjust it */
3737 #define WEEKDAY_BIAS    6       /* (1+6)%7 makes Sunday 0 again */
3738
3739 /*
3740  * Year/day algorithm notes:
3741  *
3742  * With a suitable offset for numeric value of the month, one can find
3743  * an offset into the year by considering months to have 30.6 (153/5) days,
3744  * using integer arithmetic (i.e., with truncation).  To avoid too much
3745  * messing about with leap days, we consider January and February to be
3746  * the 13th and 14th month of the previous year.  After that transformation,
3747  * we need the month index we use to be high by 1 from 'normal human' usage,
3748  * so the month index values we use run from 4 through 15.
3749  *
3750  * Given that, and the rules for the Gregorian calendar (leap years are those
3751  * divisible by 4 unless also divisible by 100, when they must be divisible
3752  * by 400 instead), we can simply calculate the number of days since some
3753  * arbitrary 'beginning of time' by futzing with the (adjusted) year number,
3754  * the days we derive from our month index, and adding in the day of the
3755  * month.  The value used here is not adjusted for the actual origin which
3756  * it normally would use (1 January A.D. 1), since we're not exposing it.
3757  * We're only building the value so we can turn around and get the
3758  * normalised values for the year, month, day-of-month, and day-of-year.
3759  *
3760  * For going backward, we need to bias the value we're using so that we find
3761  * the right year value.  (Basically, we don't want the contribution of
3762  * March 1st to the number to apply while deriving the year).  Having done
3763  * that, we 'count up' the contribution to the year number by accounting for
3764  * full quadracenturies (400-year periods) with their extra leap days, plus
3765  * the contribution from full centuries (to avoid counting in the lost leap
3766  * days), plus the contribution from full quad-years (to count in the normal
3767  * leap days), plus the leftover contribution from any non-leap years.
3768  * At this point, if we were working with an actual leap day, we'll have 0
3769  * days left over.  This is also true for March 1st, however.  So, we have
3770  * to special-case that result, and (earlier) keep track of the 'odd'
3771  * century and year contributions.  If we got 4 extra centuries in a qcent,
3772  * or 4 extra years in a qyear, then it's a leap day and we call it 29 Feb.
3773  * Otherwise, we add back in the earlier bias we removed (the 123 from
3774  * figuring in March 1st), find the month index (integer division by 30.6),
3775  * and the remainder is the day-of-month.  We then have to convert back to
3776  * 'real' months (including fixing January and February from being 14/15 in
3777  * the previous year to being in the proper year).  After that, to get
3778  * tm_yday, we work with the normalised year and get a new yearday value for
3779  * January 1st, which we subtract from the yearday value we had earlier,
3780  * representing the date we've re-built.  This is done from January 1
3781  * because tm_yday is 0-origin.
3782  *
3783  * Since POSIX time routines are only guaranteed to work for times since the
3784  * UNIX epoch (00:00:00 1 Jan 1970 UTC), the fact that this algorithm
3785  * applies Gregorian calendar rules even to dates before the 16th century
3786  * doesn't bother me.  Besides, you'd need cultural context for a given
3787  * date to know whether it was Julian or Gregorian calendar, and that's
3788  * outside the scope for this routine.  Since we convert back based on the
3789  * same rules we used to build the yearday, you'll only get strange results
3790  * for input which needed normalising, or for the 'odd' century years which
3791  * were leap years in the Julian calendar but not in the Gregorian one.
3792  * I can live with that.
3793  *
3794  * This algorithm also fails to handle years before A.D. 1 gracefully, but
3795  * that's still outside the scope for POSIX time manipulation, so I don't
3796  * care.
3797  */
3798
3799     year = 1900 + ptm->tm_year;
3800     month = ptm->tm_mon;
3801     mday = ptm->tm_mday;
3802     jday = 0;
3803     if (month >= 2)
3804         month+=2;
3805     else
3806         month+=14, year--;
3807     yearday = DAYS_PER_YEAR * year + year/4 - year/100 + year/400;
3808     yearday += month*MONTH_TO_DAYS + mday + jday;
3809     /*
3810      * Note that we don't know when leap-seconds were or will be,
3811      * so we have to trust the user if we get something which looks
3812      * like a sensible leap-second.  Wild values for seconds will
3813      * be rationalised, however.
3814      */
3815     if ((unsigned) ptm->tm_sec <= 60) {
3816         secs = 0;
3817     }
3818     else {
3819         secs = ptm->tm_sec;
3820         ptm->tm_sec = 0;
3821     }
3822     secs += 60 * ptm->tm_min;
3823     secs += SECS_PER_HOUR * ptm->tm_hour;
3824     if (secs < 0) {
3825         if (secs-(secs/SECS_PER_DAY*SECS_PER_DAY) < 0) {
3826             /* got negative remainder, but need positive time */
3827             /* back off an extra day to compensate */
3828             yearday += (secs/SECS_PER_DAY)-1;
3829             secs -= SECS_PER_DAY * (secs/SECS_PER_DAY - 1);
3830         }
3831         else {
3832             yearday += (secs/SECS_PER_DAY);
3833             secs -= SECS_PER_DAY * (secs/SECS_PER_DAY);
3834         }
3835     }
3836     else if (secs >= SECS_PER_DAY) {
3837         yearday += (secs/SECS_PER_DAY);
3838         secs %= SECS_PER_DAY;
3839     }
3840     ptm->tm_hour = secs/SECS_PER_HOUR;
3841     secs %= SECS_PER_HOUR;
3842     ptm->tm_min = secs/60;
3843     secs %= 60;
3844     ptm->tm_sec += secs;
3845     /* done with time of day effects */
3846     /*
3847      * The algorithm for yearday has (so far) left it high by 428.
3848      * To avoid mistaking a legitimate Feb 29 as Mar 1, we need to
3849      * bias it by 123 while trying to figure out what year it
3850      * really represents.  Even with this tweak, the reverse
3851      * translation fails for years before A.D. 0001.
3852      * It would still fail for Feb 29, but we catch that one below.
3853      */
3854     jday = yearday;     /* save for later fixup vis-a-vis Jan 1 */
3855     yearday -= YEAR_ADJUST;
3856     year = (yearday / DAYS_PER_QCENT) * 400;
3857     yearday %= DAYS_PER_QCENT;
3858     odd_cent = yearday / DAYS_PER_CENT;
3859     year += odd_cent * 100;
3860     yearday %= DAYS_PER_CENT;
3861     year += (yearday / DAYS_PER_QYEAR) * 4;
3862     yearday %= DAYS_PER_QYEAR;
3863     odd_year = yearday / DAYS_PER_YEAR;
3864     year += odd_year;
3865     yearday %= DAYS_PER_YEAR;
3866     if (!yearday && (odd_cent==4 || odd_year==4)) { /* catch Feb 29 */
3867         month = 1;
3868         yearday = 29;
3869     }
3870     else {
3871         yearday += YEAR_ADJUST; /* recover March 1st crock */
3872         month = yearday*DAYS_TO_MONTH;
3873         yearday -= month*MONTH_TO_DAYS;
3874         /* recover other leap-year adjustment */
3875         if (month > 13) {
3876             month-=14;
3877             year++;
3878         }
3879         else {
3880             month-=2;
3881         }
3882     }
3883     ptm->tm_year = year - 1900;
3884     if (yearday) {
3885       ptm->tm_mday = yearday;
3886       ptm->tm_mon = month;
3887     }
3888     else {
3889       ptm->tm_mday = 31;
3890       ptm->tm_mon = month - 1;
3891     }
3892     /* re-build yearday based on Jan 1 to get tm_yday */
3893     year--;
3894     yearday = year*DAYS_PER_YEAR + year/4 - year/100 + year/400;
3895     yearday += 14*MONTH_TO_DAYS + 1;
3896     ptm->tm_yday = jday - yearday;
3897     ptm->tm_wday = (jday + WEEKDAY_BIAS) % 7;
3898 }
3899
3900 char *
3901 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)
3902 {
3903 #ifdef HAS_STRFTIME
3904
3905   /* Note that yday and wday effectively are ignored by this function, as mini_mktime() overwrites them */
3906
3907   char *buf;
3908   int buflen;
3909   struct tm mytm;
3910   int len;
3911
3912   PERL_ARGS_ASSERT_MY_STRFTIME;
3913
3914   init_tm(&mytm);       /* XXX workaround - see init_tm() above */
3915   mytm.tm_sec = sec;
3916   mytm.tm_min = min;
3917   mytm.tm_hour = hour;
3918   mytm.tm_mday = mday;
3919   mytm.tm_mon = mon;
3920   mytm.tm_year = year;
3921   mytm.tm_wday = wday;
3922   mytm.tm_yday = yday;
3923   mytm.tm_isdst = isdst;
3924   mini_mktime(&mytm);
3925   /* use libc to get the values for tm_gmtoff and tm_zone [perl #18238] */
3926 #if defined(HAS_MKTIME) && (defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE))
3927   STMT_START {
3928     struct tm mytm2;
3929     mytm2 = mytm;
3930     mktime(&mytm2);
3931 #ifdef HAS_TM_TM_GMTOFF
3932     mytm.tm_gmtoff = mytm2.tm_gmtoff;
3933 #endif
3934 #ifdef HAS_TM_TM_ZONE
3935     mytm.tm_zone = mytm2.tm_zone;
3936 #endif
3937   } STMT_END;
3938 #endif
3939   buflen = 64;
3940   Newx(buf, buflen, char);
3941
3942   GCC_DIAG_IGNORE(-Wformat-nonliteral); /* fmt checked by caller */
3943   len = strftime(buf, buflen, fmt, &mytm);
3944   GCC_DIAG_RESTORE;
3945
3946   /*
3947   ** The following is needed to handle to the situation where
3948   ** tmpbuf overflows.  Basically we want to allocate a buffer
3949   ** and try repeatedly.  The reason why it is so complicated
3950   ** is that getting a return value of 0 from strftime can indicate
3951   ** one of the following:
3952   ** 1. buffer overflowed,
3953   ** 2. illegal conversion specifier, or
3954   ** 3. the format string specifies nothing to be returned(not
3955   **      an error).  This could be because format is an empty string
3956   **    or it specifies %p that yields an empty string in some locale.
3957   ** If there is a better way to make it portable, go ahead by
3958   ** all means.
3959   */
3960   if ((len > 0 && len < buflen) || (len == 0 && *fmt == '\0'))
3961     return buf;
3962   else {
3963     /* Possibly buf overflowed - try again with a bigger buf */
3964     const int fmtlen = strlen(fmt);
3965     int bufsize = fmtlen + buflen;
3966
3967     Renew(buf, bufsize, char);
3968     while (buf) {
3969
3970       GCC_DIAG_IGNORE(-Wformat-nonliteral); /* fmt checked by caller */
3971       buflen = strftime(buf, bufsize, fmt, &mytm);
3972       GCC_DIAG_RESTORE;
3973
3974       if (buflen > 0 && buflen < bufsize)
3975         break;
3976       /* heuristic to prevent out-of-memory errors */
3977       if (bufsize > 100*fmtlen) {
3978         Safefree(buf);
3979         buf = NULL;
3980         break;
3981       }
3982       bufsize *= 2;
3983       Renew(buf, bufsize, char);
3984     }
3985     return buf;
3986   }
3987 #else
3988   Perl_croak(aTHX_ "panic: no strftime");
3989   return NULL;
3990 #endif
3991 }
3992
3993
3994 #define SV_CWD_RETURN_UNDEF \
3995     sv_set_undef(sv); \
3996     return FALSE
3997
3998 #define SV_CWD_ISDOT(dp) \
3999     (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
4000         (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
4001
4002 /*
4003 =head1 Miscellaneous Functions
4004
4005 =for apidoc getcwd_sv
4006
4007 Fill C<sv> with current working directory
4008
4009 =cut
4010 */
4011
4012 /* Originally written in Perl by John Bazik; rewritten in C by Ben Sugars.
4013  * rewritten again by dougm, optimized for use with xs TARG, and to prefer
4014  * getcwd(3) if available
4015  * Comments from the original:
4016  *     This is a faster version of getcwd.  It's also more dangerous
4017  *     because you might chdir out of a directory that you can't chdir
4018  *     back into. */
4019
4020 int
4021 Perl_getcwd_sv(pTHX_ SV *sv)
4022 {
4023 #ifndef PERL_MICRO
4024     SvTAINTED_on(sv);
4025
4026     PERL_ARGS_ASSERT_GETCWD_SV;
4027
4028 #ifdef HAS_GETCWD
4029     {
4030         char buf[MAXPATHLEN];
4031
4032         /* Some getcwd()s automatically allocate a buffer of the given
4033          * size from the heap if they are given a NULL buffer pointer.
4034          * The problem is that this behaviour is not portable. */
4035         if (getcwd(buf, sizeof(buf) - 1)) {
4036             sv_setpv(sv, buf);
4037             return TRUE;
4038         }
4039         else {
4040             SV_CWD_RETURN_UNDEF;
4041         }
4042     }
4043
4044 #else
4045
4046     Stat_t statbuf;
4047     int orig_cdev, orig_cino, cdev, cino, odev, oino, tdev, tino;
4048     int pathlen=0;
4049     Direntry_t *dp;
4050
4051     SvUPGRADE(sv, SVt_PV);
4052
4053     if (PerlLIO_lstat(".", &statbuf) < 0) {
4054         SV_CWD_RETURN_UNDEF;
4055     }
4056
4057     orig_cdev = statbuf.st_dev;
4058     orig_cino = statbuf.st_ino;
4059     cdev = orig_cdev;
4060     cino = orig_cino;
4061
4062     for (;;) {
4063         DIR *dir;
4064         int namelen;
4065         odev = cdev;
4066         oino = cino;
4067
4068         if (PerlDir_chdir("..") < 0) {
4069             SV_CWD_RETURN_UNDEF;
4070         }
4071         if (PerlLIO_stat(".", &statbuf) < 0) {
4072             SV_CWD_RETURN_UNDEF;
4073         }
4074
4075         cdev = statbuf.st_dev;
4076         cino = statbuf.st_ino;
4077
4078         if (odev == cdev && oino == cino) {
4079             break;
4080         }
4081         if (!(dir = PerlDir_open("."))) {
4082             SV_CWD_RETURN_UNDEF;
4083         }
4084
4085         while ((dp = PerlDir_read(dir)) != NULL) {
4086 #ifdef DIRNAMLEN
4087             namelen = dp->d_namlen;
4088 #else
4089             namelen = strlen(dp->d_name);
4090 #endif
4091             /* skip . and .. */
4092             if (SV_CWD_ISDOT(dp)) {
4093                 continue;
4094             }
4095
4096             if (PerlLIO_lstat(dp->d_name, &statbuf) < 0) {
4097                 SV_CWD_RETURN_UNDEF;
4098             }
4099
4100             tdev = statbuf.st_dev;
4101             tino = statbuf.st_ino;
4102             if (tino == oino && tdev == odev) {
4103                 break;
4104             }
4105         }
4106
4107         if (!dp) {
4108             SV_CWD_RETURN_UNDEF;
4109         }
4110
4111         if (pathlen + namelen + 1 >= MAXPATHLEN) {
4112             SV_CWD_RETURN_UNDEF;
4113         }
4114
4115         SvGROW(sv, pathlen + namelen + 1);
4116
4117         if (pathlen) {
4118             /* shift down */
4119             Move(SvPVX_const(sv), SvPVX(sv) + namelen + 1, pathlen, char);
4120         }
4121
4122         /* prepend current directory to the front */
4123         *SvPVX(sv) = '/';
4124         Move(dp->d_name, SvPVX(sv)+1, namelen, char);
4125         pathlen += (namelen + 1);
4126
4127 #ifdef VOID_CLOSEDIR
4128         PerlDir_close(dir);
4129 #else
4130         if (PerlDir_close(dir) < 0) {
4131             SV_CWD_RETURN_UNDEF;
4132         }
4133 #endif
4134     }
4135
4136     if (pathlen) {
4137         SvCUR_set(sv, pathlen);
4138         *SvEND(sv) = '\0';
4139         SvPOK_only(sv);
4140
4141         if (PerlDir_chdir(SvPVX_const(sv)) < 0) {
4142             SV_CWD_RETURN_UNDEF;
4143         }
4144     }
4145     if (PerlLIO_stat(".", &statbuf) < 0) {
4146         SV_CWD_RETURN_UNDEF;
4147     }
4148
4149     cdev = statbuf.st_dev;
4150     cino = statbuf.st_ino;
4151
4152     if (cdev != orig_cdev || cino != orig_cino) {
4153         Perl_croak(aTHX_ "Unstable directory path, "
4154                    "current directory changed unexpectedly");
4155     }
4156
4157     return TRUE;
4158 #endif
4159
4160 #else
4161     return FALSE;
4162 #endif
4163 }
4164
4165 #include "vutil.c"
4166
4167 #if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET) && defined(AF_INET) && defined(PF_INET) && defined(SOCK_DGRAM) && defined(HAS_SELECT)
4168 #   define EMULATE_SOCKETPAIR_UDP
4169 #endif
4170
4171 #ifdef EMULATE_SOCKETPAIR_UDP
4172 static int
4173 S_socketpair_udp (int fd[2]) {
4174     dTHX;
4175     /* Fake a datagram socketpair using UDP to localhost.  */
4176     int sockets[2] = {-1, -1};
4177     struct sockaddr_in addresses[2];
4178     int i;
4179     Sock_size_t size = sizeof(struct sockaddr_in);
4180     unsigned short port;
4181     int got;
4182
4183     memset(&addresses, 0, sizeof(addresses));
4184     i = 1;
4185     do {
4186         sockets[i] = PerlSock_socket(AF_INET, SOCK_DGRAM, PF_INET);
4187         if (sockets[i] == -1)
4188             goto tidy_up_and_fail;
4189
4190         addresses[i].sin_family = AF_INET;
4191         addresses[i].sin_addr.s_addr = htonl(INADDR_LOOPBACK);
4192         addresses[i].sin_port = 0;      /* kernel choses port.  */
4193         if (PerlSock_bind(sockets[i], (struct sockaddr *) &addresses[i],
4194                 sizeof(struct sockaddr_in)) == -1)
4195             goto tidy_up_and_fail;
4196     } while (i--);
4197
4198     /* Now have 2 UDP sockets. Find out which port each is connected to, and
4199        for each connect the other socket to it.  */
4200     i = 1;
4201     do {
4202         if (PerlSock_getsockname(sockets[i], (struct sockaddr *) &addresses[i],
4203                 &size) == -1)
4204             goto tidy_up_and_fail;
4205         if (size != sizeof(struct sockaddr_in))
4206             goto abort_tidy_up_and_fail;
4207         /* !1 is 0, !0 is 1 */
4208         if (PerlSock_connect(sockets[!i], (struct sockaddr *) &addresses[i],
4209                 sizeof(struct sockaddr_in)) == -1)
4210             goto tidy_up_and_fail;
4211     } while (i--);
4212
4213     /* Now we have 2 sockets connected to each other. I don't trust some other
4214        process not to have already sent a packet to us (by random) so send
4215        a packet from each to the other.  */
4216     i = 1;
4217     do {
4218         /* I'm going to send my own port number.  As a short.
4219            (Who knows if someone somewhere has sin_port as a bitfield and needs
4220            this routine. (I'm assuming crays have socketpair)) */
4221         port = addresses[i].sin_port;
4222         got = PerlLIO_write(sockets[i], &port, sizeof(port));
4223         if (got != sizeof(port)) {
4224             if (got == -1)
4225                 goto tidy_up_and_fail;
4226             goto abort_tidy_up_and_fail;
4227         }
4228     } while (i--);
4229
4230     /* Packets sent. I don't trust them to have arrived though.
4231        (As I understand it Solaris TCP stack is multithreaded. Non-blocking
4232        connect to localhost will use a second kernel thread. In 2.6 the
4233        first thread running the connect() returns before the second completes,
4234        so EINPROGRESS> In 2.7 the improved stack is faster and connect()
4235        returns 0. Poor programs have tripped up. One poor program's authors'
4236        had a 50-1 reverse stock split. Not sure how connected these were.)
4237        So I don't trust someone not to have an unpredictable UDP stack.
4238     */
4239
4240     {
4241         struct timeval waitfor = {0, 100000}; /* You have 0.1 seconds */
4242         int max = sockets[1] > sockets[0] ? sockets[1] : sockets[0];
4243         fd_set rset;
4244
4245         FD_ZERO(&rset);
4246         FD_SET((unsigned int)sockets[0], &rset);
4247         FD_SET((unsigned int)sockets[1], &rset);
4248
4249         got = PerlSock_select(max + 1, &rset, NULL, NULL, &waitfor);
4250         if (got != 2 || !FD_ISSET(sockets[0], &rset)
4251                 || !FD_ISSET(sockets[1], &rset)) {
4252             /* I hope this is portable and appropriate.  */
4253             if (got == -1)
4254                 goto tidy_up_and_fail;
4255             goto abort_tidy_up_and_fail;
4256         }
4257     }
4258
4259     /* And the paranoia department even now doesn't trust it to have arrive
4260        (hence MSG_DONTWAIT). Or that what arrives was sent by us.  */
4261     {
4262         struct sockaddr_in readfrom;
4263         unsigned short buffer[2];
4264
4265         i = 1;
4266         do {
4267 #ifdef MSG_DONTWAIT
4268             got = PerlSock_recvfrom(sockets[i], (char *) &buffer,
4269                     sizeof(buffer), MSG_DONTWAIT,
4270                     (struct sockaddr *) &readfrom, &size);
4271 #else
4272             got = PerlSock_recvfrom(sockets[i], (char *) &buffer,
4273                     sizeof(buffer), 0,
4274                     (struct sockaddr *) &readfrom, &size);
4275 #endif
4276
4277             if (got == -1)
4278                 goto tidy_up_and_fail;
4279             if (got != sizeof(port)
4280                     || size != sizeof(struct sockaddr_in)
4281                     /* Check other socket sent us its port.  */
4282                     || buffer[0] != (unsigned short) addresses[!i].sin_port
4283                     /* Check kernel says we got the datagram from that socket */
4284                     || readfrom.sin_family != addresses[!i].sin_family
4285                     || readfrom.sin_addr.s_addr != addresses[!i].sin_addr.s_addr
4286                     || readfrom.sin_port != addresses[!i].sin_port)
4287                 goto abort_tidy_up_and_fail;
4288         } while (i--);
4289     }
4290     /* My caller (my_socketpair) has validated that this is non-NULL  */
4291     fd[0] = sockets[0];
4292     fd[1] = sockets[1];
4293     /* I hereby declare this connection open.  May God bless all who cross
4294        her.  */
4295     return 0;
4296
4297   abort_tidy_up_and_fail:
4298     errno = ECONNABORTED;
4299   tidy_up_and_fail:
4300     {
4301         dSAVE_ERRNO;
4302         if (sockets[0] != -1)
4303             PerlLIO_close(sockets[0]);
4304         if (sockets[1] != -1)
4305             PerlLIO_close(sockets[1]);
4306         RESTORE_ERRNO;
4307         return -1;
4308     }
4309 }
4310 #endif /*  EMULATE_SOCKETPAIR_UDP */
4311
4312 #if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET) && defined(AF_INET) && defined(PF_INET)
4313 int
4314 Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
4315     /* Stevens says that family must be AF_LOCAL, protocol 0.
4316        I'm going to enforce that, then ignore it, and use TCP (or UDP).  */
4317     dTHXa(NULL);
4318     int listener = -1;
4319     int connector = -1;
4320     int acceptor = -1;
4321     struct sockaddr_in listen_addr;
4322     struct sockaddr_in connect_addr;
4323     Sock_size_t size;
4324
4325     if (protocol
4326 #ifdef AF_UNIX
4327         || family != AF_UNIX
4328 #endif
4329     ) {
4330         errno = EAFNOSUPPORT;
4331         return -1;
4332     }
4333     if (!fd) {
4334         errno = EINVAL;
4335         return -1;
4336     }
4337
4338 #ifdef EMULATE_SOCKETPAIR_UDP
4339     if (type == SOCK_DGRAM)
4340         return S_socketpair_udp(fd);
4341 #endif
4342
4343     aTHXa(PERL_GET_THX);
4344     listener = PerlSock_socket(AF_INET, type, 0);
4345     if (listener == -1)
4346         return -1;
4347     memset(&listen_addr, 0, sizeof(listen_addr));
4348     listen_addr.sin_family = AF_INET;
4349     listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
4350     listen_addr.sin_port = 0;   /* kernel choses port.  */
4351     if (PerlSock_bind(listener, (struct sockaddr *) &listen_addr,
4352             sizeof(listen_addr)) == -1)
4353         goto tidy_up_and_fail;
4354     if (PerlSock_listen(listener, 1) == -1)
4355         goto tidy_up_and_fail;
4356
4357     connector = PerlSock_socket(AF_INET, type, 0);
4358     if (connector == -1)
4359         goto tidy_up_and_fail;
4360     /* We want to find out the port number to connect to.  */
4361     size = sizeof(connect_addr);
4362     if (PerlSock_getsockname(listener, (struct sockaddr *) &connect_addr,
4363             &size) == -1)
4364         goto tidy_up_and_fail;
4365     if (size != sizeof(connect_addr))
4366         goto abort_tidy_up_and_fail;
4367     if (PerlSock_connect(connector, (struct sockaddr *) &connect_addr,
4368             sizeof(connect_addr)) == -1)
4369         goto tidy_up_and_fail;
4370
4371     size = sizeof(listen_addr);
4372     acceptor = PerlSock_accept(listener, (struct sockaddr *) &listen_addr,
4373             &size);
4374     if (acceptor == -1)
4375         goto tidy_up_and_fail;
4376     if (size != sizeof(listen_addr))
4377         goto abort_tidy_up_and_fail;
4378     PerlLIO_close(listener);
4379     /* Now check we are talking to ourself by matching port and host on the
4380        two sockets.  */
4381     if (PerlSock_getsockname(connector, (struct sockaddr *) &connect_addr,
4382             &size) == -1)
4383         goto tidy_up_and_fail;
4384     if (size != sizeof(connect_addr)
4385             || listen_addr.sin_family != connect_addr.sin_family
4386             || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr
4387             || listen_addr.sin_port != connect_addr.sin_port) {
4388         goto abort_tidy_up_and_fail;
4389     }
4390     fd[0] = connector;
4391     fd[1] = acceptor;
4392     return 0;
4393
4394   abort_tidy_up_and_fail:
4395 #ifdef ECONNABORTED
4396   errno = ECONNABORTED; /* This would be the standard thing to do. */
4397 #else
4398 #  ifdef ECONNREFUSED
4399   errno = ECONNREFUSED; /* E.g. Symbian does not have ECONNABORTED. */
4400 #  else
4401   errno = ETIMEDOUT;    /* Desperation time. */
4402 #  endif
4403 #endif
4404   tidy_up_and_fail:
4405     {
4406         dSAVE_ERRNO;
4407         if (listener != -1)
4408             PerlLIO_close(listener);
4409         if (connector != -1)
4410             PerlLIO_close(connector);
4411         if (acceptor != -1)
4412             PerlLIO_close(acceptor);
4413         RESTORE_ERRNO;
4414         return -1;
4415     }
4416 }
4417 #else
4418 /* In any case have a stub so that there's code corresponding
4419  * to the my_socketpair in embed.fnc. */
4420 int
4421 Perl_my_socketpair (int family, int type, int protocol, int fd[2]) {
4422 #ifdef HAS_SOCKETPAIR
4423     return socketpair(family, type, protocol, fd);
4424 #else
4425     return -1;
4426 #endif
4427 }
4428 #endif
4429
4430 /*
4431
4432 =for apidoc sv_nosharing
4433
4434 Dummy routine which "shares" an SV when there is no sharing module present.
4435 Or "locks" it.  Or "unlocks" it.  In other
4436 words, ignores its single SV argument.
4437 Exists to avoid test for a C<NULL> function pointer and because it could
4438 potentially warn under some level of strict-ness.
4439
4440 =cut
4441 */
4442
4443 void
4444 Perl_sv_nosharing(pTHX_ SV *sv)
4445 {
4446     PERL_UNUSED_CONTEXT;
4447     PERL_UNUSED_ARG(sv);
4448 }
4449
4450 /*
4451
4452 =for apidoc sv_destroyable
4453
4454 Dummy routine which reports that object can be destroyed when there is no
4455 sharing module present.  It ignores its single SV argument, and returns
4456 'true'.  Exists to avoid test for a C<NULL> function pointer and because it
4457 could potentially warn under some level of strict-ness.
4458
4459 =cut
4460 */
4461
4462 bool
4463 Perl_sv_destroyable(pTHX_ SV *sv)
4464 {
4465     PERL_UNUSED_CONTEXT;
4466     PERL_UNUSED_ARG(sv);
4467     return TRUE;
4468 }
4469
4470 U32
4471 Perl_parse_unicode_opts(pTHX_ const char **popt)
4472 {
4473   const char *p = *popt;
4474   U32 opt = 0;
4475
4476   PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS;
4477
4478   if (*p) {
4479        if (isDIGIT(*p)) {
4480             const char* endptr;
4481             UV uv;
4482             if (grok_atoUV(p, &uv, &endptr) && uv <= U32_MAX) {
4483                 opt = (U32)uv;
4484                 p = endptr;
4485                 if (p && *p && *p != '\n' && *p != '\r') {
4486                     if (isSPACE(*p))
4487                         goto the_end_of_the_opts_parser;
4488                     else
4489                         Perl_croak(aTHX_ "Unknown Unicode option letter '%c'", *p);
4490                 }
4491             }
4492             else {
4493                 Perl_croak(aTHX_ "Invalid number '%s' for -C option.\n", p);
4494             }
4495         }
4496         else {
4497             for (; *p; p++) {
4498                  switch (*p) {
4499                  case PERL_UNICODE_STDIN:
4500                       opt |= PERL_UNICODE_STDIN_FLAG;   break;
4501                  case PERL_UNICODE_STDOUT:
4502                       opt |= PERL_UNICODE_STDOUT_FLAG;  break;
4503                  case PERL_UNICODE_STDERR:
4504                       opt |= PERL_UNICODE_STDERR_FLAG;  break;
4505                  case PERL_UNICODE_STD:
4506                       opt |= PERL_UNICODE_STD_FLAG;     break;
4507                  case PERL_UNICODE_IN:
4508                       opt |= PERL_UNICODE_IN_FLAG;      break;
4509                  case PERL_UNICODE_OUT:
4510                       opt |= PERL_UNICODE_OUT_FLAG;     break;
4511                  case PERL_UNICODE_INOUT:
4512                       opt |= PERL_UNICODE_INOUT_FLAG;   break;
4513                  case PERL_UNICODE_LOCALE:
4514                       opt |= PERL_UNICODE_LOCALE_FLAG;  break;
4515                  case PERL_UNICODE_ARGV:
4516                       opt |= PERL_UNICODE_ARGV_FLAG;    break;
4517                  case PERL_UNICODE_UTF8CACHEASSERT:
4518                       opt |= PERL_UNICODE_UTF8CACHEASSERT_FLAG; break;
4519                  default:
4520                       if (*p != '\n' && *p != '\r') {
4521                         if(isSPACE(*p)) goto the_end_of_the_opts_parser;
4522                         else
4523                           Perl_croak(aTHX_
4524                                      "Unknown Unicode option letter '%c'", *p);
4525                       }
4526                  }
4527             }
4528        }
4529   }
4530   else
4531        opt = PERL_UNICODE_DEFAULT_FLAGS;
4532
4533   the_end_of_the_opts_parser:
4534
4535   if (opt & ~PERL_UNICODE_ALL_FLAGS)
4536        Perl_croak(aTHX_ "Unknown Unicode option value %" UVuf,
4537                   (UV) (opt & ~PERL_UNICODE_ALL_FLAGS));
4538
4539   *popt = p;
4540
4541   return opt;
4542 }
4543
4544 #ifdef VMS
4545 #  include <starlet.h>
4546 #endif
4547
4548 U32
4549 Perl_seed(pTHX)
4550 {
4551     /*
4552      * This is really just a quick hack which grabs various garbage
4553      * values.  It really should be a real hash algorithm which
4554      * spreads the effect of every input bit onto every output bit,
4555      * if someone who knows about such things would bother to write it.
4556      * Might be a good idea to add that function to CORE as well.
4557      * No numbers below come from careful analysis or anything here,
4558      * except they are primes and SEED_C1 > 1E6 to get a full-width
4559      * value from (tv_sec * SEED_C1 + tv_usec).  The multipliers should
4560      * probably be bigger too.
4561      */
4562 #if RANDBITS > 16
4563 #  define SEED_C1       1000003
4564 #define   SEED_C4       73819
4565 #else
4566 #  define SEED_C1       25747
4567 #define   SEED_C4       20639
4568 #endif
4569 #define   SEED_C2       3
4570 #define   SEED_C3       269
4571 #define   SEED_C5       26107
4572
4573 #ifndef PERL_NO_DEV_RANDOM
4574     int fd;
4575 #endif
4576     U32 u;
4577 #ifdef HAS_GETTIMEOFDAY
4578     struct timeval when;
4579 #else
4580     Time_t when;
4581 #endif
4582
4583 /* This test is an escape hatch, this symbol isn't set by Configure. */
4584 #ifndef PERL_NO_DEV_RANDOM
4585 #ifndef PERL_RANDOM_DEVICE
4586    /* /dev/random isn't used by default because reads from it will block
4587     * if there isn't enough entropy available.  You can compile with
4588     * PERL_RANDOM_DEVICE to it if you'd prefer Perl to block until there
4589     * is enough real entropy to fill the seed. */
4590 #  ifdef __amigaos4__
4591 #    define PERL_RANDOM_DEVICE "RANDOM:SIZE=4"
4592 #  else
4593 #    define PERL_RANDOM_DEVICE "/dev/urandom"
4594 #  endif
4595 #endif
4596     fd = PerlLIO_open(PERL_RANDOM_DEVICE, 0);
4597     if (fd != -1) {
4598         if (PerlLIO_read(fd, (void*)&u, sizeof u) != sizeof u)
4599             u = 0;
4600         PerlLIO_close(fd);
4601         if (u)
4602             return u;
4603     }
4604 #endif
4605
4606 #ifdef HAS_GETTIMEOFDAY
4607     PerlProc_gettimeofday(&when,NULL);
4608     u = (U32)SEED_C1 * when.tv_sec + (U32)SEED_C2 * when.tv_usec;
4609 #else
4610     (void)time(&when);
4611     u = (U32)SEED_C1 * when;
4612 #endif
4613     u += SEED_C3 * (U32)PerlProc_getpid();
4614     u += SEED_C4 * (U32)PTR2UV(PL_stack_sp);
4615 #ifndef PLAN9           /* XXX Plan9 assembler chokes on this; fix needed  */
4616     u += SEED_C5 * (U32)PTR2UV(&when);
4617 #endif
4618     return u;
4619 }
4620
4621 void
4622 Perl_get_hash_seed(pTHX_ unsigned char * const seed_buffer)
4623 {
4624 #ifndef NO_PERL_HASH_ENV
4625     const char *env_pv;
4626 #endif
4627     unsigned long i;
4628
4629     PERL_ARGS_ASSERT_GET_HASH_SEED;
4630
4631 #ifndef NO_PERL_HASH_ENV
4632     env_pv= PerlEnv_getenv("PERL_HASH_SEED");
4633
4634     if ( env_pv )
4635 #  ifndef USE_HASH_SEED_EXPLICIT
4636     {
4637         /* ignore leading spaces */
4638         while (isSPACE(*env_pv))
4639             env_pv++;
4640 #    ifdef USE_PERL_PERTURB_KEYS
4641         /* if they set it to "0" we disable key traversal randomization completely */
4642         if (strEQ(env_pv,"0")) {
4643             PL_hash_rand_bits_enabled= 0;
4644         } else {
4645             /* otherwise switch to deterministic mode */
4646             PL_hash_rand_bits_enabled= 2;
4647         }
4648 #    endif
4649         /* ignore a leading 0x... if it is there */
4650         if (env_pv[0] == '0' && env_pv[1] == 'x')
4651             env_pv += 2;
4652
4653         for( i = 0; isXDIGIT(*env_pv) && i < PERL_HASH_SEED_BYTES; i++ ) {
4654             seed_buffer[i] = READ_XDIGIT(env_pv) << 4;
4655             if ( isXDIGIT(*env_pv)) {
4656                 seed_buffer[i] |= READ_XDIGIT(env_pv);
4657             }
4658         }
4659         while (isSPACE(*env_pv))
4660             env_pv++;
4661
4662         if (*env_pv && !isXDIGIT(*env_pv)) {
4663             Perl_warn(aTHX_ "perl: warning: Non hex character in '$ENV{PERL_HASH_SEED}', seed only partially set\n");
4664         }
4665         /* should we check for unparsed crap? */
4666         /* should we warn about unused hex? */
4667         /* should we warn about insufficient hex? */
4668     }
4669     else
4670 #  endif
4671 #endif
4672     {
4673         (void)seedDrand01((Rand_seed_t)seed());
4674
4675         for( i = 0; i < PERL_HASH_SEED_BYTES; i++ ) {
4676             seed_buffer[i] = (unsigned char)(Drand01() * (U8_MAX+1));
4677         }
4678     }
4679 #ifdef USE_PERL_PERTURB_KEYS
4680     {   /* initialize PL_hash_rand_bits from the hash seed.
4681          * This value is highly volatile, it is updated every
4682          * hash insert, and is used as part of hash bucket chain
4683          * randomization and hash iterator randomization. */
4684         PL_hash_rand_bits= 0xbe49d17f; /* I just picked a number */
4685         for( i = 0; i < sizeof(UV) ; i++ ) {
4686             PL_hash_rand_bits += seed_buffer[i % PERL_HASH_SEED_BYTES];
4687             PL_hash_rand_bits = ROTL_UV(PL_hash_rand_bits,8);
4688         }
4689     }
4690 #  ifndef NO_PERL_HASH_ENV
4691     env_pv= PerlEnv_getenv("PERL_PERTURB_KEYS");
4692     if (env_pv) {
4693         if (strEQ(env_pv,"0") || strEQ(env_pv,"NO")) {
4694             PL_hash_rand_bits_enabled= 0;
4695         } else if (strEQ(env_pv,"1") || strEQ(env_pv,"RANDOM")) {
4696             PL_hash_rand_bits_enabled= 1;
4697         } else if (strEQ(env_pv,"2") || strEQ(env_pv,"DETERMINISTIC")) {
4698             PL_hash_rand_bits_enabled= 2;
4699         } else {
4700             Perl_warn(aTHX_ "perl: warning: strange setting in '$ENV{PERL_PERTURB_KEYS}': '%s'\n", env_pv);
4701         }
4702     }
4703 #  endif
4704 #endif
4705 }
4706
4707 #ifdef PERL_GLOBAL_STRUCT
4708
4709 #define PERL_GLOBAL_STRUCT_INIT
4710 #include "opcode.h" /* the ppaddr and check */
4711
4712 struct perl_vars *
4713 Perl_init_global_struct(pTHX)
4714 {
4715     struct perl_vars *plvarsp = NULL;
4716 # ifdef PERL_GLOBAL_STRUCT
4717     const IV nppaddr = C_ARRAY_LENGTH(Gppaddr);
4718     const IV ncheck  = C_ARRAY_LENGTH(Gcheck);
4719     PERL_UNUSED_CONTEXT;
4720 #  ifdef PERL_GLOBAL_STRUCT_PRIVATE
4721     /* PerlMem_malloc() because can't use even safesysmalloc() this early. */
4722     plvarsp = (struct perl_vars*)PerlMem_malloc(sizeof(struct perl_vars));
4723     if (!plvarsp)
4724         exit(1);
4725 #  else
4726     plvarsp = PL_VarsPtr;
4727 #  endif /* PERL_GLOBAL_STRUCT_PRIVATE */
4728 #  undef PERLVAR
4729 #  undef PERLVARA
4730 #  undef PERLVARI
4731 #  undef PERLVARIC
4732 #  define PERLVAR(prefix,var,type) /**/
4733 #  define PERLVARA(prefix,var,n,type) /**/
4734 #  define PERLVARI(prefix,var,type,init) plvarsp->prefix##var = init;
4735 #  define PERLVARIC(prefix,var,type,init) plvarsp->prefix##var = init;
4736 #  include "perlvars.h"
4737 #  undef PERLVAR
4738 #  undef PERLVARA
4739 #  undef PERLVARI
4740 #  undef PERLVARIC
4741 #  ifdef PERL_GLOBAL_STRUCT
4742     plvarsp->Gppaddr =
4743         (Perl_ppaddr_t*)
4744         PerlMem_malloc(nppaddr * sizeof(Perl_ppaddr_t));
4745     if (!plvarsp->Gppaddr)
4746         exit(1);
4747     plvarsp->Gcheck  =
4748         (Perl_check_t*)
4749         PerlMem_malloc(ncheck  * sizeof(Perl_check_t));
4750     if (!plvarsp->Gcheck)
4751         exit(1);
4752     Copy(Gppaddr, plvarsp->Gppaddr, nppaddr, Perl_ppaddr_t); 
4753     Copy(Gcheck,  plvarsp->Gcheck,  ncheck,  Perl_check_t); 
4754 #  endif
4755 #  ifdef PERL_SET_VARS
4756     PERL_SET_VARS(plvarsp);
4757 #  endif
4758 #  ifdef PERL_GLOBAL_STRUCT_PRIVATE
4759     plvarsp->Gsv_placeholder.sv_flags = 0;
4760     memset(plvarsp->Ghash_seed, 0, sizeof(plvarsp->Ghash_seed));
4761 #  endif
4762 # undef PERL_GLOBAL_STRUCT_INIT
4763 # endif
4764     return plvarsp;
4765 }
4766
4767 #endif /* PERL_GLOBAL_STRUCT */
4768
4769 #ifdef PERL_GLOBAL_STRUCT
4770
4771 void
4772 Perl_free_global_struct(pTHX_ struct perl_vars *plvarsp)
4773 {
4774     int veto = plvarsp->Gveto_cleanup;
4775
4776     PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT;
4777     PERL_UNUSED_CONTEXT;
4778 # ifdef PERL_GLOBAL_STRUCT
4779 #  ifdef PERL_UNSET_VARS
4780     PERL_UNSET_VARS(plvarsp);
4781 #  endif
4782     if (veto)
4783         return;
4784     free(plvarsp->Gppaddr);
4785     free(plvarsp->Gcheck);
4786 #  ifdef PERL_GLOBAL_STRUCT_PRIVATE
4787     free(plvarsp);
4788 #  endif
4789 # endif
4790 }
4791
4792 #endif /* PERL_GLOBAL_STRUCT */
4793
4794 #ifdef PERL_MEM_LOG
4795
4796 /* -DPERL_MEM_LOG: the Perl_mem_log_..() is compiled, including
4797  * the default implementation, unless -DPERL_MEM_LOG_NOIMPL is also
4798  * given, and you supply your own implementation.
4799  *
4800  * The default implementation reads a single env var, PERL_MEM_LOG,
4801  * expecting one or more of the following:
4802  *
4803  *    \d+ - fd          fd to write to          : must be 1st (grok_atoUV)
4804  *    'm' - memlog      was PERL_MEM_LOG=1
4805  *    's' - svlog       was PERL_SV_LOG=1
4806  *    't' - timestamp   was PERL_MEM_LOG_TIMESTAMP=1
4807  *
4808  * This makes the logger controllable enough that it can reasonably be
4809  * added to the system perl.
4810  */
4811
4812 /* -DPERL_MEM_LOG_SPRINTF_BUF_SIZE=X: size of a (stack-allocated) buffer
4813  * the Perl_mem_log_...() will use (either via sprintf or snprintf).
4814  */
4815 #define PERL_MEM_LOG_SPRINTF_BUF_SIZE 128
4816
4817 /* -DPERL_MEM_LOG_FD=N: the file descriptor the Perl_mem_log_...()
4818  * writes to.  In the default logger, this is settable at runtime.
4819  */
4820 #ifndef PERL_MEM_LOG_FD
4821 #  define PERL_MEM_LOG_FD 2 /* If STDERR is too boring for you. */
4822 #endif
4823
4824 #ifndef PERL_MEM_LOG_NOIMPL
4825
4826 # ifdef DEBUG_LEAKING_SCALARS
4827 #   define SV_LOG_SERIAL_FMT        " [%lu]"
4828 #   define _SV_LOG_SERIAL_ARG(sv)   , (unsigned long) (sv)->sv_debug_serial
4829 # else
4830 #   define SV_LOG_SERIAL_FMT
4831 #   define _SV_LOG_SERIAL_ARG(sv)
4832 # endif
4833
4834 static void
4835 S_mem_log_common(enum mem_log_type mlt, const UV n, 
4836                  const UV typesize, const char *type_name, const SV *sv,
4837                  Malloc_t oldalloc, Malloc_t newalloc,
4838                  const char *filename, const int linenumber,
4839                  const char *funcname)
4840 {
4841     const char *pmlenv;
4842
4843     PERL_ARGS_ASSERT_MEM_LOG_COMMON;
4844
4845     pmlenv = PerlEnv_getenv("PERL_MEM_LOG");
4846     if (!pmlenv)
4847         return;
4848     if (mlt < MLT_NEW_SV ? strchr(pmlenv,'m') : strchr(pmlenv,'s'))
4849     {
4850         /* We can't use SVs or PerlIO for obvious reasons,
4851          * so we'll use stdio and low-level IO instead. */
4852         char buf[PERL_MEM_LOG_SPRINTF_BUF_SIZE];
4853
4854 #   ifdef HAS_GETTIMEOFDAY
4855 #     define MEM_LOG_TIME_FMT   "%10d.%06d: "
4856 #     define MEM_LOG_TIME_ARG   (int)tv.tv_sec, (int)tv.tv_usec
4857         struct timeval tv;
4858         gettimeofday(&tv, 0);
4859 #   else
4860 #     define MEM_LOG_TIME_FMT   "%10d: "
4861 #     define MEM_LOG_TIME_ARG   (int)when
4862         Time_t when;
4863         (void)time(&when);
4864 #   endif
4865         /* If there are other OS specific ways of hires time than
4866          * gettimeofday() (see dist/Time-HiRes), the easiest way is
4867          * probably that they would be used to fill in the struct
4868          * timeval. */
4869         {
4870             STRLEN len;
4871             const char* endptr;
4872             int fd;
4873             UV uv;
4874             if (grok_atoUV(pmlenv, &uv, &endptr) /* Ignore endptr. */
4875                 && uv && uv <= PERL_INT_MAX
4876             ) {
4877                 fd = (int)uv;
4878             } else {
4879                 fd = PERL_MEM_LOG_FD;
4880             }
4881
4882             if (strchr(pmlenv, 't')) {
4883                 len = my_snprintf(buf, sizeof(buf),
4884                                 MEM_LOG_TIME_FMT, MEM_LOG_TIME_ARG);
4885                 PERL_UNUSED_RESULT(PerlLIO_write(fd, buf, len));
4886             }
4887             switch (mlt) {
4888             case MLT_ALLOC:
4889                 len = my_snprintf(buf, sizeof(buf),
4890                         "alloc: %s:%d:%s: %" IVdf " %" UVuf
4891                         " %s = %" IVdf ": %" UVxf "\n",
4892                         filename, linenumber, funcname, n, typesize,
4893                         type_name, n * typesize, PTR2UV(newalloc));
4894                 break;
4895             case MLT_REALLOC:
4896                 len = my_snprintf(buf, sizeof(buf),
4897                         "realloc: %s:%d:%s: %" IVdf " %" UVuf
4898                         " %s = %" IVdf ": %" UVxf " -> %" UVxf "\n",
4899                         filename, linenumber, funcname, n, typesize,
4900                         type_name, n * typesize, PTR2UV(oldalloc),
4901                         PTR2UV(newalloc));
4902                 break;
4903             case MLT_FREE:
4904                 len = my_snprintf(buf, sizeof(buf),
4905                         "free: %s:%d:%s: %" UVxf "\n",
4906                         filename, linenumber, funcname,
4907                         PTR2UV(oldalloc));
4908                 break;
4909             case MLT_NEW_SV:
4910             case MLT_DEL_SV:
4911                 len = my_snprintf(buf, sizeof(buf),
4912                         "%s_SV: %s:%d:%s: %" UVxf SV_LOG_SERIAL_FMT "\n",
4913                         mlt == MLT_NEW_SV ? "new" : "del",
4914                         filename, linenumber, funcname,
4915                         PTR2UV(sv) _SV_LOG_SERIAL_ARG(sv));
4916                 break;
4917             default:
4918                 len = 0;
4919             }
4920             PERL_UNUSED_RESULT(PerlLIO_write(fd, buf, len));
4921         }
4922     }
4923 }
4924 #endif /* !PERL_MEM_LOG_NOIMPL */
4925
4926 #ifndef PERL_MEM_LOG_NOIMPL
4927 # define \
4928     mem_log_common_if(alty, num, tysz, tynm, sv, oal, nal, flnm, ln, fnnm) \
4929     mem_log_common   (alty, num, tysz, tynm, sv, oal, nal, flnm, ln, fnnm)
4930 #else
4931 /* this is suboptimal, but bug compatible.  User is providing their
4932    own implementation, but is getting these functions anyway, and they
4933    do nothing. But _NOIMPL users should be able to cope or fix */
4934 # define \
4935     mem_log_common_if(alty, num, tysz, tynm, u, oal, nal, flnm, ln, fnnm) \
4936     /* mem_log_common_if_PERL_MEM_LOG_NOIMPL */
4937 #endif
4938
4939 Malloc_t
4940 Perl_mem_log_alloc(const UV n, const UV typesize, const char *type_name,
4941                    Malloc_t newalloc, 
4942                    const char *filename, const int linenumber,
4943                    const char *funcname)
4944 {
4945     PERL_ARGS_ASSERT_MEM_LOG_ALLOC;
4946
4947     mem_log_common_if(MLT_ALLOC, n, typesize, type_name,
4948                       NULL, NULL, newalloc,
4949                       filename, linenumber, funcname);
4950     return newalloc;
4951 }
4952
4953 Malloc_t
4954 Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name,
4955                      Malloc_t oldalloc, Malloc_t newalloc, 
4956                      const char *filename, const int linenumber, 
4957                      const char *funcname)
4958 {
4959     PERL_ARGS_ASSERT_MEM_LOG_REALLOC;
4960
4961     mem_log_common_if(MLT_REALLOC, n, typesize, type_name,
4962                       NULL, oldalloc, newalloc, 
4963                       filename, linenumber, funcname);
4964     return newalloc;
4965 }
4966
4967 Malloc_t
4968 Perl_mem_log_free(Malloc_t oldalloc, 
4969                   const char *filename, const int linenumber, 
4970                   const char *funcname)
4971 {
4972     PERL_ARGS_ASSERT_MEM_LOG_FREE;
4973
4974     mem_log_common_if(MLT_FREE, 0, 0, "", NULL, oldalloc, NULL, 
4975                       filename, linenumber, funcname);
4976     return oldalloc;
4977 }
4978
4979 void
4980 Perl_mem_log_new_sv(const SV *sv, 
4981                     const char *filename, const int linenumber,
4982                     const char *funcname)
4983 {
4984     mem_log_common_if(MLT_NEW_SV, 0, 0, "", sv, NULL, NULL,
4985                       filename, linenumber, funcname);
4986 }
4987
4988 void
4989 Perl_mem_log_del_sv(const SV *sv,
4990                     const char *filename, const int linenumber, 
4991                     const char *funcname)
4992 {
4993     mem_log_common_if(MLT_DEL_SV, 0, 0, "", sv, NULL, NULL, 
4994                       filename, linenumber, funcname);
4995 }
4996
4997 #endif /* PERL_MEM_LOG */
4998
4999 /*
5000 =for apidoc my_sprintf
5001
5002 The C library C<sprintf>, wrapped if necessary, to ensure that it will return
5003 the length of the string written to the buffer.  Only rare pre-ANSI systems
5004 need the wrapper function - usually this is a direct call to C<sprintf>.
5005
5006 =cut
5007 */
5008 #ifndef SPRINTF_RETURNS_STRLEN
5009 int
5010 Perl_my_sprintf(char *buffer, const char* pat, ...)
5011 {
5012     va_list args;
5013     PERL_ARGS_ASSERT_MY_SPRINTF;
5014     va_start(args, pat);
5015     vsprintf(buffer, pat, args);
5016     va_end(args);
5017     return strlen(buffer);
5018 }
5019 #endif
5020
5021 /*
5022 =for apidoc quadmath_format_single
5023
5024 C<quadmath_snprintf()> is very strict about its C<format> string and will
5025 fail, returning -1, if the format is invalid.  It accepts exactly
5026 one format spec.
5027
5028 C<quadmath_format_single()> checks that the intended single spec looks
5029 sane: begins with C<%>, has only one C<%>, ends with C<[efgaEFGA]>,
5030 and has C<Q> before it.  This is not a full "printf syntax check",
5031 just the basics.
5032
5033 Returns the format if it is valid, NULL if not.
5034
5035 C<quadmath_format_single()> can and will actually patch in the missing
5036 C<Q>, if necessary.  In this case it will return the modified copy of
5037 the format, B<which the caller will need to free.>
5038
5039 See also L</quadmath_format_needed>.
5040
5041 =cut
5042 */
5043 #ifdef USE_QUADMATH
5044 const char*
5045 Perl_quadmath_format_single(const char* format)
5046 {
5047     STRLEN len;
5048
5049     PERL_ARGS_ASSERT_QUADMATH_FORMAT_SINGLE;
5050
5051     if (format[0] != '%' || strchr(format + 1, '%'))
5052         return NULL;
5053     len = strlen(format);
5054     /* minimum length three: %Qg */
5055     if (len < 3 || strchr("efgaEFGA", format[len - 1]) == NULL)
5056         return NULL;
5057     if (format[len - 2] != 'Q') {
5058         char* fixed;
5059         Newx(fixed, len + 1, char);
5060         memcpy(fixed, format, len - 1);
5061         fixed[len - 1] = 'Q';
5062         fixed[len    ] = format[len - 1];
5063         fixed[len + 1] = 0;
5064         return (const char*)fixed;
5065     }
5066     return format;
5067 }
5068 #endif
5069
5070 /*
5071 =for apidoc quadmath_format_needed
5072
5073 C<quadmath_format_needed()> returns true if the C<format> string seems to
5074 contain at least one non-Q-prefixed C<%[efgaEFGA]> format specifier,
5075 or returns false otherwise.
5076
5077 The format specifier detection is not complete printf-syntax detection,
5078 but it should catch most common cases.
5079
5080 If true is returned, those arguments B<should> in theory be processed
5081 with C<quadmath_snprintf()>, but in case there is more than one such
5082 format specifier (see L</quadmath_format_single>), and if there is
5083 anything else beyond that one (even just a single byte), they
5084 B<cannot> be processed because C<quadmath_snprintf()> is very strict,
5085 accepting only one format spec, and nothing else.
5086 In this case, the code should probably fail.
5087
5088 =cut
5089 */
5090 #ifdef USE_QUADMATH
5091 bool
5092 Perl_quadmath_format_needed(const char* format)
5093 {
5094   const char *p = format;
5095   const char *q;
5096
5097   PERL_ARGS_ASSERT_QUADMATH_FORMAT_NEEDED;
5098
5099   while ((q = strchr(p, '%'))) {
5100     q++;
5101     if (*q == '+') /* plus */
5102       q++;
5103     if (*q == '#') /* alt */
5104       q++;
5105     if (*q == '*') /* width */
5106       q++;
5107     else {
5108       if (isDIGIT(*q)) {
5109         while (isDIGIT(*q)) q++;
5110       }
5111     }
5112     if (*q == '.' && (q[1] == '*' || isDIGIT(q[1]))) { /* prec */
5113       q++;
5114       if (*q == '*')
5115         q++;
5116       else
5117         while (isDIGIT(*q)) q++;
5118     }
5119     if (strchr("efgaEFGA", *q)) /* Would have needed 'Q' in front. */
5120       return TRUE;
5121     p = q + 1;
5122   }
5123   return FALSE;
5124 }
5125 #endif
5126
5127 /*
5128 =for apidoc my_snprintf
5129
5130 The C library C<snprintf> functionality, if available and
5131 standards-compliant (uses C<vsnprintf>, actually).  However, if the
5132 C<vsnprintf> is not available, will unfortunately use the unsafe
5133 C<vsprintf> which can overrun the buffer (there is an overrun check,
5134 but that may be too late).  Consider using C<sv_vcatpvf> instead, or
5135 getting C<vsnprintf>.
5136
5137 =cut
5138 */
5139 int
5140 Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
5141 {
5142     int retval = -1;
5143     va_list ap;
5144     PERL_ARGS_ASSERT_MY_SNPRINTF;
5145 #ifndef HAS_VSNPRINTF
5146     PERL_UNUSED_VAR(len);
5147 #endif
5148     va_start(ap, format);
5149 #ifdef USE_QUADMATH
5150     {
5151         const char* qfmt = quadmath_format_single(format);
5152         bool quadmath_valid = FALSE;
5153         if (qfmt) {
5154             /* If the format looked promising, use it as quadmath. */
5155             retval = quadmath_snprintf(buffer, len, qfmt, va_arg(ap, NV));
5156             if (retval == -1) {
5157                 if (qfmt != format) {
5158                     dTHX;
5159                     SAVEFREEPV(qfmt);
5160                 }
5161                 Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
5162             }
5163             quadmath_valid = TRUE;
5164             if (qfmt != format)
5165                 Safefree(qfmt);
5166             qfmt = NULL;
5167         }
5168         assert(qfmt == NULL);
5169         /* quadmath_format_single() will return false for example for
5170          * "foo = %g", or simply "%g".  We could handle the %g by
5171          * using quadmath for the NV args.  More complex cases of
5172          * course exist: "foo = %g, bar = %g", or "foo=%Qg" (otherwise
5173          * quadmath-valid but has stuff in front).
5174          *
5175          * Handling the "Q-less" cases right would require walking
5176          * through the va_list and rewriting the format, calling
5177          * quadmath for the NVs, building a new va_list, and then
5178          * letting vsnprintf/vsprintf to take care of the other
5179          * arguments.  This may be doable.
5180          *
5181          * We do not attempt that now.  But for paranoia, we here try
5182          * to detect some common (but not all) cases where the
5183          * "Q-less" %[efgaEFGA] formats are present, and die if
5184          * detected.  This doesn't fix the problem, but it stops the
5185          * vsnprintf/vsprintf pulling doubles off the va_list when
5186          * __float128 NVs should be pulled off instead.
5187          *
5188          * If quadmath_format_needed() returns false, we are reasonably
5189          * certain that we can call vnsprintf() or vsprintf() safely. */
5190         if (!quadmath_valid && quadmath_format_needed(format))
5191           Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", format);
5192
5193     }
5194 #endif
5195     if (retval == -1)
5196 #ifdef HAS_VSNPRINTF
5197         retval = vsnprintf(buffer, len, format, ap);
5198 #else
5199         retval = vsprintf(buffer, format, ap);
5200 #endif
5201     va_end(ap);
5202     /* vsprintf() shows failure with < 0 */
5203     if (retval < 0
5204 #ifdef HAS_VSNPRINTF
5205     /* vsnprintf() shows failure with >= len */
5206         ||
5207         (len > 0 && (Size_t)retval >= len) 
5208 #endif
5209     )
5210         Perl_croak_nocontext("panic: my_snprintf buffer overflow");
5211     return retval;
5212 }
5213
5214 /*
5215 =for apidoc my_vsnprintf
5216
5217 The C library C<vsnprintf> if available and standards-compliant.
5218 However, if if the C<vsnprintf> is not available, will unfortunately
5219 use the unsafe C<vsprintf> which can overrun the buffer (there is an
5220 overrun check, but that may be too late).  Consider using
5221 C<sv_vcatpvf> instead, or getting C<vsnprintf>.
5222
5223 =cut
5224 */
5225 int
5226 Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap)
5227 {
5228 #ifdef USE_QUADMATH
5229     PERL_UNUSED_ARG(buffer);
5230     PERL_UNUSED_ARG(len);
5231     PERL_UNUSED_ARG(format);
5232     /* the cast is to avoid gcc -Wsizeof-array-argument complaining */
5233     PERL_UNUSED_ARG((void*)ap);
5234     Perl_croak_nocontext("panic: my_vsnprintf not available with quadmath");
5235     return 0;
5236 #else
5237     int retval;
5238 #ifdef NEED_VA_COPY
5239     va_list apc;
5240
5241     PERL_ARGS_ASSERT_MY_VSNPRINTF;
5242     Perl_va_copy(ap, apc);
5243 # ifdef HAS_VSNPRINTF
5244     retval = vsnprintf(buffer, len, format, apc);
5245 # else
5246     PERL_UNUSED_ARG(len);
5247     retval = vsprintf(buffer, format, apc);
5248 # endif
5249     va_end(apc);
5250 #else
5251 # ifdef HAS_VSNPRINTF
5252     retval = vsnprintf(buffer, len, format, ap);
5253 # else
5254     PERL_UNUSED_ARG(len);
5255     retval = vsprintf(buffer, format, ap);
5256 # endif
5257 #endif /* #ifdef NEED_VA_COPY */
5258     /* vsprintf() shows failure with < 0 */
5259     if (retval < 0
5260 #ifdef HAS_VSNPRINTF
5261     /* vsnprintf() shows failure with >= len */
5262         ||
5263         (len > 0 && (Size_t)retval >= len) 
5264 #endif
5265     )
5266         Perl_croak_nocontext("panic: my_vsnprintf buffer overflow");
5267     return retval;
5268 #endif
5269 }
5270
5271 void
5272 Perl_my_clearenv(pTHX)
5273 {
5274     dVAR;
5275 #if ! defined(PERL_MICRO)
5276 #  if defined(PERL_IMPLICIT_SYS) || defined(WIN32)
5277     PerlEnv_clearenv();
5278 #  else /* ! (PERL_IMPLICIT_SYS || WIN32) */
5279 #    if defined(USE_ENVIRON_ARRAY)
5280 #      if defined(USE_ITHREADS)
5281     /* only the parent thread can clobber the process environment */
5282     if (PL_curinterp == aTHX)
5283 #      endif /* USE_ITHREADS */
5284     {
5285 #      if ! defined(PERL_USE_SAFE_PUTENV)
5286     if ( !PL_use_safe_putenv) {
5287       I32 i;
5288       if (environ == PL_origenviron)
5289         environ = (char**)safesysmalloc(sizeof(char*));
5290       else
5291         for (i = 0; environ[i]; i++)
5292           (void)safesysfree(environ[i]);
5293     }
5294     environ[0] = NULL;
5295 #      else /* PERL_USE_SAFE_PUTENV */
5296 #        if defined(HAS_CLEARENV)
5297     (void)clearenv();
5298 #        elif defined(HAS_UNSETENV)
5299     int bsiz = 80; /* Most envvar names will be shorter than this. */
5300     char *buf = (char*)safesysmalloc(bsiz);
5301     while (*environ != NULL) {
5302       char *e = strchr(*environ, '=');
5303       int l = e ? e - *environ : (int)strlen(*environ);
5304       if (bsiz < l + 1) {
5305         (void)safesysfree(buf);
5306         bsiz = l + 1; /* + 1 for the \0. */
5307         buf = (char*)safesysmalloc(bsiz);
5308       } 
5309       memcpy(buf, *environ, l);
5310       buf[l] = '\0';
5311       (void)unsetenv(buf);
5312     }
5313     (void)safesysfree(buf);
5314 #        else /* ! HAS_CLEARENV && ! HAS_UNSETENV */
5315     /* Just null environ and accept the leakage. */
5316     *environ = NULL;
5317 #        endif /* HAS_CLEARENV || HAS_UNSETENV */
5318 #      endif /* ! PERL_USE_SAFE_PUTENV */
5319     }
5320 #    endif /* USE_ENVIRON_ARRAY */
5321 #  endif /* PERL_IMPLICIT_SYS || WIN32 */
5322 #endif /* PERL_MICRO */
5323 }
5324
5325 #ifdef PERL_IMPLICIT_CONTEXT
5326
5327 /* Implements the MY_CXT_INIT macro. The first time a module is loaded,
5328 the global PL_my_cxt_index is incremented, and that value is assigned to
5329 that module's static my_cxt_index (who's address is passed as an arg).
5330 Then, for each interpreter this function is called for, it makes sure a
5331 void* slot is available to hang the static data off, by allocating or
5332 extending the interpreter's PL_my_cxt_list array */
5333
5334 #ifndef PERL_GLOBAL_STRUCT_PRIVATE
5335 void *
5336 Perl_my_cxt_init(pTHX_ int *index, size_t size)
5337 {
5338     dVAR;
5339     void *p;
5340     PERL_ARGS_ASSERT_MY_CXT_INIT;
5341     if (*index == -1) {
5342         /* this module hasn't been allocated an index yet */
5343 #if defined(USE_ITHREADS)
5344         MUTEX_LOCK(&PL_my_ctx_mutex);
5345 #endif
5346         *index = PL_my_cxt_index++;
5347 #if defined(USE_ITHREADS)
5348         MUTEX_UNLOCK(&PL_my_ctx_mutex);
5349 #endif
5350     }
5351     
5352     /* make sure the array is big enough */
5353     if (PL_my_cxt_size <= *index) {
5354         if (PL_my_cxt_size) {
5355             while (PL_my_cxt_size <= *index)
5356                 PL_my_cxt_size *= 2;
5357             Renew(PL_my_cxt_list, PL_my_cxt_size, void *);
5358         }
5359         else {
5360             PL_my_cxt_size = 16;
5361             Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
5362         }
5363     }
5364     /* newSV() allocates one more than needed */
5365     p = (void*)SvPVX(newSV(size-1));
5366     PL_my_cxt_list[*index] = p;
5367     Zero(p, size, char);
5368     return p;
5369 }
5370
5371 #else /* #ifndef PERL_GLOBAL_STRUCT_PRIVATE */
5372
5373 int
5374 Perl_my_cxt_index(pTHX_ const char *my_cxt_key)
5375 {
5376     dVAR;
5377     int index;
5378
5379     PERL_ARGS_ASSERT_MY_CXT_INDEX;
5380
5381     for (index = 0; index < PL_my_cxt_index; index++) {
5382         const char *key = PL_my_cxt_keys[index];
5383         /* try direct pointer compare first - there are chances to success,
5384          * and it's much faster.
5385          */
5386         if ((key == my_cxt_key) || strEQ(key, my_cxt_key))
5387             return index;
5388     }
5389     return -1;
5390 }
5391
5392 void *
5393 Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size)
5394 {
5395     dVAR;
5396     void *p;
5397     int index;
5398
5399     PERL_ARGS_ASSERT_MY_CXT_INIT;
5400
5401     index = Perl_my_cxt_index(aTHX_ my_cxt_key);
5402     if (index == -1) {
5403         /* this module hasn't been allocated an index yet */
5404 #if defined(USE_ITHREADS)
5405         MUTEX_LOCK(&PL_my_ctx_mutex);
5406 #endif
5407         index = PL_my_cxt_index++;
5408 #if defined(USE_ITHREADS)
5409         MUTEX_UNLOCK(&PL_my_ctx_mutex);
5410 #endif
5411     }
5412
5413     /* make sure the array is big enough */
5414     if (PL_my_cxt_size <= index) {
5415         int old_size = PL_my_cxt_size;
5416         int i;
5417         if (PL_my_cxt_size) {
5418             while (PL_my_cxt_size <= index)
5419                 PL_my_cxt_size *= 2;
5420             Renew(PL_my_cxt_list, PL_my_cxt_size, void *);
5421             Renew(PL_my_cxt_keys, PL_my_cxt_size, const char *);
5422         }
5423         else {
5424             PL_my_cxt_size = 16;
5425             Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
5426             Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
5427         }
5428         for (i = old_size; i < PL_my_cxt_size; i++) {
5429             PL_my_cxt_keys[i] = 0;
5430             PL_my_cxt_list[i] = 0;
5431         }
5432     }
5433     PL_my_cxt_keys[index] = my_cxt_key;
5434     /* newSV() allocates one more than needed */
5435     p = (void*)SvPVX(newSV(size-1));
5436     PL_my_cxt_list[index] = p;
5437     Zero(p, size, char);
5438     return p;
5439 }
5440 #endif /* #ifndef PERL_GLOBAL_STRUCT_PRIVATE */
5441 #endif /* PERL_IMPLICIT_CONTEXT */
5442
5443
5444 /* Perl_xs_handshake():
5445    implement the various XS_*_BOOTCHECK macros, which are added to .c
5446    files by ExtUtils::ParseXS, to check that the perl the module was built
5447    with is binary compatible with the running perl.
5448
5449    usage:
5450        Perl_xs_handshake(U32 key, void * v_my_perl, const char * file,
5451             [U32 items, U32 ax], [char * api_version], [char * xs_version])
5452
5453    The meaning of the varargs is determined the U32 key arg (which is not
5454    a format string). The fields of key are assembled by using HS_KEY().
5455
5456    Under PERL_IMPLICIT_CONTEX, the v_my_perl arg is of type
5457    "PerlInterpreter *" and represents the callers context; otherwise it is
5458    of type "CV *", and is the boot xsub's CV.
5459
5460    v_my_perl will catch where a threaded future perl526.dll calling IO.dll
5461    for example, and IO.dll was linked with threaded perl524.dll, and both
5462    perl526.dll and perl524.dll are in %PATH and the Win32 DLL loader
5463    successfully can load IO.dll into the process but simultaneously it
5464    loaded an interpreter of a different version into the process, and XS
5465    code will naturally pass SV*s created by perl524.dll for perl526.dll to
5466    use through perl526.dll's my_perl->Istack_base.
5467
5468    v_my_perl cannot be the first arg, since then 'key' will be out of
5469    place in a threaded vs non-threaded mixup; and analyzing the key
5470    number's bitfields won't reveal the problem, since it will be a valid
5471    key (unthreaded perl) on interp side, but croak will report the XS mod's
5472    key as gibberish (it is really a my_perl ptr) (threaded XS mod); or if
5473    it's a threaded perl and an unthreaded XS module, threaded perl will
5474    look at an uninit C stack or an uninit register to get 'key'
5475    (remember that it assumes that the 1st arg is the interp cxt).
5476
5477    'file' is the source filename of the caller.
5478 */
5479
5480 I32
5481 Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...)
5482 {
5483     va_list args;
5484     U32 items, ax;
5485     void * got;
5486     void * need;
5487 #ifdef PERL_IMPLICIT_CONTEXT
5488     dTHX;
5489     tTHX xs_interp;
5490 #else
5491     CV* cv;
5492     SV *** xs_spp;
5493 #endif
5494     PERL_ARGS_ASSERT_XS_HANDSHAKE;
5495     va_start(args, file);
5496
5497     got = INT2PTR(void*, (UV)(key & HSm_KEY_MATCH));
5498     need = (void *)(HS_KEY(FALSE, FALSE, "", "") & HSm_KEY_MATCH);
5499     if (UNLIKELY(got != need))
5500         goto bad_handshake;
5501 /* try to catch where a 2nd threaded perl interp DLL is loaded into a process
5502    by a XS DLL compiled against the wrong interl DLL b/c of bad @INC, and the
5503    2nd threaded perl interp DLL never initialized its TLS/PERL_SYS_INIT3 so
5504    dTHX call from 2nd interp DLL can't return the my_perl that pp_entersub
5505    passed to the XS DLL */
5506 #ifdef PERL_IMPLICIT_CONTEXT
5507     xs_interp = (tTHX)v_my_perl;
5508     got = xs_interp;
5509     need = my_perl;
5510 #else
5511 /* try to catch where an unthreaded perl interp DLL (for ex. perl522.dll) is
5512    loaded into a process by a XS DLL built by an unthreaded perl522.dll perl,
5513    but the DynaLoder/Perl that started the process and loaded the XS DLL is
5514    unthreaded perl524.dll, since unthreadeds don't pass my_perl (a unique *)
5515    through pp_entersub, use a unique value (which is a pointer to PL_stack_sp's
5516    location in the unthreaded perl binary) stored in CV * to figure out if this
5517    Perl_xs_handshake was called by the same pp_entersub */
5518     cv = (CV*)v_my_perl;
5519     xs_spp = (SV***)CvHSCXT(cv);
5520     got = xs_spp;
5521     need = &PL_stack_sp;
5522 #endif
5523     if(UNLIKELY(got != need)) {
5524         bad_handshake:/* recycle branch and string from above */
5525         if(got != (void *)HSf_NOCHK)
5526             noperl_die("%s: loadable library and perl binaries are mismatched"
5527                        " (got handshake key %p, needed %p)\n",
5528                 file, got, need);
5529     }
5530
5531     if(key & HSf_SETXSUBFN) {     /* this might be called from a module bootstrap */
5532         SAVEPPTR(PL_xsubfilename);/* which was require'd from a XSUB BEGIN */
5533         PL_xsubfilename = file;   /* so the old name must be restored for
5534                                      additional XSUBs to register themselves */
5535         /* XSUBs can't be perl lang/perl5db.pl debugged
5536         if (PERLDB_LINE_OR_SAVESRC)
5537             (void)gv_fetchfile(file); */
5538     }
5539
5540     if(key & HSf_POPMARK) {
5541         ax = POPMARK;
5542         {   SV **mark = PL_stack_base + ax++;
5543             {   dSP;
5544                 items = (I32)(SP - MARK);
5545             }
5546         }
5547     } else {
5548         items = va_arg(args, U32);
5549         ax = va_arg(args, U32);
5550     }
5551     {
5552         U32 apiverlen;
5553         assert(HS_GETAPIVERLEN(key) <= UCHAR_MAX);
5554         if((apiverlen = HS_GETAPIVERLEN(key))) {
5555             char * api_p = va_arg(args, char*);
5556             if(apiverlen != sizeof("v" PERL_API_VERSION_STRING)-1
5557                 || memNE(api_p, "v" PERL_API_VERSION_STRING,
5558                          sizeof("v" PERL_API_VERSION_STRING)-1))
5559                 Perl_croak_nocontext("Perl API version %s of %" SVf " does not match %s",
5560                                     api_p, SVfARG(PL_stack_base[ax + 0]),
5561                                     "v" PERL_API_VERSION_STRING);
5562         }
5563     }
5564     {
5565         U32 xsverlen;
5566         assert(HS_GETXSVERLEN(key) <= UCHAR_MAX && HS_GETXSVERLEN(key) <= HS_APIVERLEN_MAX);
5567         if((xsverlen = HS_GETXSVERLEN(key)))
5568             S_xs_version_bootcheck(aTHX_
5569                 items, ax, va_arg(args, char*), xsverlen);
5570     }
5571     va_end(args);
5572     return ax;
5573 }
5574
5575
5576 STATIC void
5577 S_xs_version_bootcheck(pTHX_ U32 items, U32 ax, const char *xs_p,
5578                           STRLEN xs_len)
5579 {
5580     SV *sv;
5581     const char *vn = NULL;
5582     SV *const module = PL_stack_base[ax];
5583
5584     PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK;
5585
5586     if (items >= 2)      /* version supplied as bootstrap arg */
5587         sv = PL_stack_base[ax + 1];
5588     else {
5589         /* XXX GV_ADDWARN */
5590         vn = "XS_VERSION";
5591         sv = get_sv(Perl_form(aTHX_ "%" SVf "::%s", SVfARG(module), vn), 0);
5592         if (!sv || !SvOK(sv)) {
5593             vn = "VERSION";
5594             sv = get_sv(Perl_form(aTHX_ "%" SVf "::%s", SVfARG(module), vn), 0);
5595         }
5596     }
5597     if (sv) {
5598         SV *xssv = Perl_newSVpvn_flags(aTHX_ xs_p, xs_len, SVs_TEMP);
5599         SV *pmsv = sv_isobject(sv) && sv_derived_from(sv, "version")
5600             ? sv : sv_2mortal(new_version(sv));
5601         xssv = upg_version(xssv, 0);
5602         if ( vcmp(pmsv,xssv) ) {
5603             SV *string = vstringify(xssv);
5604             SV *xpt = Perl_newSVpvf(aTHX_ "%" SVf " object version %" SVf
5605                                     " does not match ", SVfARG(module), SVfARG(string));
5606
5607             SvREFCNT_dec(string);
5608             string = vstringify(pmsv);
5609
5610             if (vn) {
5611                 Perl_sv_catpvf(aTHX_ xpt, "$%" SVf "::%s %" SVf, SVfARG(module), vn,
5612                                SVfARG(string));
5613             } else {
5614                 Perl_sv_catpvf(aTHX_ xpt, "bootstrap parameter %" SVf, SVfARG(string));
5615             }
5616             SvREFCNT_dec(string);
5617
5618             Perl_sv_2mortal(aTHX_ xpt);
5619             Perl_croak_sv(aTHX_ xpt);
5620         }
5621     }
5622 }
5623
5624 /*
5625 =for apidoc my_strlcat
5626
5627 The C library C<strlcat> if available, or a Perl implementation of it.
5628 This operates on C C<NUL>-terminated strings.
5629
5630 C<my_strlcat()> appends string C<src> to the end of C<dst>.  It will append at
5631 most S<C<size - strlen(dst) - 1>> characters.  It will then C<NUL>-terminate,
5632 unless C<size> is 0 or the original C<dst> string was longer than C<size> (in
5633 practice this should not happen as it means that either C<size> is incorrect or
5634 that C<dst> is not a proper C<NUL>-terminated string).
5635
5636 Note that C<size> is the full size of the destination buffer and
5637 the result is guaranteed to be C<NUL>-terminated if there is room.  Note that
5638 room for the C<NUL> should be included in C<size>.
5639
5640 The return value is the total length that C<dst> would have if C<size> is
5641 sufficiently large.  Thus it is the initial length of C<dst> plus the length of
5642 C<src>.  If C<size> is smaller than the return, the excess was not appended.
5643
5644 =cut
5645
5646 Description stolen from http://man.openbsd.org/strlcat.3
5647 */
5648 #ifndef HAS_STRLCAT
5649 Size_t
5650 Perl_my_strlcat(char *dst, const char *src, Size_t size)
5651 {
5652     Size_t used, length, copy;
5653
5654     used = strlen(dst);
5655     length = strlen(src);
5656     if (size > 0 && used < size - 1) {
5657         copy = (length >= size - used) ? size - used - 1 : length;
5658         memcpy(dst + used, src, copy);
5659         dst[used + copy] = '\0';
5660     }
5661     return used + length;
5662 }
5663 #endif
5664
5665
5666 /*
5667 =for apidoc my_strlcpy
5668
5669 The C library C<strlcpy> if available, or a Perl implementation of it.
5670 This operates on C C<NUL>-terminated strings.
5671
5672 C<my_strlcpy()> copies up to S<C<size - 1>> characters from the string C<src>
5673 to C<dst>, C<NUL>-terminating the result if C<size> is not 0.
5674
5675 The return value is the total length C<src> would be if the copy completely
5676 succeeded.  If it is larger than C<size>, the excess was not copied.
5677
5678 =cut
5679
5680 Description stolen from http://man.openbsd.org/strlcpy.3
5681 */
5682 #ifndef HAS_STRLCPY
5683 Size_t
5684 Perl_my_strlcpy(char *dst, const char *src, Size_t size)
5685 {
5686     Size_t length, copy;
5687
5688     length = strlen(src);
5689     if (size > 0) {
5690         copy = (length >= size) ? size - 1 : length;
5691         memcpy(dst, src, copy);
5692         dst[copy] = '\0';
5693     }
5694     return length;
5695 }
5696 #endif
5697
5698 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && (_MSC_VER < 1400) && (WINVER < 0x0500)
5699 /* VC7 or 7.1, building with pre-VC7 runtime libraries. */
5700 long _ftol( double ); /* Defined by VC6 C libs. */
5701 long _ftol2( double dblSource ) { return _ftol( dblSource ); }
5702 #endif
5703
5704 PERL_STATIC_INLINE bool
5705 S_gv_has_usable_name(pTHX_ GV *gv)
5706 {
5707     GV **gvp;
5708     return GvSTASH(gv)
5709         && HvENAME(GvSTASH(gv))
5710         && (gvp = (GV **)hv_fetchhek(
5711                         GvSTASH(gv), GvNAME_HEK(gv), 0
5712            ))
5713         && *gvp == gv;
5714 }
5715
5716 void
5717 Perl_get_db_sub(pTHX_ SV **svp, CV *cv)
5718 {
5719     SV * const dbsv = GvSVn(PL_DBsub);
5720     const bool save_taint = TAINT_get;
5721
5722     /* When we are called from pp_goto (svp is null),
5723      * we do not care about using dbsv to call CV;
5724      * it's for informational purposes only.
5725      */
5726
5727     PERL_ARGS_ASSERT_GET_DB_SUB;
5728
5729     TAINT_set(FALSE);
5730     save_item(dbsv);
5731     if (!PERLDB_SUB_NN) {
5732         GV *gv = CvGV(cv);
5733
5734         if (!svp && !CvLEXICAL(cv)) {
5735             gv_efullname3(dbsv, gv, NULL);
5736         }
5737         else if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED)) || CvLEXICAL(cv)
5738              || strEQ(GvNAME(gv), "END")
5739              || ( /* Could be imported, and old sub redefined. */
5740                  (GvCV(gv) != cv || !S_gv_has_usable_name(aTHX_ gv))
5741                  &&
5742                  !( (SvTYPE(*svp) == SVt_PVGV)
5743                     && (GvCV((const GV *)*svp) == cv)
5744                     /* Use GV from the stack as a fallback. */
5745                     && S_gv_has_usable_name(aTHX_ gv = (GV *)*svp) 
5746                   )
5747                 )
5748         ) {
5749             /* GV is potentially non-unique, or contain different CV. */
5750             SV * const tmp = newRV(MUTABLE_SV(cv));
5751             sv_setsv(dbsv, tmp);
5752             SvREFCNT_dec(tmp);
5753         }
5754         else {
5755             sv_sethek(dbsv, HvENAME_HEK(GvSTASH(gv)));
5756             sv_catpvs(dbsv, "::");
5757             sv_cathek(dbsv, GvNAME_HEK(gv));
5758         }
5759     }
5760     else {
5761         const int type = SvTYPE(dbsv);
5762         if (type < SVt_PVIV && type != SVt_IV)
5763             sv_upgrade(dbsv, SVt_PVIV);
5764         (void)SvIOK_on(dbsv);
5765         SvIV_set(dbsv, PTR2IV(cv));     /* Do it the quickest way  */
5766     }
5767     SvSETMAGIC(dbsv);
5768     TAINT_IF(save_taint);
5769 #ifdef NO_TAINT_SUPPORT
5770     PERL_UNUSED_VAR(save_taint);
5771 #endif
5772 }
5773
5774 int
5775 Perl_my_dirfd(DIR * dir) {
5776
5777     /* Most dirfd implementations have problems when passed NULL. */
5778     if(!dir)
5779         return -1;
5780 #ifdef HAS_DIRFD
5781     return dirfd(dir);
5782 #elif defined(HAS_DIR_DD_FD)
5783     return dir->dd_fd;
5784 #else
5785     Perl_croak_nocontext(PL_no_func, "dirfd");
5786     NOT_REACHED; /* NOTREACHED */
5787     return 0;
5788 #endif 
5789 }
5790
5791 REGEXP *
5792 Perl_get_re_arg(pTHX_ SV *sv) {
5793
5794     if (sv) {
5795         if (SvMAGICAL(sv))
5796             mg_get(sv);
5797         if (SvROK(sv))
5798             sv = MUTABLE_SV(SvRV(sv));
5799         if (SvTYPE(sv) == SVt_REGEXP)
5800             return (REGEXP*) sv;
5801     }
5802  
5803     return NULL;
5804 }
5805
5806 /*
5807  * This code is derived from drand48() implementation from FreeBSD,
5808  * found in lib/libc/gen/_rand48.c.
5809  *
5810  * The U64 implementation is original, based on the POSIX
5811  * specification for drand48().
5812  */
5813
5814 /*
5815 * Copyright (c) 1993 Martin Birgmeier
5816 * All rights reserved.
5817 *
5818 * You may redistribute unmodified or modified versions of this source
5819 * code provided that the above copyright notice and this and the
5820 * following conditions are retained.
5821 *
5822 * This software is provided ``as is'', and comes with no warranties
5823 * of any kind. I shall in no event be liable for anything that happens
5824 * to anyone/anything when using this software.
5825 */
5826
5827 #define FREEBSD_DRAND48_SEED_0   (0x330e)
5828
5829 #ifdef PERL_DRAND48_QUAD
5830
5831 #define DRAND48_MULT U64_CONST(0x5deece66d)
5832 #define DRAND48_ADD  0xb
5833 #define DRAND48_MASK U64_CONST(0xffffffffffff)
5834
5835 #else
5836
5837 #define FREEBSD_DRAND48_SEED_1   (0xabcd)
5838 #define FREEBSD_DRAND48_SEED_2   (0x1234)
5839 #define FREEBSD_DRAND48_MULT_0   (0xe66d)
5840 #define FREEBSD_DRAND48_MULT_1   (0xdeec)
5841 #define FREEBSD_DRAND48_MULT_2   (0x0005)
5842 #define FREEBSD_DRAND48_ADD      (0x000b)
5843
5844 const unsigned short _rand48_mult[3] = {
5845                 FREEBSD_DRAND48_MULT_0,
5846                 FREEBSD_DRAND48_MULT_1,
5847                 FREEBSD_DRAND48_MULT_2
5848 };
5849 const unsigned short _rand48_add = FREEBSD_DRAND48_ADD;
5850
5851 #endif
5852
5853 void
5854 Perl_drand48_init_r(perl_drand48_t *random_state, U32 seed)
5855 {
5856     PERL_ARGS_ASSERT_DRAND48_INIT_R;
5857
5858 #ifdef PERL_DRAND48_QUAD
5859     *random_state = FREEBSD_DRAND48_SEED_0 + ((U64)seed << 16);
5860 #else
5861     random_state->seed[0] = FREEBSD_DRAND48_SEED_0;
5862     random_state->seed[1] = (U16) seed;
5863     random_state->seed[2] = (U16) (seed >> 16);
5864 #endif
5865 }
5866
5867 double
5868 Perl_drand48_r(perl_drand48_t *random_state)
5869 {
5870     PERL_ARGS_ASSERT_DRAND48_R;
5871
5872 #ifdef PERL_DRAND48_QUAD
5873     *random_state = (*random_state * DRAND48_MULT + DRAND48_ADD)
5874         & DRAND48_MASK;
5875
5876     return ldexp((double)*random_state, -48);
5877 #else
5878     {
5879     U32 accu;
5880     U16 temp[2];
5881
5882     accu = (U32) _rand48_mult[0] * (U32) random_state->seed[0]
5883          + (U32) _rand48_add;
5884     temp[0] = (U16) accu;        /* lower 16 bits */
5885     accu >>= sizeof(U16) * 8;
5886     accu += (U32) _rand48_mult[0] * (U32) random_state->seed[1]
5887           + (U32) _rand48_mult[1] * (U32) random_state->seed[0];
5888     temp[1] = (U16) accu;        /* middle 16 bits */
5889     accu >>= sizeof(U16) * 8;
5890     accu += _rand48_mult[0] * random_state->seed[2]
5891           + _rand48_mult[1] * random_state->seed[1]
5892           + _rand48_mult[2] * random_state->seed[0];
5893     random_state->seed[0] = temp[0];
5894     random_state->seed[1] = temp[1];
5895     random_state->seed[2] = (U16) accu;
5896
5897     return ldexp((double) random_state->seed[0], -48) +
5898            ldexp((double) random_state->seed[1], -32) +
5899            ldexp((double) random_state->seed[2], -16);
5900     }
5901 #endif
5902 }
5903
5904 #ifdef USE_C_BACKTRACE
5905
5906 /* Possibly move all this USE_C_BACKTRACE code into a new file. */
5907
5908 #ifdef USE_BFD
5909
5910 typedef struct {
5911     /* abfd is the BFD handle. */
5912     bfd* abfd;
5913     /* bfd_syms is the BFD symbol table. */
5914     asymbol** bfd_syms;
5915     /* bfd_text is handle to the the ".text" section of the object file. */
5916     asection* bfd_text;
5917     /* Since opening the executable and scanning its symbols is quite
5918      * heavy operation, we remember the filename we used the last time,
5919      * and do the opening and scanning only if the filename changes.
5920      * This removes most (but not all) open+scan cycles. */
5921     const char* fname_prev;
5922 } bfd_context;
5923
5924 /* Given a dl_info, update the BFD context if necessary. */
5925 static void bfd_update(bfd_context* ctx, Dl_info* dl_info)
5926 {
5927     /* BFD open and scan only if the filename changed. */
5928     if (ctx->fname_prev == NULL ||
5929         strNE(dl_info->dli_fname, ctx->fname_prev)) {
5930         if (ctx->abfd) {
5931             bfd_close(ctx->abfd);
5932         }
5933         ctx->abfd = bfd_openr(dl_info->dli_fname, 0);
5934         if (ctx->abfd) {
5935             if (bfd_check_format(ctx->abfd, bfd_object)) {
5936                 IV symbol_size = bfd_get_symtab_upper_bound(ctx->abfd);
5937                 if (symbol_size > 0) {
5938                     Safefree(ctx->bfd_syms);
5939                     Newx(ctx->bfd_syms, symbol_size, asymbol*);
5940                     ctx->bfd_text =
5941                         bfd_get_section_by_name(ctx->abfd, ".text");
5942                 }
5943                 else
5944                     ctx->abfd = NULL;
5945             }
5946             else
5947                 ctx->abfd = NULL;
5948         }
5949         ctx->fname_prev = dl_info->dli_fname;
5950     }
5951 }
5952
5953 /* Given a raw frame, try to symbolize it and store
5954  * symbol information (source file, line number) away. */
5955 static void bfd_symbolize(bfd_context* ctx,
5956                           void* raw_frame,
5957                           char** symbol_name,
5958                           STRLEN* symbol_name_size,
5959                           char** source_name,
5960                           STRLEN* source_name_size,
5961                           STRLEN* source_line)
5962 {
5963     *symbol_name = NULL;
5964     *symbol_name_size = 0;
5965     if (ctx->abfd) {
5966         IV offset = PTR2IV(raw_frame) - PTR2IV(ctx->bfd_text->vma);
5967         if (offset > 0 &&
5968             bfd_canonicalize_symtab(ctx->abfd, ctx->bfd_syms) > 0) {
5969             const char *file;
5970             const char *func;
5971             unsigned int line = 0;
5972             if (bfd_find_nearest_line(ctx->abfd, ctx->bfd_text,
5973                                       ctx->bfd_syms, offset,
5974                                       &file, &func, &line) &&
5975                 file && func && line > 0) {
5976                 /* Size and copy the source file, use only
5977                  * the basename of the source file.
5978                  *
5979                  * NOTE: the basenames are fine for the
5980                  * Perl source files, but may not always
5981                  * be the best idea for XS files. */
5982                 const char *p, *b = NULL;
5983                 /* Look for the last slash. */
5984                 for (p = file; *p; p++) {
5985                     if (*p == '/')
5986                         b = p + 1;
5987                 }
5988                 if (b == NULL || *b == 0) {
5989                     b = file;
5990                 }
5991                 *source_name_size = p - b + 1;
5992                 Newx(*source_name, *source_name_size + 1, char);
5993                 Copy(b, *source_name, *source_name_size + 1, char);
5994
5995                 *symbol_name_size = strlen(func);
5996                 Newx(*symbol_name, *symbol_name_size + 1, char);
5997                 Copy(func, *symbol_name, *symbol_name_size + 1, char);
5998
5999                 *source_line = line;
6000             }
6001         }
6002     }
6003 }
6004
6005 #endif /* #ifdef USE_BFD */
6006
6007 #ifdef PERL_DARWIN
6008
6009 /* OS X has no public API for for 'symbolicating' (Apple official term)
6010  * stack addresses to {function_name, source_file, line_number}.
6011  * Good news: there is command line utility atos(1) which does that.
6012  * Bad news 1: it's a command line utility.
6013  * Bad news 2: one needs to have the Developer Tools installed.
6014  * Bad news 3: in newer releases it needs to be run as 'xcrun atos'.
6015  *
6016  * To recap: we need to open a pipe for reading for a utility which
6017  * might not exist, or exists in different locations, and then parse
6018  * the output.  And since this is all for a low-level API, we cannot
6019  * use high-level stuff.  Thanks, Apple. */
6020
6021 typedef struct {
6022     /* tool is set to the absolute pathname of the tool to use:
6023      * xcrun or atos. */
6024     const char* tool;
6025     /* format is set to a printf format string used for building
6026      * the external command to run. */
6027     const char* format;
6028     /* unavail is set if e.g. xcrun cannot be found, or something
6029      * else happens that makes getting the backtrace dubious.  Note,
6030      * however, that the context isn't persistent, the next call to
6031      * get_c_backtrace() will start from scratch. */
6032     bool unavail;
6033     /* fname is the current object file name. */
6034     const char* fname;
6035     /* object_base_addr is the base address of the shared object. */
6036     void* object_base_addr;
6037 } atos_context;
6038
6039 /* Given |dl_info|, updates the context.  If the context has been
6040  * marked unavailable, return immediately.  If not but the tool has
6041  * not been set, set it to either "xcrun atos" or "atos" (also set the
6042  * format to use for creating commands for piping), or if neither is
6043  * unavailable (one needs the Developer Tools installed), mark the context
6044  * an unavailable.  Finally, update the filename (object name),
6045  * and its base address. */
6046
6047 static void atos_update(atos_context* ctx,
6048                         Dl_info* dl_info)
6049 {
6050     if (ctx->unavail)
6051         return;
6052     if (ctx->tool == NULL) {
6053         const char* tools[] = {
6054             "/usr/bin/xcrun",
6055             "/usr/bin/atos"
6056         };
6057         const char* formats[] = {
6058             "/usr/bin/xcrun atos -o '%s' -l %08x %08x 2>&1",
6059             "/usr/bin/atos -d -o '%s' -l %08x %08x 2>&1"
6060         };
6061         struct stat st;
6062         UV i;
6063         for (i = 0; i < C_ARRAY_LENGTH(tools); i++) {
6064             if (stat(tools[i], &st) == 0 && S_ISREG(st.st_mode)) {
6065                 ctx->tool = tools[i];
6066                 ctx->format = formats[i];
6067                 break;
6068             }
6069         }
6070         if (ctx->tool == NULL) {
6071             ctx->unavail = TRUE;
6072             return;
6073         }
6074     }
6075     if (ctx->fname == NULL ||
6076         strNE(dl_info->dli_fname, ctx->fname)) {
6077         ctx->fname = dl_info->dli_fname;
6078         ctx->object_base_addr = dl_info->dli_fbase;
6079     }
6080 }
6081
6082 /* Given an output buffer end |p| and its |start|, matches
6083  * for the atos output, extracting the source code location
6084  * and returning non-NULL if possible, returning NULL otherwise. */
6085 static const char* atos_parse(const char* p,
6086                               const char* start,
6087                               STRLEN* source_name_size,
6088                               STRLEN* source_line) {
6089     /* atos() output is something like:
6090      * perl_parse (in miniperl) (perl.c:2314)\n\n".
6091      * We cannot use Perl regular expressions, because we need to
6092      * stay low-level.  Therefore here we have a rolled-out version
6093      * of a state machine which matches _backwards_from_the_end_ and
6094      * if there's a success, returns the starts of the filename,
6095      * also setting the filename size and the source line number.
6096      * The matched regular expression is roughly "\(.*:\d+\)\s*$" */
6097     const char* source_number_start;
6098     const char* source_name_end;
6099     const char* source_line_end;
6100     const char* close_paren;
6101     UV uv;
6102
6103     /* Skip trailing whitespace. */
6104     while (p > start && isspace(*p)) p--;
6105     /* Now we should be at the close paren. */
6106     if (p == start || *p != ')')
6107         return NULL;
6108     close_paren = p;
6109     p--;
6110     /* Now we should be in the line number. */
6111     if (p == start || !isdigit(*p))
6112         return NULL;
6113     /* Skip over the digits. */
6114     while (p > start && isdigit(*p))
6115         p--;
6116     /* Now we should be at the colon. */
6117     if (p == start || *p != ':')
6118         return NULL;
6119     source_number_start = p + 1;
6120     source_name_end = p; /* Just beyond the end. */
6121     p--;
6122     /* Look for the open paren. */
6123     while (p > start && *p != '(')
6124         p--;
6125     if (p == start)
6126         return NULL;
6127     p++;
6128     *source_name_size = source_name_end - p;
6129     if (grok_atoUV(source_number_start, &uv,  &source_line_end)
6130         && source_line_end == close_paren
6131         && uv <= PERL_INT_MAX
6132     ) {
6133         *source_line = (STRLEN)uv;
6134         return p;
6135     }
6136     return NULL;
6137 }
6138
6139 /* Given a raw frame, read a pipe from the symbolicator (that's the
6140  * technical term) atos, reads the result, and parses the source code
6141  * location.  We must stay low-level, so we use snprintf(), pipe(),
6142  * and fread(), and then also parse the output ourselves. */
6143 static void atos_symbolize(atos_context* ctx,
6144                            void* raw_frame,
6145                            char** source_name,
6146                            STRLEN* source_name_size,
6147                            STRLEN* source_line)
6148 {
6149     char cmd[1024];
6150     const char* p;
6151     Size_t cnt;
6152
6153     if (ctx->unavail)
6154         return;
6155     /* Simple security measure: if there's any funny business with
6156      * the object name (used as "-o '%s'" ), leave since at least
6157      * partially the user controls it. */
6158     for (p = ctx->fname; *p; p++) {
6159         if (*p == '\'' || iscntrl(*p)) {
6160             ctx->unavail = TRUE;
6161             return;
6162         }
6163     }
6164     cnt = snprintf(cmd, sizeof(cmd), ctx->format,
6165                    ctx->fname, ctx->object_base_addr, raw_frame);
6166     if (cnt < sizeof(cmd)) {
6167         /* Undo nostdio.h #defines that disable stdio.
6168          * This is somewhat naughty, but is used elsewhere
6169          * in the core, and affects only OS X. */
6170 #undef FILE
6171 #undef popen
6172 #undef fread
6173 #undef pclose
6174         FILE* fp = popen(cmd, "r");
6175         /* At the moment we open a new pipe for each stack frame.
6176          * This is naturally somewhat slow, but hopefully generating
6177          * stack traces is never going to in a performance critical path.
6178          *
6179          * We could play tricks with atos by batching the stack
6180          * addresses to be resolved: atos can either take multiple
6181          * addresses from the command line, or read addresses from
6182          * a file (though the mess of creating temporary files would
6183          * probably negate much of any possible speedup).
6184          *
6185          * Normally there are only two objects present in the backtrace:
6186          * perl itself, and the libdyld.dylib.  (Note that the object
6187          * filenames contain the full pathname, so perl may not always
6188          * be in the same place.)  Whenever the object in the
6189          * backtrace changes, the base address also changes.
6190          *
6191          * The problem with batching the addresses, though, would be
6192          * matching the results with the addresses: the parsing of
6193          * the results is already painful enough with a single address. */
6194         if (fp) {
6195             char out[1024];
6196             UV cnt = fread(out, 1, sizeof(out), fp);
6197             if (cnt < sizeof(out)) {
6198                 const char* p = atos_parse(out + cnt - 1, out,
6199                                            source_name_size,
6200                                            source_line);
6201                 if (p) {
6202                     Newx(*source_name,
6203                          *source_name_size, char);
6204                     Copy(p, *source_name,
6205                          *source_name_size,  char);
6206                 }
6207             }
6208             pclose(fp);
6209         }
6210     }
6211 }
6212
6213 #endif /* #ifdef PERL_DARWIN */
6214
6215 /*
6216 =for apidoc get_c_backtrace
6217
6218 Collects the backtrace (aka "stacktrace") into a single linear
6219 malloced buffer, which the caller B<must> C<Perl_free_c_backtrace()>.
6220
6221 Scans the frames back by S<C<depth + skip>>, then drops the C<skip> innermost,
6222 returning at most C<depth> frames.
6223
6224 =cut
6225 */
6226
6227 Perl_c_backtrace*
6228 Perl_get_c_backtrace(pTHX_ int depth, int skip)
6229 {
6230     /* Note that here we must stay as low-level as possible: Newx(),
6231      * Copy(), Safefree(); since we may be called from anywhere,
6232      * so we should avoid higher level constructs like SVs or AVs.
6233      *
6234      * Since we are using safesysmalloc() via Newx(), don't try
6235      * getting backtrace() there, unless you like deep recursion. */
6236
6237     /* Currently only implemented with backtrace() and dladdr(),
6238      * for other platforms NULL is returned. */
6239
6240 #if defined(HAS_BACKTRACE) && defined(HAS_DLADDR)
6241     /* backtrace() is available via <execinfo.h> in glibc and in most
6242      * modern BSDs; dladdr() is available via <dlfcn.h>. */
6243
6244     /* We try fetching this many frames total, but then discard
6245      * the |skip| first ones.  For the remaining ones we will try
6246      * retrieving more information with dladdr(). */
6247     int try_depth = skip +  depth;
6248
6249     /* The addresses (program counters) returned by backtrace(). */
6250     void** raw_frames;
6251
6252     /* Retrieved with dladdr() from the addresses returned by backtrace(). */
6253     Dl_info* dl_infos;
6254
6255     /* Sizes _including_ the terminating \0 of the object name
6256      * and symbol name strings. */
6257     STRLEN* object_name_sizes;
6258     STRLEN* symbol_name_sizes;
6259
6260 #ifdef USE_BFD
6261     /* The symbol names comes either from dli_sname,
6262      * or if using BFD, they can come from BFD. */
6263     char** symbol_names;
6264 #endif
6265
6266     /* The source code location information.  Dug out with e.g. BFD. */
6267     char** source_names;
6268     STRLEN* source_name_sizes;
6269     STRLEN* source_lines;
6270
6271     Perl_c_backtrace* bt = NULL;  /* This is what will be returned. */
6272     int got_depth; /* How many frames were returned from backtrace(). */
6273     UV frame_count = 0; /* How many frames we return. */
6274     UV total_bytes = 0; /* The size of the whole returned backtrace. */
6275
6276 #ifdef USE_BFD
6277     bfd_context bfd_ctx;
6278 #endif
6279 #ifdef PERL_DARWIN
6280     atos_context atos_ctx;
6281 #endif
6282
6283     /* Here are probably possibilities for optimizing.  We could for
6284      * example have a struct that contains most of these and then
6285      * allocate |try_depth| of them, saving a bunch of malloc calls.
6286      * Note, however, that |frames| could not be part of that struct
6287      * because backtrace() will want an array of just them.  Also be
6288      * careful about the name strings. */
6289     Newx(raw_frames, try_depth, void*);
6290     Newx(dl_infos, try_depth, Dl_info);
6291     Newx(object_name_sizes, try_depth, STRLEN);
6292     Newx(symbol_name_sizes, try_depth, STRLEN);
6293     Newx(source_names, try_depth, char*);
6294     Newx(source_name_sizes, try_depth, STRLEN);
6295     Newx(source_lines, try_depth, STRLEN);
6296 #ifdef USE_BFD
6297     Newx(symbol_names, try_depth, char*);
6298 #endif
6299
6300     /* Get the raw frames. */
6301     got_depth = (int)backtrace(raw_frames, try_depth);
6302
6303     /* We use dladdr() instead of backtrace_symbols() because we want
6304      * the full details instead of opaque strings.  This is useful for
6305      * two reasons: () the details are needed for further symbolic
6306      * digging, for example in OS X (2) by having the details we fully
6307      * control the output, which in turn is useful when more platforms
6308      * are added: we can keep out output "portable". */
6309
6310     /* We want a single linear allocation, which can then be freed
6311      * with a single swoop.  We will do the usual trick of first
6312      * walking over the structure and seeing how much we need to
6313      * allocate, then allocating, and then walking over the structure
6314      * the second time and populating it. */
6315
6316     /* First we must compute the total size of the buffer. */
6317     total_bytes = sizeof(Perl_c_backtrace_header);
6318     if (got_depth > skip) {
6319         int i;
6320 #ifdef USE_BFD
6321         bfd_init(); /* Is this safe to call multiple times? */
6322         Zero(&bfd_ctx, 1, bfd_context);
6323 #endif
6324 #ifdef PERL_DARWIN
6325         Zero(&atos_ctx, 1, atos_context);
6326 #endif
6327         for (i = skip; i < try_depth; i++) {
6328             Dl_info* dl_info = &dl_infos[i];
6329
6330             object_name_sizes[i] = 0;
6331             source_names[i] = NULL;
6332             source_name_sizes[i] = 0;
6333             source_lines[i] = 0;
6334
6335             /* Yes, zero from dladdr() is failure. */
6336             if (dladdr(raw_frames[i], dl_info)) {
6337                 total_bytes += sizeof(Perl_c_backtrace_frame);
6338
6339                 object_name_sizes[i] =
6340                     dl_info->dli_fname ? strlen(dl_info->dli_fname) : 0;
6341                 symbol_name_sizes[i] =
6342                     dl_info->dli_sname ? strlen(dl_info->dli_sname) : 0;
6343 #ifdef USE_BFD
6344                 bfd_update(&bfd_ctx, dl_info);
6345                 bfd_symbolize(&bfd_ctx, raw_frames[i],
6346                               &symbol_names[i],
6347                               &symbol_name_sizes[i],
6348                               &source_names[i],
6349                               &source_name_sizes[i],
6350                               &source_lines[i]);
6351 #endif
6352 #if PERL_DARWIN
6353                 atos_update(&atos_ctx, dl_info);
6354                 atos_symbolize(&atos_ctx,
6355                                raw_frames[i],
6356                                &source_names[i],
6357                                &source_name_sizes[i],
6358                                &source_lines[i]);
6359 #endif
6360
6361                 /* Plus ones for the terminating \0. */
6362                 total_bytes += object_name_sizes[i] + 1;
6363                 total_bytes += symbol_name_sizes[i] + 1;
6364                 total_bytes += source_name_sizes[i] + 1;
6365
6366                 frame_count++;
6367             } else {
6368                 break;
6369             }
6370         }
6371 #ifdef USE_BFD
6372         Safefree(bfd_ctx.bfd_syms);
6373 #endif
6374     }
6375
6376     /* Now we can allocate and populate the result buffer. */
6377     Newxc(bt, total_bytes, char, Perl_c_backtrace);
6378     Zero(bt, total_bytes, char);
6379     bt->header.frame_count = frame_count;
6380     bt->header.total_bytes = total_bytes;
6381     if (frame_count > 0) {
6382         Perl_c_backtrace_frame* frame = bt->frame_info;
6383         char* name_base = (char *)(frame + frame_count);
6384         char* name_curr = name_base; /* Outputting the name strings here. */
6385         UV i;
6386         for (i = skip; i < skip + frame_count; i++) {
6387             Dl_info* dl_info = &dl_infos[i];
6388
6389             frame->addr = raw_frames[i];
6390             frame->object_base_addr = dl_info->dli_fbase;
6391             frame->symbol_addr = dl_info->dli_saddr;
6392
6393             /* Copies a string, including the \0, and advances the name_curr.
6394              * Also copies the start and the size to the frame. */
6395 #define PERL_C_BACKTRACE_STRCPY(frame, doffset, src, dsize, size) \
6396             if (size && src) \
6397                 Copy(src, name_curr, size, char); \
6398             frame->doffset = name_curr - (char*)bt; \
6399             frame->dsize = size; \
6400             name_curr += size; \
6401             *name_curr++ = 0;
6402
6403             PERL_C_BACKTRACE_STRCPY(frame, object_name_offset,
6404                                     dl_info->dli_fname,
6405                                     object_name_size, object_name_sizes[i]);
6406
6407 #ifdef USE_BFD
6408             PERL_C_BACKTRACE_STRCPY(frame, symbol_name_offset,
6409                                     symbol_names[i],
6410                                     symbol_name_size, symbol_name_sizes[i]);
6411             Safefree(symbol_names[i]);
6412 #else
6413             PERL_C_BACKTRACE_STRCPY(frame, symbol_name_offset,
6414                                     dl_info->dli_sname,
6415                                     symbol_name_size, symbol_name_sizes[i]);
6416 #endif
6417
6418             PERL_C_BACKTRACE_STRCPY(frame, source_name_offset,
6419                                     source_names[i],
6420                                     source_name_size, source_name_sizes[i]);
6421             Safefree(source_names[i]);
6422
6423 #undef PERL_C_BACKTRACE_STRCPY
6424
6425             frame->source_line_number = source_lines[i];
6426
6427             frame++;
6428         }
6429         assert(total_bytes ==
6430                (UV)(sizeof(Perl_c_backtrace_header) +
6431                     frame_count * sizeof(Perl_c_backtrace_frame) +
6432                     name_curr - name_base));
6433     }
6434 #ifdef USE_BFD
6435     Safefree(symbol_names);
6436     if (bfd_ctx.abfd) {
6437         bfd_close(bfd_ctx.abfd);
6438     }
6439 #endif
6440     Safefree(source_lines);
6441     Safefree(source_name_sizes);
6442     Safefree(source_names);
6443     Safefree(symbol_name_sizes);
6444     Safefree(object_name_sizes);
6445     /* Assuming the strings returned by dladdr() are pointers
6446      * to read-only static memory (the object file), so that
6447      * they do not need freeing (and cannot be). */
6448     Safefree(dl_infos);
6449     Safefree(raw_frames);
6450     return bt;
6451 #else
6452     PERL_UNUSED_ARGV(depth);
6453     PERL_UNUSED_ARGV(skip);
6454     return NULL;
6455 #endif
6456 }
6457
6458 /*
6459 =for apidoc free_c_backtrace
6460
6461 Deallocates a backtrace received from get_c_bracktrace.
6462
6463 =cut
6464 */
6465
6466 /*
6467 =for apidoc get_c_backtrace_dump
6468
6469 Returns a SV containing a dump of C<depth> frames of the call stack, skipping
6470 the C<skip> innermost ones.  C<depth> of 20 is usually enough.
6471
6472 The appended output looks like:
6473
6474 ...
6475 1   10e004812:0082   Perl_croak   util.c:1716    /usr/bin/perl
6476 2   10df8d6d2:1d72   perl_parse   perl.c:3975    /usr/bin/perl
6477 ...
6478
6479 The fields are tab-separated.  The first column is the depth (zero
6480 being the innermost non-skipped frame).  In the hex:offset, the hex is
6481 where the program counter was in C<S_parse_body>, and the :offset (might
6482 be missing) tells how much inside the C<S_parse_body> the program counter was.
6483
6484 The C<util.c:1716> is the source code file and line number.
6485
6486 The F</usr/bin/perl> is obvious (hopefully).
6487
6488 Unknowns are C<"-">.  Unknowns can happen unfortunately quite easily:
6489 if the platform doesn't support retrieving the information;
6490 if the binary is missing the debug information;
6491 if the optimizer has transformed the code by for example inlining.
6492
6493 =cut
6494 */
6495
6496 SV*
6497 Perl_get_c_backtrace_dump(pTHX_ int depth, int skip)
6498 {
6499     Perl_c_backtrace* bt;
6500
6501     bt = get_c_backtrace(depth, skip + 1 /* Hide ourselves. */);
6502     if (bt) {
6503         Perl_c_backtrace_frame* frame;
6504         SV* dsv = newSVpvs("");
6505         UV i;
6506         for (i = 0, frame = bt->frame_info;
6507              i < bt->header.frame_count; i++, frame++) {
6508             Perl_sv_catpvf(aTHX_ dsv, "%d", (int)i);
6509             Perl_sv_catpvf(aTHX_ dsv, "\t%p", frame->addr ? frame->addr : "-");
6510             /* Symbol (function) names might disappear without debug info.
6511              *
6512              * The source code location might disappear in case of the
6513              * optimizer inlining or otherwise rearranging the code. */
6514             if (frame->symbol_addr) {
6515                 Perl_sv_catpvf(aTHX_ dsv, ":%04x",
6516                                (int)
6517                                ((char*)frame->addr - (char*)frame->symbol_addr));
6518             }
6519             Perl_sv_catpvf(aTHX_ dsv, "\t%s",
6520                            frame->symbol_name_size &&
6521                            frame->symbol_name_offset ?
6522                            (char*)bt + frame->symbol_name_offset : "-");
6523             if (frame->source_name_size &&
6524                 frame->source_name_offset &&
6525                 frame->source_line_number) {
6526                 Perl_sv_catpvf(aTHX_ dsv, "\t%s:%" UVuf,
6527                                (char*)bt + frame->source_name_offset,
6528                                (UV)frame->source_line_number);
6529             } else {
6530                 Perl_sv_catpvf(aTHX_ dsv, "\t-");
6531             }
6532             Perl_sv_catpvf(aTHX_ dsv, "\t%s",
6533                            frame->object_name_size &&
6534                            frame->object_name_offset ?
6535                            (char*)bt + frame->object_name_offset : "-");
6536             /* The frame->object_base_addr is not output,
6537              * but it is used for symbolizing/symbolicating. */
6538             sv_catpvs(dsv, "\n");
6539         }
6540
6541         Perl_free_c_backtrace(bt);
6542
6543         return dsv;
6544     }
6545
6546     return NULL;
6547 }
6548
6549 /*
6550 =for apidoc dump_c_backtrace
6551
6552 Dumps the C backtrace to the given C<fp>.
6553
6554 Returns true if a backtrace could be retrieved, false if not.
6555
6556 =cut
6557 */
6558
6559 bool
6560 Perl_dump_c_backtrace(pTHX_ PerlIO* fp, int depth, int skip)
6561 {
6562     SV* sv;
6563
6564     PERL_ARGS_ASSERT_DUMP_C_BACKTRACE;
6565
6566     sv = Perl_get_c_backtrace_dump(aTHX_ depth, skip);
6567     if (sv) {
6568         sv_2mortal(sv);
6569         PerlIO_printf(fp, "%s", SvPV_nolen(sv));
6570         return TRUE;
6571     }
6572     return FALSE;
6573 }
6574
6575 #endif /* #ifdef USE_C_BACKTRACE */
6576
6577 #ifdef PERL_TSA_ACTIVE
6578
6579 /* pthread_mutex_t and perl_mutex are typedef equivalent
6580  * so casting the pointers is fine. */
6581
6582 int perl_tsa_mutex_lock(perl_mutex* mutex)
6583 {
6584     return pthread_mutex_lock((pthread_mutex_t *) mutex);
6585 }
6586
6587 int perl_tsa_mutex_unlock(perl_mutex* mutex)
6588 {
6589     return pthread_mutex_unlock((pthread_mutex_t *) mutex);
6590 }
6591
6592 int perl_tsa_mutex_destroy(perl_mutex* mutex)
6593 {
6594     return pthread_mutex_destroy((pthread_mutex_t *) mutex);
6595 }
6596
6597 #endif
6598
6599
6600 #ifdef USE_DTRACE
6601
6602 /* log a sub call or return */
6603
6604 void
6605 Perl_dtrace_probe_call(pTHX_ CV *cv, bool is_call)
6606 {
6607     const char *func;
6608     const char *file;
6609     const char *stash;
6610     const COP  *start;
6611     line_t      line;
6612
6613     PERL_ARGS_ASSERT_DTRACE_PROBE_CALL;
6614
6615     if (CvNAMED(cv)) {
6616         HEK *hek = CvNAME_HEK(cv);
6617         func = HEK_KEY(hek);
6618     }
6619     else {
6620         GV  *gv = CvGV(cv);
6621         func = GvENAME(gv);
6622     }
6623     start = (const COP *)CvSTART(cv);
6624     file  = CopFILE(start);
6625     line  = CopLINE(start);
6626     stash = CopSTASHPV(start);
6627
6628     if (is_call) {
6629         PERL_SUB_ENTRY(func, file, line, stash);
6630     }
6631     else {
6632         PERL_SUB_RETURN(func, file, line, stash);
6633     }
6634 }
6635
6636
6637 /* log a require file loading/loaded  */
6638
6639 void
6640 Perl_dtrace_probe_load(pTHX_ const char *name, bool is_loading)
6641 {
6642     PERL_ARGS_ASSERT_DTRACE_PROBE_LOAD;
6643
6644     if (is_loading) {
6645         PERL_LOADING_FILE(name);
6646     }
6647     else {
6648         PERL_LOADED_FILE(name);
6649     }
6650 }
6651
6652
6653 /* log an op execution */
6654
6655 void
6656 Perl_dtrace_probe_op(pTHX_ const OP *op)
6657 {
6658     PERL_ARGS_ASSERT_DTRACE_PROBE_OP;
6659
6660     PERL_OP_ENTRY(OP_NAME(op));
6661 }
6662
6663
6664 /* log a compile/run phase change */
6665
6666 void
6667 Perl_dtrace_probe_phase(pTHX_ enum perl_phase phase)
6668 {
6669     const char *ph_old = PL_phase_names[PL_phase];
6670     const char *ph_new = PL_phase_names[phase];
6671
6672     PERL_PHASE_CHANGE(ph_new, ph_old);
6673 }
6674
6675 #endif
6676
6677 /*
6678  * ex: set ts=8 sts=4 sw=4 et:
6679  */