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