diff options
author | maximilian attems <max@stro.at> | 2010-11-10 16:04:59 +0100 |
---|---|---|
committer | maximilian attems <max@stro.at> | 2010-11-10 16:06:37 +0100 |
commit | 8e5fba113bc02b5881033ee789d5149b4886ea35 (patch) | |
tree | c58645d432f2c753b8873276d845f073c059a078 | |
parent | 90f6eb895729f5eb28f972ac1a4aa5e4fc8db0f7 (diff) | |
download | klibc-8e5fba113bc02b5881033ee789d5149b4886ea35.tar.gz |
[klibc] utils: dd close fds on error pathes
fix several ressource leakages.
Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r-- | usr/utils/dd.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/usr/utils/dd.c b/usr/utils/dd.c index 562e2cf154d75..706b8c3ffbf30 100644 --- a/usr/utils/dd.c +++ b/usr/utils/dd.c @@ -486,6 +486,7 @@ int main(int argc, char *argv[]) wr_fd = open(OPT_OF->str, flags, 0666); if (wr_fd == -1) { perror("open output file"); + close(rd_fd); return 1; } } @@ -493,14 +494,20 @@ int main(int argc, char *argv[]) /* * Skip obs-sized blocks of output file. */ - if (OPT_SEEK->str && skip_blocks(wr_fd, out_buf, seek, obs)) + if (OPT_SEEK->str && skip_blocks(wr_fd, out_buf, seek, obs)) { + close(rd_fd); + close(wr_fd); return 1; + } /* * Skip ibs-sized blocks of input file. */ - if (OPT_SKIP->str && skip_blocks(rd_fd, in_buf, skip, ibs)) + if (OPT_SKIP->str && skip_blocks(rd_fd, in_buf, skip, ibs)) { + close(rd_fd); + close(wr_fd); return 1; + } memset(&stats, 0, sizeof(stats)); |