fix part of #H5778 - file descriptor leaks

Handle the part of #H5778 in sys/atari/tos.c.

The part in util/recover.c has already been fixed; the part in
src/files.c still needs to be fixed.
This commit is contained in:
PatR
2017-08-05 17:29:24 -07:00
parent 4d7d63814a
commit 0d7101cd29

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 tos.c $NHDT-Date: 1432512796 2015/05/25 00:13:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */ /* NetHack 3.6 tos.c $NHDT-Date: 1501979358 2017/08/06 00:29:18 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.8 $ */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
/* /*
@@ -271,17 +271,20 @@ char *from, *to;
int fromfd, tofd, r; int fromfd, tofd, r;
char *buf; char *buf;
if ((fromfd = open(from, O_RDONLY | O_BINARY, 0)) < 0) fromfd = open(from, O_RDONLY | O_BINARY, 0);
if (fromfd < 0)
return -1; return -1;
if ((tofd = open(to, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, FCMASK)) tofd = open(to, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, FCMASK);
< 0) if (tofd < 0) {
close(fromfd);
return -1; return -1;
buf = (char *) alloc((size_t) BIGBUF); }
buf = (char *) alloc((unsigned) BIGBUF);
while ((r = read(fromfd, buf, BIGBUF)) > 0) while ((r = read(fromfd, buf, BIGBUF)) > 0)
write(tofd, buf, r); write(tofd, buf, r);
close(fromfd); close(fromfd);
close(tofd); close(tofd);
free(buf); free((genericptr_t) buf);
return 0; /* successful */ return 0; /* successful */
} }