aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormaximilian attems <max@stro.at>2010-11-10 16:04:59 +0100
committermaximilian attems <max@stro.at>2010-11-10 16:06:37 +0100
commit8e5fba113bc02b5881033ee789d5149b4886ea35 (patch)
treec58645d432f2c753b8873276d845f073c059a078
parent90f6eb895729f5eb28f972ac1a4aa5e4fc8db0f7 (diff)
downloadklibc-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.c11
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));