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