| 457 | /* acl_default_strndup - save substring to heap */ |
| 458 | |
| 459 | char *acl_default_strndup(const char *filename, int line, |
| 460 | const char *str, size_t len) |
| 461 | { |
| 462 | const char *myname = "acl_default_strndup"; |
| 463 | char *result; |
| 464 | char *cp; |
| 465 | const char *pname = NULL; |
| 466 | |
| 467 | if (filename && *filename) { |
| 468 | SET_FILE(pname, filename); |
| 469 | } else { |
| 470 | pname = __FILENAME_UNKNOWN; |
| 471 | } |
| 472 | |
| 473 | if (str == 0) { |
| 474 | acl_msg_fatal("%s(%d)->%s: null pointer argument", |
| 475 | pname, line, myname); |
| 476 | } |
| 477 | |
| 478 | #ifndef NO_SHARED_EMPTY_STRINGS |
| 479 | if (*str == 0) { |
| 480 | return (char *) empty_string; |
| 481 | } |
| 482 | #endif |
| 483 | |
| 484 | if ((cp = (char*) memchr(str, 0, len)) != 0) { |
| 485 | len = cp - str; |
| 486 | } |
| 487 | |
| 488 | #ifdef DEBUG_MEM |
| 489 | __nstrndup++; |
| 490 | #endif |
| 491 | |
| 492 | result = (char*) acl_default_malloc(pname, line, len + 1); |
| 493 | if (len > 0) { |
| 494 | memcpy(result, str, len); |
| 495 | } |
| 496 | result[len] = 0; |
| 497 | return result; |
| 498 | } |
| 499 | |
| 500 | /* acl_default_memdup - copy memory */ |
| 501 |
nothing calls this directly
no test coverage detected
searching dependent graphs…