[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.8 and 1.9

version 1.8, 2009/11/13 19:53:29 version 1.9, 2009/11/26 22:28:24
Line 50 
Line 50 
         struct session          *s;          struct session          *s;
         struct stat              sb;          struct stat              sb;
         FILE                    *f;          FILE                    *f;
         u_char                  *buf;          char                    *pdata = NULL;
           size_t                   psize;
         u_int                    limit;          u_int                    limit;
   
         if ((s = cmd_find_session(ctx, data->target)) == NULL)          if ((s = cmd_find_session(ctx, data->target)) == NULL)
Line 63 
Line 64 
   
         if (fstat(fileno(f), &sb) < 0) {          if (fstat(fileno(f), &sb) < 0) {
                 ctx->error(ctx, "%s: %s", data->arg, strerror(errno));                  ctx->error(ctx, "%s: %s", data->arg, strerror(errno));
                 fclose(f);                  goto error;
                 return (-1);  
         }          }
           if (sb.st_size > SIZE_MAX) {
                   ctx->error(ctx, "%s: file too large", data->arg);
                   goto error;
           }
           psize = (size_t) sb.st_size;
   
         /*          /*
          * We don't want to die due to memory exhaustion, hence xmalloc can't           * We don't want to die due to memory exhaustion, hence xmalloc can't
          * be used here.           * be used here.
          */           */
         if ((buf = malloc(sb.st_size + 1)) == NULL) {          if ((pdata = malloc(psize)) == NULL) {
                 ctx->error(ctx, "malloc error: %s", strerror(errno));                  ctx->error(ctx, "malloc error: %s", strerror(errno));
                 fclose(f);                  goto error;
                 return (-1);  
         }          }
   
         if (fread(buf, 1, sb.st_size, f) != (size_t) sb.st_size) {          if (fread(pdata, 1, psize, f) != psize) {
                 ctx->error(ctx, "%s: fread error", data->arg);                  ctx->error(ctx, "%s: fread error", data->arg);
                 xfree(buf);                  goto error;
                 fclose(f);  
                 return (-1);  
         }          }
   
         fclose(f);          fclose(f);
   
         limit = options_get_number(&s->options, "buffer-limit");          limit = options_get_number(&s->options, "buffer-limit");
         if (data->buffer == -1) {          if (data->buffer == -1) {
                 paste_add(&s->buffers, buf, sb.st_size, limit);                  paste_add(&s->buffers, pdata, psize, limit);
                 return (0);                  return (0);
         }          }
         if (paste_replace(&s->buffers, data->buffer, buf, sb.st_size) != 0) {          if (paste_replace(&s->buffers, data->buffer, pdata, psize) != 0) {
                 ctx->error(ctx, "no buffer %d", data->buffer);                  ctx->error(ctx, "no buffer %d", data->buffer);
                 xfree(buf);                  goto error;
                 return (-1);  
         }          }
   
         return (0);          return (0);
   
   error:
           if (pdata != NULL)
                   xfree(pdata);
           fclose(f);
           return (-1);
 }  }

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