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