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

Diff for /src/usr.bin/tmux/server-client.c between version 1.93 and 1.94

version 1.93, 2013/03/24 09:28:59 version 1.94, 2013/03/24 09:54:10
Line 45 
Line 45 
             struct client *, struct msg_identify_data *, int);              struct client *, struct msg_identify_data *, int);
 void    server_client_msg_shell(struct client *);  void    server_client_msg_shell(struct client *);
   
 void printflike2 server_client_msg_error(struct cmd_ctx *, const char *, ...);  
 void printflike2 server_client_msg_print(struct cmd_ctx *, const char *, ...);  
 void printflike2 server_client_msg_info(struct cmd_ctx *, const char *, ...);  
   
 /* Create a new client. */  /* Create a new client. */
 void  void
 server_client_create(int fd)  server_client_create(int fd)
Line 67 
Line 63 
                 fatal("gettimeofday failed");                  fatal("gettimeofday failed");
         memcpy(&c->activity_time, &c->creation_time, sizeof c->activity_time);          memcpy(&c->activity_time, &c->creation_time, sizeof c->activity_time);
   
           c->cmdq = cmdq_new(c);
           c->cmdq->client_exit = 1;
   
         c->stdin_data = evbuffer_new ();          c->stdin_data = evbuffer_new ();
         c->stdout_data = evbuffer_new ();          c->stdout_data = evbuffer_new ();
         c->stderr_data = evbuffer_new ();          c->stderr_data = evbuffer_new ();
Line 181 
Line 180 
         free(c->prompt_buffer);          free(c->prompt_buffer);
         free(c->cwd);          free(c->cwd);
   
           c->cmdq->dead = 1;
           cmdq_free(c->cmdq);
           c->cmdq = NULL;
   
         environ_free(&c->environ);          environ_free(&c->environ);
   
         close(c->ibuf.fd);          close(c->ibuf.fd);
Line 901 
Line 904 
         }          }
 }  }
   
 /* Callback to send error message to client. */  
 void printflike2  
 server_client_msg_error(struct cmd_ctx *ctx, const char *fmt, ...)  
 {  
         va_list ap;  
   
         va_start(ap, fmt);  
         evbuffer_add_vprintf(ctx->cmdclient->stderr_data, fmt, ap);  
         va_end(ap);  
   
         evbuffer_add(ctx->cmdclient->stderr_data, "\n", 1);  
         server_push_stderr(ctx->cmdclient);  
         ctx->cmdclient->retcode = 1;  
 }  
   
 /* Callback to send print message to client. */  
 void printflike2  
 server_client_msg_print(struct cmd_ctx *ctx, const char *fmt, ...)  
 {  
         va_list ap;  
   
         va_start(ap, fmt);  
         evbuffer_add_vprintf(ctx->cmdclient->stdout_data, fmt, ap);  
         va_end(ap);  
   
         evbuffer_add(ctx->cmdclient->stdout_data, "\n", 1);  
         server_push_stdout(ctx->cmdclient);  
 }  
   
 /* Callback to send print message to client, if not quiet. */  
 void printflike2  
 server_client_msg_info(struct cmd_ctx *ctx, const char *fmt, ...)  
 {  
         va_list ap;  
   
         if (options_get_number(&global_options, "quiet"))  
                 return;  
   
         va_start(ap, fmt);  
         evbuffer_add_vprintf(ctx->cmdclient->stdout_data, fmt, ap);  
         va_end(ap);  
   
         evbuffer_add(ctx->cmdclient->stdout_data, "\n", 1);  
         server_push_stdout(ctx->cmdclient);  
 }  
   
 /* Handle command message. */  /* Handle command message. */
 void  void
 server_client_msg_command(struct client *c, struct msg_command_data *data)  server_client_msg_command(struct client *c, struct msg_command_data *data)
 {  {
         struct cmd_ctx  *ctx;  
         struct cmd_list *cmdlist = NULL;          struct cmd_list *cmdlist = NULL;
         int              argc;          int              argc;
         char           **argv, *cause;          char           **argv, *cause;
   
         ctx = cmd_get_ctx(c, NULL);  
         ctx->msgdata = data;  
         ctx->error = server_client_msg_error;  
         ctx->print = server_client_msg_print;  
         ctx->info = server_client_msg_info;  
   
         argc = data->argc;          argc = data->argc;
         data->argv[(sizeof data->argv) - 1] = '\0';          data->argv[(sizeof data->argv) - 1] = '\0';
         if (cmd_unpack_argv(data->argv, sizeof data->argv, argc, &argv) != 0) {          if (cmd_unpack_argv(data->argv, sizeof data->argv, argc, &argv) != 0) {
                 server_client_msg_error(ctx, "command too long");                  cmdq_error(c->cmdq, "command too long");
                 goto error;                  goto error;
         }          }
   
Line 975 
Line 925 
                 *argv = xstrdup("new-session");                  *argv = xstrdup("new-session");
         }          }
   
         if ((cmdlist = cmd_list_parse(argc, argv, &cause)) == NULL) {          if ((cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause)) == NULL) {
                 server_client_msg_error(ctx, "%s", cause);                  cmdq_error(c->cmdq, "%s", cause);
                 cmd_free_argv(argc, argv);                  cmd_free_argv(argc, argv);
                 goto error;                  goto error;
         }          }
         cmd_free_argv(argc, argv);          cmd_free_argv(argc, argv);
   
         switch (cmd_list_exec(cmdlist, ctx))          cmdq_run(c->cmdq, cmdlist);
         {  
         case CMD_RETURN_ERROR:  
         case CMD_RETURN_NORMAL:  
                 c->flags |= CLIENT_EXIT;  
                 break;  
         case CMD_RETURN_ATTACH:  
         case CMD_RETURN_YIELD:  
                 break;  
         }  
         cmd_list_free(cmdlist);          cmd_list_free(cmdlist);
         cmd_free_ctx(ctx);  
         return;          return;
   
 error:  error:
         if (cmdlist != NULL)          if (cmdlist != NULL)
                 cmd_list_free(cmdlist);                  cmd_list_free(cmdlist);
         cmd_free_ctx(ctx);  
   
         c->flags |= CLIENT_EXIT;          c->flags |= CLIENT_EXIT;
 }  }

Legend:
Removed from v.1.93  
changed lines
  Added in v.1.94