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

Diff for /src/usr.bin/tmux/cmd-save-buffer.c between version 1.9 and 1.10

version 1.9, 2010/12/30 23:16:18 version 1.10, 2011/01/04 00:42:47
Line 32 
Line 32 
   
 const struct cmd_entry cmd_save_buffer_entry = {  const struct cmd_entry cmd_save_buffer_entry = {
         "save-buffer", "saveb",          "save-buffer", "saveb",
         "[-a] " CMD_BUFFER_USAGE " path",          "ab:", 1, 1,
         CMD_ARG1, "a",          "[-a] " CMD_BUFFER_USAGE,
         cmd_buffer_init,          0,
         cmd_buffer_parse,          NULL,
         cmd_save_buffer_exec,          NULL,
         cmd_buffer_free,          cmd_save_buffer_exec
         cmd_buffer_print  
 };  };
   
 int  int
 cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)  cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {  {
         struct cmd_buffer_data  *data = self->data;          struct args             *args = self->args;
           struct client           *c = ctx->cmdclient;
         struct paste_buffer     *pb;          struct paste_buffer     *pb;
           const char              *path;
           char                    *cause;
           int                      buffer;
         mode_t                   mask;          mode_t                   mask;
         FILE                    *f;          FILE                    *f;
   
         if (data->buffer == -1) {          if (!args_has(args, 'b')) {
                 if ((pb = paste_get_top(&global_buffers)) == NULL) {                  if ((pb = paste_get_top(&global_buffers)) == NULL) {
                         ctx->error(ctx, "no buffers");                          ctx->error(ctx, "no buffers");
                         return (-1);                          return (-1);
                 }                  }
         } else {          } else {
                 pb = paste_get_index(&global_buffers, data->buffer);                  buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
                   if (cause != NULL) {
                           ctx->error(ctx, "buffer %s", cause);
                           xfree(cause);
                           return (-1);
                   }
   
                   pb = paste_get_index(&global_buffers, buffer);
                 if (pb == NULL) {                  if (pb == NULL) {
                         ctx->error(ctx, "no buffer %d", data->buffer);                          ctx->error(ctx, "no buffer %d", buffer);
                         return (-1);                          return (-1);
                 }                  }
         }          }
   
         if (strcmp(data->arg, "-") == 0) {          path = args->argv[0];
                 if (ctx->cmdclient == NULL) {          if (strcmp(path, "-") == 0) {
                         ctx->error(ctx, "%s: can't write to stdout", data->arg);                  if (c == NULL) {
                           ctx->error(ctx, "%s: can't write to stdout", path);
                         return (-1);                          return (-1);
                 }                  }
                 bufferevent_write(                  bufferevent_write(c->stdout_event, pb->data, pb->size);
                     ctx->cmdclient->stdout_event, pb->data, pb->size);  
         } else {          } else {
                 mask = umask(S_IRWXG | S_IRWXO);                  mask = umask(S_IRWXG | S_IRWXO);
                 if (cmd_check_flag(data->chflags, 'a'))                  if (args_has(self->args, 'a'))
                         f = fopen(data->arg, "ab");                          f = fopen(path, "ab");
                 else                  else
                         f = fopen(data->arg, "wb");                          f = fopen(path, "wb");
                 umask(mask);                  umask(mask);
                 if (f == NULL) {                  if (f == NULL) {
                         ctx->error(ctx, "%s: %s", data->arg, strerror(errno));                          ctx->error(ctx, "%s: %s", path, strerror(errno));
                         return (-1);                          return (-1);
                 }                  }
                 if (fwrite(pb->data, 1, pb->size, f) != pb->size) {                  if (fwrite(pb->data, 1, pb->size, f) != pb->size) {
                         ctx->error(ctx, "%s: fwrite error", data->arg);                          ctx->error(ctx, "%s: fwrite error", path);
                         fclose(f);                          fclose(f);
                         return (-1);                          return (-1);
                 }                  }

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