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. */
/*
@@ -271,17 +271,20 @@ char *from, *to;
int fromfd, tofd, r;
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;
if ((tofd = open(to, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, FCMASK))
< 0)
tofd = open(to, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, FCMASK);
if (tofd < 0) {
close(fromfd);
return -1;
buf = (char *) alloc((size_t) BIGBUF);
}
buf = (char *) alloc((unsigned) BIGBUF);
while ((r = read(fromfd, buf, BIGBUF)) > 0)
write(tofd, buf, r);
close(fromfd);
close(tofd);
free(buf);
free((genericptr_t) buf);
return 0; /* successful */
}