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

Diff for /src/usr.bin/tmux/environ.c between version 1.3 and 1.4

version 1.3, 2009/08/09 15:17:50 version 1.4, 2010/04/04 19:02:09
Line 35 
Line 35 
         return (strcmp(envent1->name, envent2->name));          return (strcmp(envent1->name, envent2->name));
 }  }
   
   /* Initialise the environment. */
 void  void
 environ_init(struct environ *env)  environ_init(struct environ *env)
 {  {
         RB_INIT(env);          RB_INIT(env);
 }  }
   
   /* Free an environment. */
 void  void
 environ_free(struct environ *env)  environ_free(struct environ *env)
 {  {
Line 56 
Line 58 
         }          }
 }  }
   
   /* Copy one environment into another. */
 void  void
 environ_copy(struct environ *srcenv, struct environ *dstenv)  environ_copy(struct environ *srcenv, struct environ *dstenv)
 {  {
Line 65 
Line 68 
                 environ_set(dstenv, envent->name, envent->value);                  environ_set(dstenv, envent->name, envent->value);
 }  }
   
   /* Find an environment variable. */
 struct environ_entry *  struct environ_entry *
 environ_find(struct environ *env, const char *name)  environ_find(struct environ *env, const char *name)
 {  {
Line 74 
Line 78 
         return (RB_FIND(environ, env, &envent));          return (RB_FIND(environ, env, &envent));
 }  }
   
   /* Set an environment variable. */
 void  void
 environ_set(struct environ *env, const char *name, const char *value)  environ_set(struct environ *env, const char *name, const char *value)
 {  {
Line 97 
Line 102 
         }          }
 }  }
   
   /* Set an environment variable from a NAME=VALUE string. */
 void  void
 environ_put(struct environ *env, const char *var)  environ_put(struct environ *env, const char *var)
 {  {
         char            *name, *value;          char    *name, *value;
   
         value = strchr(var, '=');          value = strchr(var, '=');
         if (value == NULL)          if (value == NULL)
Line 114 
Line 120 
         xfree(name);          xfree(name);
 }  }
   
   /* Unset an environment variable. */
 void  void
 environ_unset(struct environ *env, const char *name)  environ_unset(struct environ *env, const char *name)
 {  {
Line 128 
Line 135 
         xfree(envent);          xfree(envent);
 }  }
   
   /*
    * Copy a space-separated list of variables from a destination into a source
    * environment.
    */
 void  void
 environ_update(const char *vars, struct environ *srcenv, struct environ *dstenv)  environ_update(const char *vars, struct environ *srcenv, struct environ *dstenv)
 {  {
Line 142 
Line 153 
                         environ_set(dstenv, envent->name, envent->value);                          environ_set(dstenv, envent->name, envent->value);
         }          }
         xfree(copyvars);          xfree(copyvars);
   }
   
   /* Push environment into the real environment - use after fork(). */
   void
   environ_push(struct environ *env)
   {
           ARRAY_DECL(, char *)    varlist;
           struct environ_entry   *envent;
           char                  **varp, *var;
           u_int                   i;
   
           ARRAY_INIT(&varlist);
           for (varp = environ; *varp != NULL; varp++) {
                   var = xstrdup(*varp);
                   var[strcspn(var, "=")] = '\0';
                   ARRAY_ADD(&varlist, var);
           }
           for (i = 0; i < ARRAY_LENGTH(&varlist); i++)
                   unsetenv(ARRAY_ITEM(&varlist, i));
           ARRAY_FREE(&varlist);
   
           RB_FOREACH(envent, environ, env) {
                   if (envent->value != NULL)
                           setenv(envent->name, envent->value, 1);
           }
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4