[BACK]Return to env.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / sudo

Diff for /src/usr.bin/sudo/Attic/env.c between version 1.22 and 1.23

version 1.22, 2010/03/04 12:21:36 version 1.23, 2010/06/02 19:30:10
Line 317 
Line 317 
 unsetenv(var)  unsetenv(var)
     const char *var;      const char *var;
 {  {
     char **ep;      char **ep = env.envp;
     size_t len;      size_t len;
   
     if (strchr(var, '=') != NULL) {      if (strchr(var, '=') != NULL) {
Line 355 
Line 355 
     }      }
   
     len = strlen(var);      len = strlen(var);
     for (ep = env.envp; *ep; ep++) {      while (*ep != NULL) {
         if (strncmp(var, *ep, len) == 0 && (*ep)[len] == '=') {          if (strncmp(var, *ep, len) == 0 && (*ep)[len] == '=') {
             /* Found it; shift remainder + NULL over by one and update len. */              /* Found it; shift remainder + NULL over by one and update len. */
             memmove(ep, ep + 1,              memmove(ep, ep + 1,
                 (env.env_len - (ep - env.envp)) * sizeof(char *));                  (env.env_len - (ep - env.envp)) * sizeof(char *));
             env.env_len--;              env.env_len--;
             break;              /* Keep going, could be multiple instances of the var. */
           } else {
               ep++;
         }          }
     }      }
 #ifndef UNSETENV_VOID  #ifndef UNSETENV_VOID
Line 429 
Line 431 
 {  {
     char **ep;      char **ep;
     size_t len;      size_t len;
       int found = FALSE;
   
     /* Make sure there is room for the new entry plus a NULL. */      /* Make sure there is room for the new entry plus a NULL. */
     if (env.env_len + 2 > env.env_size) {      if (env.env_len + 2 > env.env_size) {
Line 447 
Line 450 
 #endif  #endif
   
     if (dupcheck) {      if (dupcheck) {
             len = (strchr(str, '=') - str) + 1;          len = (strchr(str, '=') - str) + 1;
             for (ep = env.envp; *ep; ep++) {          for (ep = env.envp; !found && *ep != NULL; ep++) {
               if (strncmp(str, *ep, len) == 0) {
                   if (overwrite)
                       *ep = str;
                   found = TRUE;
               }
           }
           /* Prune out duplicate variables. */
           if (found && overwrite) {
               while (*ep != NULL) {
                 if (strncmp(str, *ep, len) == 0) {                  if (strncmp(str, *ep, len) == 0) {
                     if (overwrite)                      memmove(ep, ep + 1,
                         *ep = str;                          (env.env_len - (ep - env.envp)) * sizeof(char *));
                     return;                      env.env_len--;
                   } else {
                       ep++;
                 }                  }
             }              }
     } else          }
         ep = env.envp + env.env_len;      }
   
     env.env_len++;      if (!found) {
     *ep++ = str;          ep = env.envp + env.env_len;
     *ep = NULL;          env.env_len++;
           *ep++ = str;
           *ep = NULL;
       }
 }  }
   
 /*  /*

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23