version 1.6, 2009/11/13 19:53:29 |
version 1.7, 2010/06/28 22:10:42 |
|
|
struct session *s; |
struct session *s; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
mode_t mask; |
mode_t mask; |
FILE *f; |
FILE *f, *close_f; |
|
|
if ((s = cmd_find_session(ctx, data->target)) == NULL) |
if ((s = cmd_find_session(ctx, data->target)) == NULL) |
return (-1); |
return (-1); |
|
|
} |
} |
} |
} |
|
|
mask = umask(S_IRWXG | S_IRWXO); |
if (strcmp(data->arg, "-") == 0) { |
if (cmd_check_flag(data->chflags, 'a')) |
if (ctx->cmdclient == NULL) { |
f = fopen(data->arg, "ab"); |
ctx->error(ctx, "%s: can't write to stdout", data->arg); |
else |
return (-1); |
f = fopen(data->arg, "wb"); |
} |
umask(mask); |
f = ctx->cmdclient->stdout_file; |
if (f == NULL) { |
close_f = NULL; |
ctx->error(ctx, "%s: %s", data->arg, strerror(errno)); |
} else { |
return (-1); |
mask = umask(S_IRWXG | S_IRWXO); |
|
if (cmd_check_flag(data->chflags, 'a')) |
|
f = fopen(data->arg, "ab"); |
|
else |
|
f = fopen(data->arg, "wb"); |
|
umask(mask); |
|
if (f == NULL) { |
|
ctx->error(ctx, "%s: %s", data->arg, strerror(errno)); |
|
return (-1); |
|
} |
|
close_f = f; |
} |
} |
|
|
if (fwrite(pb->data, 1, pb->size, f) != pb->size) { |
if (fwrite(pb->data, 1, pb->size, f) != pb->size) { |
|
|
return (-1); |
return (-1); |
} |
} |
|
|
fclose(f); |
if (close_f != NULL) |
|
fclose(close_f); |
|
|
return (0); |
return (0); |
} |
} |