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