This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
update size after Renew
[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,