1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Handle long variable names in putenv

This commit is contained in:
Ulrich Drepper
2011-05-16 10:13:54 -04:00
parent 68a3f91fca
commit ea389b12b3
3 changed files with 32 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
/* Copyright (C) 1991, 94, 95, 96, 97, 98, 99, 11 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -57,14 +57,31 @@ putenv (string)
if (name_end != NULL)
{
char *name;
#ifdef _LIBC
char *name = strndupa (string, name_end - string);
int use_malloc = !__libc_use_alloca (name_end - string + 1);
if (__builtin_expect (use_malloc, 0))
{
name = strndup (string, name_end - string);
if (name == NULL)
return -1;
}
else
name = strndupa (string, name_end - string);
#else
char *name = alloca (name_end - string + 1);
# define use_malloc 1
name = malloc (name_end - string + 1);
if (name == NULL)
return -1;
memcpy (name, string, name_end - string);
name[name_end - string] = '\0';
#endif
return __add_to_environ (name, NULL, string, 1);
int result = __add_to_environ (name, NULL, string, 1);
if (__builtin_expect (use_malloc, 0))
free (name);
return result;
}
__unsetenv (string);