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

Diff for /src/usr.bin/tmux/cmd-load-buffer.c between version 1.14 and 1.15

version 1.14, 2010/12/20 00:03:55 version 1.15, 2010/12/30 23:16:18
Line 35 
Line 35 
   
 const struct cmd_entry cmd_load_buffer_entry = {  const struct cmd_entry cmd_load_buffer_entry = {
         "load-buffer", "loadb",          "load-buffer", "loadb",
         CMD_BUFFER_SESSION_USAGE " path",          CMD_BUFFER_USAGE " path",
         CMD_ARG1, "",          CMD_ARG1, "",
         cmd_buffer_init,          cmd_buffer_init,
         cmd_buffer_parse,          cmd_buffer_parse,
Line 44 
Line 44 
         cmd_buffer_print          cmd_buffer_print
 };  };
   
 struct cmd_load_buffer_cdata {  
         struct session  *session;  
         int              buffer;  
 };  
   
 int  int
 cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)  cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {  {
         struct cmd_buffer_data          *data = self->data;          struct cmd_buffer_data  *data = self->data;
         struct cmd_load_buffer_cdata    *cdata;          struct client           *c = ctx->cmdclient;
         struct session                  *s;          FILE                    *f;
         struct client                   *c = ctx->cmdclient;          char                    *pdata, *new_pdata;
         FILE                            *f;          size_t                   psize;
         char                            *pdata, *new_pdata;          u_int                    limit;
         size_t                           psize;          int                      ch;
         u_int                            limit;  
         int                              ch;  
   
         if ((s = cmd_find_session(ctx, data->target)) == NULL)  
                 return (-1);  
   
         if (strcmp(data->arg, "-") == 0) {          if (strcmp(data->arg, "-") == 0) {
                 if (c == NULL) {                  if (c == NULL) {
                         ctx->error(ctx, "%s: can't read from stdin", data->arg);                          ctx->error(ctx, "%s: can't read from stdin", data->arg);
Line 79 
Line 69 
                         return (-1);                          return (-1);
                 }                  }
   
                 cdata = xmalloc(sizeof *cdata);                  c->stdin_data = &data->buffer;
                 cdata->session = s;  
                 cdata->session->references++;  
                 cdata->buffer = data->buffer;  
                 c->stdin_data = cdata;  
                 c->stdin_callback = cmd_load_buffer_callback;                  c->stdin_callback = cmd_load_buffer_callback;
   
                 c->references++;                  c->references++;
Line 115 
Line 101 
                 pdata[psize] = '\0';                  pdata[psize] = '\0';
   
         fclose(f);          fclose(f);
         f = NULL;  
   
         limit = options_get_number(&s->options, "buffer-limit");          limit = options_get_number(&global_options, "buffer-limit");
         if (data->buffer == -1) {          if (data->buffer == -1) {
                 paste_add(&s->buffers, pdata, psize, limit);                  paste_add(&global_buffers, pdata, psize, limit);
                 return (0);                  return (0);
         }          }
         if (paste_replace(&s->buffers, data->buffer, pdata, psize) != 0) {          if (paste_replace(&global_buffers, data->buffer, pdata, psize) != 0) {
                 ctx->error(ctx, "no buffer %d", data->buffer);                  ctx->error(ctx, "no buffer %d", data->buffer);
                 return (-1);                  return (-1);
         }          }
Line 140 
Line 125 
 void  void
 cmd_load_buffer_callback(struct client *c, void *data)  cmd_load_buffer_callback(struct client *c, void *data)
 {  {
         struct cmd_load_buffer_cdata    *cdata = data;          char    *pdata;
         struct session                  *s = cdata->session;          size_t   psize;
         char                            *pdata;          u_int    limit;
         size_t                           psize;          int     *buffer = data;
         u_int                            limit;  
   
         /*          /*
          * Event callback has already checked client is not dead and reduced           * Event callback has already checked client is not dead and reduced
Line 152 
Line 136 
          */           */
         c->flags |= CLIENT_EXIT;          c->flags |= CLIENT_EXIT;
   
         /* Does the target session still exist? */  
         if (!session_alive(s))  
                 goto out;  
   
         psize = EVBUFFER_LENGTH(c->stdin_event->input);          psize = EVBUFFER_LENGTH(c->stdin_event->input);
         if (psize == 0)          if (psize == 0)
                 goto out;                  return;
   
         pdata = malloc(psize + 1);          pdata = malloc(psize + 1);
         if (pdata == NULL)          if (pdata == NULL)
                 goto out;                  return;
         bufferevent_read(c->stdin_event, pdata, psize);          bufferevent_read(c->stdin_event, pdata, psize);
         pdata[psize] = '\0';          pdata[psize] = '\0';
   
         limit = options_get_number(&s->options, "buffer-limit");          limit = options_get_number(&global_options, "buffer-limit");
         if (cdata->buffer == -1) {          if (*buffer == -1)
                 paste_add(&s->buffers, pdata, psize, limit);                  paste_add(&global_buffers, pdata, psize, limit);
                 goto out;          else if (paste_replace(&global_buffers, *buffer, pdata, psize) != 0) {
         }  
         if (paste_replace(&s->buffers, cdata->buffer, pdata, psize) != 0) {  
                 /* No context so can't use server_client_msg_error. */                  /* No context so can't use server_client_msg_error. */
                 evbuffer_add_printf(                  evbuffer_add_printf(
                     c->stderr_event->output, "no buffer %d\n", cdata->buffer);                      c->stderr_event->output, "no buffer %d\n", *buffer);
                 bufferevent_enable(c->stderr_event, EV_WRITE);                  bufferevent_enable(c->stderr_event, EV_WRITE);
                 goto out;  
         }          }
   
 out:  
         cdata->session->references--;  
         xfree(cdata);  
 }  }

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15