version 1.7, 2010/06/28 22:10:42 |
version 1.8, 2010/07/24 20:11:59 |
|
|
struct cmd_buffer_data *data = self->data; |
struct cmd_buffer_data *data = self->data; |
struct session *s; |
struct session *s; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
mode_t mask; |
mode_t mask; |
FILE *f, *close_f; |
FILE *f; |
|
|
if ((s = cmd_find_session(ctx, data->target)) == NULL) |
if ((s = cmd_find_session(ctx, data->target)) == NULL) |
return (-1); |
return (-1); |
|
|
ctx->error(ctx, "%s: can't write to stdout", data->arg); |
ctx->error(ctx, "%s: can't write to stdout", data->arg); |
return (-1); |
return (-1); |
} |
} |
f = ctx->cmdclient->stdout_file; |
bufferevent_write( |
close_f = NULL; |
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 (cmd_check_flag(data->chflags, 'a')) |
|
|
ctx->error(ctx, "%s: %s", data->arg, strerror(errno)); |
ctx->error(ctx, "%s: %s", data->arg, strerror(errno)); |
return (-1); |
return (-1); |
} |
} |
close_f = f; |
if (fwrite(pb->data, 1, pb->size, f) != pb->size) { |
|
ctx->error(ctx, "%s: fwrite error", data->arg); |
|
fclose(f); |
|
return (-1); |
|
} |
|
fclose(f); |
} |
} |
|
|
if (fwrite(pb->data, 1, pb->size, f) != pb->size) { |
|
ctx->error(ctx, "%s: fwrite error", data->arg); |
|
fclose(f); |
|
return (-1); |
|
} |
|
|
|
if (close_f != NULL) |
|
fclose(close_f); |
|
|
|
return (0); |
return (0); |
} |
} |