diff options
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/truncate.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/coreutils/truncate.c b/coreutils/truncate.c index 0e36daba3..e5fa656c8 100644 --- a/coreutils/truncate.c +++ b/coreutils/truncate.c | |||
| @@ -64,12 +64,22 @@ int truncate_main(int argc UNUSED_PARAM, char **argv) | |||
| 64 | 64 | ||
| 65 | argv += optind; | 65 | argv += optind; |
| 66 | while (*argv) { | 66 | while (*argv) { |
| 67 | int fd = xopen(*argv, flags); | 67 | int fd = open(*argv, flags); |
| 68 | if (ftruncate(fd, size) == -1) { | 68 | if (fd < 0) { |
| 69 | bb_perror_msg("%s: ftruncate", *argv); | 69 | if (errno != ENOENT || !(opts & OPT_NOCREATE)) { |
| 70 | ret = EXIT_FAILURE; | 70 | bb_perror_msg("%s: open", *argv); |
| 71 | ret = EXIT_FAILURE; | ||
| 72 | } | ||
| 73 | /* else: ENOENT && OPT_NOCREATE: | ||
| 74 | * do not report error, exitcode is also 0. | ||
| 75 | */ | ||
| 76 | } else { | ||
| 77 | if (ftruncate(fd, size) == -1) { | ||
| 78 | bb_perror_msg("%s: truncate", *argv); | ||
| 79 | ret = EXIT_FAILURE; | ||
| 80 | } | ||
| 81 | xclose(fd); | ||
| 71 | } | 82 | } |
| 72 | xclose(fd); | ||
| 73 | ++argv; | 83 | ++argv; |
| 74 | } | 84 | } |
| 75 | 85 | ||
