...
The
getenv
function returns a pointer to a string associated with the matched list member. The string pointed to shall not be modified by the program, but may be overwritten by a subsequent call to thegetenv
function. If the specified name cannot be found, a null NULL pointer is returned.
Non-Compliant Code Example
...
For the case where the intent of the non-compliant code example is to use the modified value of the environment variable locally and not modify the environment, this compliant solution makes a local copy of that string value, and then modifies the local copy.
Code Block | ||
---|---|---|
| ||
char const char *env; char *copy_of_env; if ((env = getenv("TEST_ENV")) != NULL) { copy_of_env = (char *)malloc(strlen(env) + 1); if (copy_of_env != NULL) { strcpy(copy_of_env, env); } else { /* Error handling */ } copy_of_env[0] = 'a'; } |
...
For the case where the intent of the non-compliant code example is to modify the environment, this compliant solution will perform that action using the POSIX putenv()
function.
Code Block | ||
---|---|---|
| ||
char const char *env; char *copy_of_env; if ((env = getenv("TEST_ENV")) != NULL) { copy_of_env = (char *)malloc(sizeof("TEST_ENV=") + strlen(env)); if (copy_of_env != NULL) { strcpy(copy_of_env, "TEST_ENV="); strcat(copy_of_env, env); copy_of_env[sizeof("TEST_ENV=") - 1] = 'a'; if (putenv(copy_of_env) != 0) { /* handle error */ } } else { /* Error handling */ } } |
...