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

Diff for /src/usr.bin/tmux/cmd-list-buffers.c between version 1.3 and 1.4

version 1.3, 2009/07/26 12:58:44 version 1.4, 2009/08/18 12:26:37
Line 19 
Line 19 
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <string.h>  #include <string.h>
   #include <vis.h>
   
 #include "tmux.h"  #include "tmux.h"
   
Line 46 
Line 47 
         struct session          *s;          struct session          *s;
         struct paste_buffer     *pb;          struct paste_buffer     *pb;
         u_int                    idx;          u_int                    idx;
         char                    *tmp;          char                     tmp[51 * 4 + 1];
         size_t                   size, in, out;          size_t                   size, len;
   
         if ((s = cmd_find_session(ctx, data->target)) == NULL)          if ((s = cmd_find_session(ctx, data->target)) == NULL)
                 return (-1);                  return (-1);
   
         if (s->sx > 35) {       /* leave three for ... */  
                 size = s->sx - 32;  
                 tmp = xmalloc(size + 1);  
         } else {  
                 size = 0;  
                 tmp = NULL;  
         }  
   
         idx = 0;          idx = 0;
         while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {          while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
                 if (tmp != NULL) {                  size = strlen(pb->data);
                         in = out = 0;  
                         while (out < size && pb->data[in] != '\0') {  
                                 if (pb->data[in] > 31 && pb->data[in] != 127)  
                                         tmp[out++] = pb->data[in];  
                                 in++;  
                         }  
                         tmp[out] = '\0';  
                         if (out == size) {  
                                 tmp[out - 1] = '.';  
                                 tmp[out - 2] = '.';  
                                 tmp[out - 3] = '.';  
                         }  
   
                         ctx->print(ctx, "%d: %zu bytes: \"%s\"",                  /* Translate the first 50 characters. */
                             idx - 1, strlen(pb->data), tmp);                  len = size;
                 } else                  if (len > 50)
                         ctx->print(ctx, "%d: %zu bytes", idx, strlen(pb->data));                          len = 50;
         }                  strvisx(tmp, pb->data, len, VIS_OCTAL|VIS_TAB|VIS_NL);
   
         if (tmp != NULL)                  /*
                 xfree(tmp);                   * If the first 50 characterswere encoded as a longer string,
                    * or there is definitely more data, add "...".
                    */
                   if (size > 50 || strlen(tmp) > 50) {
                           tmp[50 - 3] = '\0';
                           strlcat(tmp, "...", sizeof tmp);
                   }
   
                   ctx->print(ctx, "%u: %zu bytes: \"%s\"", idx - 1, size, tmp);
           }
   
         return (0);          return (0);
 }  }

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