* Look up an environment variable by name. * Return a pointer to the string if found. * The pointer has to be freed with freeenv() * after use. */
| 478 | * after use. |
| 479 | */ |
| 480 | char * |
| 481 | kern_getenv(const char *name) |
| 482 | { |
| 483 | char *cp, *ret; |
| 484 | int len; |
| 485 | |
| 486 | if (dynamic_kenv) { |
| 487 | len = KENV_MNAMELEN + 1 + kenv_mvallen + 1; |
| 488 | ret = uma_zalloc(kenv_zone, M_WAITOK | M_ZERO); |
| 489 | mtx_lock(&kenv_lock); |
| 490 | cp = _getenv_dynamic(name, NULL); |
| 491 | if (cp != NULL) |
| 492 | strlcpy(ret, cp, len); |
| 493 | mtx_unlock(&kenv_lock); |
| 494 | if (cp == NULL) { |
| 495 | uma_zfree(kenv_zone, ret); |
| 496 | ret = NULL; |
| 497 | } |
| 498 | } else |
| 499 | ret = _getenv_static(name); |
| 500 | |
| 501 | return (ret); |
| 502 | } |
| 503 | |
| 504 | /* |
| 505 | * Test if an environment variable is defined. |
no test coverage detected