about summary refs log tree commit diff
path: root/src/env/setenv.c
Commit message (Collapse)AuthorAgeFilesLines
* overhaul environment functionsAlexander Monakov2017-09-041-13/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite environment access functions to slim down code, fix bugs and avoid invoking undefined behavior. * avoid using int-typed iterators where size_t would be correct; * use strncmp instead of memcmp consistently; * tighten prologues by invoking __strchrnul; * handle NULL environ. putenv: * handle "=value" input via unsetenv too (will return -1/EINVAL); * rewrite and simplify __putenv; fix the leak caused by failure to deallocate entry added by preceding setenv when called from putenv. setenv: * move management of libc-allocated entries to this translation unit, and use no-op weak symbols in putenv/unsetenv; unsetenv: * rewrite; this fixes UB caused by testing a free'd pointer against NULL on entry to subsequent loops. Not changed: Failure to extend allocation tracking array (previously __env_map, now env_alloced) is ignored rather than causing to report -1/ENOMEM to the caller; the worst-case consequence is leaking this allocation when it is removed or replaced in a subsequent environment access. Initially UB in unsetenv was reported by Alexander Cherepanov. Using a weak alias to avoid pulling in malloc via unsetenv was suggested by Rich Felker.
* remove errno setting from setenv, malloc sets it correctly on oomSzabolcs Nagy2013-10-071-1/+0
|
* fix failure to check malloc result in setenvRich Felker2013-10-041-9/+9
|
* fix for setenv bogus var argument handlingRich Felker2011-07-281-1/+1
| | | | | | | | | | | thanks to mikachu per POSIX: The setenv() function shall fail if: [EINVAL] The name argument is a null pointer, points to an empty string, or points to a string containing an '=' character.
* initial check-in, version 0.5.0 v0.5.0Rich Felker2011-02-121-0/+31