version 1.16, 2015/04/02 12:21:18 |
version 1.17, 2015/04/02 12:48:28 |
|
|
{ |
{ |
FILE *file; |
FILE *file; |
|
|
if (strcmp(fn, "-") == 0) { |
if (strcmp(fn, "-") == 0) |
return (mode && mode[0] == 'r') ? stdin : stdout; |
return (mode[0] == 'r') ? stdin : stdout; |
} else { |
|
mode_t orig_file_mask = 0; |
|
int is_tmp = file_is_tmp(fn); |
|
|
|
if (is_tmp && (mode[0] == 'w')) |
if (file_is_tmp(fn) && (compress_program != NULL)) { |
orig_file_mask = umask(S_IWGRP | S_IWOTH | |
char *cmd; |
S_IRGRP | S_IROTH); |
|
|
|
if (is_tmp && (compress_program != NULL)) { |
fflush(stdout); |
char *cmd; |
|
|
|
fflush(stdout); |
if (mode[0] == 'r') |
|
sort_asprintf(&cmd, "%s -d < %s", |
|
compress_program, fn); |
|
else if (mode[0] == 'w') |
|
sort_asprintf(&cmd, "%s > %s", |
|
compress_program, fn); |
|
else |
|
err(2, "invalid file mode"); |
|
|
if (mode[0] == 'r') |
if ((file = popen(cmd, mode)) == NULL) |
sort_asprintf(&cmd, "%s -d < %s", |
err(2, "%s", compress_program); |
compress_program, fn); |
|
else if (mode[0] == 'w') |
|
sort_asprintf(&cmd, "%s > %s", |
|
compress_program, fn); |
|
else |
|
err(2, "Wrong file mode"); |
|
|
|
if ((file = popen(cmd, mode)) == NULL) |
sort_free(cmd); |
err(2, NULL); |
|
|
|
sort_free(cmd); |
} else if ((file = fopen(fn, mode)) == NULL) |
|
err(2, "%s", fn); |
} else if ((file = fopen(fn, mode)) == NULL) |
|
err(2, "%s", fn); |
|
|
|
if (is_tmp && (mode[0] == 'w')) |
|
umask(orig_file_mask); |
|
} |
|
|
|
return file; |
return file; |
} |
} |