diff --git a/lib/libc/stdlib/getenv.c b/lib/libc/stdlib/getenv.c index a8205d6..3d7d77e 100644 --- a/lib/libc/stdlib/getenv.c +++ b/lib/libc/stdlib/getenv.c @@ -23,6 +23,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "namespace.h" + #include #include #include @@ -30,16 +32,16 @@ #include #include #include - +#include #include +#include "un-namespace.h" __FBSDID("$FreeBSD: src/lib/libc/stdlib/getenv.c,v 1.12 2007/09/22 02:30:44 scf Exp $"); - static const char CorruptEnvFindMsg[] = - "environment corrupt; unable to find %.*s"; + "environment corrupt; unable to find "; static const char CorruptEnvValueMsg[] = - "environment corrupt; missing value for %s"; + "environment corrupt; missing value for "; /* @@ -91,6 +93,15 @@ static int envActive = 0; static int envVarsSize = 0; static int envVarsTotal = 0; +static void +env_warn(const char *msg, const char *tail, size_t tail_len) +{ + static const char nl[1] = "\n"; + + _write(STDERR_FILENO, msg, strlen(msg)); + _write(STDERR_FILENO, tail, tail_len); + _write(STDERR_FILENO, nl, sizeof(nl)); +} /* Deinitialization of new environment. */ static void __attribute__ ((destructor)) __clean_env_destructor(void); @@ -341,7 +352,8 @@ __build_env(void) envVars[envNdx].valueSize = strlen(envVars[envNdx].value); } else { - warnx(CorruptEnvValueMsg, envVars[envNdx].name); + env_warn(CorruptEnvValueMsg, envVars[envNdx].name, + strlen(envVars[envNdx].name)); errno = EFAULT; goto Failure; } @@ -356,8 +368,8 @@ __build_env(void) activeNdx = envVarsTotal - 1; if (__findenv(envVars[envNdx].name, nameLen, &activeNdx, false) == NULL) { - warnx(CorruptEnvFindMsg, (int)nameLen, - envVars[envNdx].name); + env_warn(CorruptEnvFindMsg, envVars[envNdx].name, + nameLen); errno = EFAULT; goto Failure; } @@ -527,7 +539,8 @@ __merge_environ(void) if (origEnviron != NULL) for (env = origEnviron; *env != NULL; env++) { if ((equals = strchr(*env, '=')) == NULL) { - warnx(CorruptEnvValueMsg, *env); + env_warn(CorruptEnvValueMsg, *env, + strlen(*env)); errno = EFAULT; return (-1); }