[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.28 and 1.29

version 1.28, 2014/04/24 09:14:43 version 1.29, 2014/05/13 07:34:35
Line 50 
Line 50 
         struct client   *c = cmdq->client;          struct client   *c = cmdq->client;
         struct session  *s;          struct session  *s;
         FILE            *f;          FILE            *f;
         const char      *path;          const char      *path, *bufname;
         char            *pdata, *new_pdata, *cause;          char            *pdata, *new_pdata, *cause;
         size_t           psize;          size_t           psize;
         u_int            limit;          int              ch, error, cwd, fd;
         int              ch, error, buffer, *buffer_ptr, cwd, fd;  
   
         if (!args_has(args, 'b'))          bufname = NULL;
                 buffer = -1;          if (args_has(args, 'b'))
         else {                  bufname = args_get(args, 'b');
                 buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);  
                 if (cause != NULL) {  
                         cmdq_error(cmdq, "buffer %s", cause);  
                         free(cause);  
                         return (CMD_RETURN_ERROR);  
                 }  
         }  
   
         path = args->argv[0];          path = args->argv[0];
         if (strcmp(path, "-") == 0) {          if (strcmp(path, "-") == 0) {
                 buffer_ptr = xmalloc(sizeof *buffer_ptr);  
                 *buffer_ptr = buffer;  
   
                 error = server_set_stdin_callback(c, cmd_load_buffer_callback,                  error = server_set_stdin_callback(c, cmd_load_buffer_callback,
                     buffer_ptr, &cause);                      (void*)bufname, &cause);
                 if (error != 0) {                  if (error != 0) {
                         cmdq_error(cmdq, "%s: %s", path, cause);                          cmdq_error(cmdq, "%s: %s", path, cause);
                         free(cause);                          free(cause);
Line 117 
Line 106 
   
         fclose(f);          fclose(f);
   
         limit = options_get_number(&global_options, "buffer-limit");          if (paste_set(pdata, psize, bufname, &cause) != 0) {
         if (buffer == -1) {                  cmdq_error(cmdq, "%s", cause);
                 paste_add(pdata, psize, limit);  
                 return (CMD_RETURN_NORMAL);  
         }  
         if (paste_replace(buffer, pdata, psize) != 0) {  
                 cmdq_error(cmdq, "no buffer %d", buffer);  
                 free(pdata);                  free(pdata);
                   free(cause);
                 return (CMD_RETURN_ERROR);                  return (CMD_RETURN_ERROR);
         }          }
   
Line 140 
Line 125 
 void  void
 cmd_load_buffer_callback(struct client *c, int closed, void *data)  cmd_load_buffer_callback(struct client *c, int closed, void *data)
 {  {
         int     *buffer = data;          const char      *bufname = data;
         char    *pdata;          char            *pdata, *cause;
         size_t   psize;          size_t           psize;
         u_int    limit;  
   
         if (!closed)          if (!closed)
                 return;                  return;
Line 154 
Line 138 
                 return;                  return;
   
         psize = EVBUFFER_LENGTH(c->stdin_data);          psize = EVBUFFER_LENGTH(c->stdin_data);
         if (psize == 0 || (pdata = malloc(psize + 1)) == NULL) {          if (psize == 0 || (pdata = malloc(psize + 1)) == NULL)
                 free(data);  
                 goto out;                  goto out;
         }  
         memcpy(pdata, EVBUFFER_DATA(c->stdin_data), psize);          memcpy(pdata, EVBUFFER_DATA(c->stdin_data), psize);
         pdata[psize] = '\0';          pdata[psize] = '\0';
         evbuffer_drain(c->stdin_data, psize);          evbuffer_drain(c->stdin_data, psize);
   
         limit = options_get_number(&global_options, "buffer-limit");          if (paste_set(pdata, psize, bufname, &cause) != 0) {
         if (*buffer == -1)  
                 paste_add(pdata, psize, limit);  
         else if (paste_replace(*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(c->stderr_data, "no buffer %d\n", *buffer);                  evbuffer_add_printf(c->stderr_data, "%s", cause);
                 server_push_stderr(c);                  server_push_stderr(c);
                 free(pdata);                  free(pdata);
                   free(cause);
         }          }
   
         free(data);  
   
 out:  out:
         cmdq_continue(c->cmdq);          cmdq_continue(c->cmdq);

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.29