Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Edited by sciSpider (sch jbop) (X_X)@==(Q_Q)@

...

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 the getenv 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
bgColor#ccccFF
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
bgColor#ccccFF
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 */
   }
}

...