[BACK]Return to cmd-show-environment.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/cmd-show-environment.c between version 1.9 and 1.10

version 1.9, 2014/10/20 22:29:25 version 1.10, 2015/07/13 13:36:29
Line 27 
Line 27 
  * Show environment.   * Show environment.
  */   */
   
 enum cmd_retval  cmd_show_environment_exec(struct cmd *, struct cmd_q *);  enum cmd_retval cmd_show_environment_exec(struct cmd *, struct cmd_q *);
   
   char    *cmd_show_environment_escape(struct environ_entry *);
   void     cmd_show_environment_print(struct cmd *, struct cmd_q *,
                struct environ_entry *);
   
 const struct cmd_entry cmd_show_environment_entry = {  const struct cmd_entry cmd_show_environment_entry = {
         "show-environment", "showenv",          "show-environment", "showenv",
         "gt:", 0, 1,          "gst:", 0, 1,
         "[-g] " CMD_TARGET_SESSION_USAGE " [name]",          "[-gs] " CMD_TARGET_SESSION_USAGE " [name]",
         0,          0,
         cmd_show_environment_exec          cmd_show_environment_exec
 };  };
   
   char *
   cmd_show_environment_escape(struct environ_entry *envent)
   {
           const char      *value = envent->value;
           char             c, *out, *ret;
   
           out = ret = xmalloc(strlen(value) * 2 + 1); /* at most twice the size */
           while ((c = *value++) != '\0') {
                   /* POSIX interprets $ ` " and \ in double quotes. */
                   if (c == '$' || c == '`' || c == '"' || c == '\\')
                           *out++ = '\\';
                   *out++ = c;
           }
           *out = '\0';
   
           return ret;
   }
   
   void
   cmd_show_environment_print(struct cmd *self, struct cmd_q *cmdq,
       struct environ_entry *envent)
   {
           char    *escaped;
   
           if (!args_has(self->args, 's')) {
                   if (envent->value != NULL)
                           cmdq_print(cmdq, "%s=%s", envent->name, envent->value);
                   else
                           cmdq_print(cmdq, "-%s", envent->name);
                   return;
           }
   
           if (envent->value != NULL) {
                   escaped = cmd_show_environment_escape(envent);
                   cmdq_print(cmdq, "%s=\"%s\"; export %s;", envent->name, escaped,
                       envent->name);
                   free(escaped);
           } else
                   cmdq_print(cmdq, "unset %s;", envent->name);
   }
   
 enum cmd_retval  enum cmd_retval
 cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)  cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
 {  {
Line 48 
Line 93 
         if (args_has(self->args, 'g'))          if (args_has(self->args, 'g'))
                 env = &global_environ;                  env = &global_environ;
         else {          else {
                 if ((s = cmd_find_session(cmdq, args_get(args, 't'), 0)) == NULL)                  s = cmd_find_session(cmdq, args_get(args, 't'), 0);
                   if (s == NULL)
                         return (CMD_RETURN_ERROR);                          return (CMD_RETURN_ERROR);
                 env = &s->environ;                  env = &s->environ;
         }          }
Line 59 
Line 105 
                         cmdq_error(cmdq, "unknown variable: %s", args->argv[0]);                          cmdq_error(cmdq, "unknown variable: %s", args->argv[0]);
                         return (CMD_RETURN_ERROR);                          return (CMD_RETURN_ERROR);
                 }                  }
                 if (envent->value != NULL)                  cmd_show_environment_print(self, cmdq, envent);
                         cmdq_print(cmdq, "%s=%s", envent->name, envent->value);  
                 else  
                         cmdq_print(cmdq, "-%s", envent->name);  
                 return (CMD_RETURN_NORMAL);                  return (CMD_RETURN_NORMAL);
         }          }
   
         RB_FOREACH(envent, environ, env) {          RB_FOREACH(envent, environ, env)
                 if (envent->value != NULL)                  cmd_show_environment_print(self, cmdq, envent);
                         cmdq_print(cmdq, "%s=%s", envent->name, envent->value);  
                 else  
                         cmdq_print(cmdq, "-%s", envent->name);  
         }  
   
         return (CMD_RETURN_NORMAL);          return (CMD_RETURN_NORMAL);
 }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10