[Midnightbsd-cvs] src: ldconfig.c: Don't leak memory #2
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Apr 11 00:40:31 EDT 2008
Log Message:
-----------
Don't leak memory #2
Modified Files:
--------------
src/sbin/ldconfig:
ldconfig.c (r1.2 -> r1.3)
-------------- next part --------------
Index: ldconfig.c
===================================================================
RCS file: /home/cvs/src/sbin/ldconfig/ldconfig.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sbin/ldconfig/ldconfig.c -L sbin/ldconfig/ldconfig.c -u -r1.2 -r1.3
--- sbin/ldconfig/ldconfig.c
+++ sbin/ldconfig/ldconfig.c
@@ -451,7 +451,7 @@
}
if (j == hdr.hh_nbucket) {
warnx("bummer!");
- return -1;
+ goto out;
}
while (bp->hi_next != -1)
bp = &blist[bp->hi_next];
@@ -486,43 +486,48 @@
umask(0); /* Create with exact permissions */
if ((fd = mkstemp(tmpfilename)) == -1) {
warn("%s", tmpfilename);
- return -1;
+ goto out;
}
fchmod(fd, 0444);
if (write(fd, &hdr, sizeof(struct hints_header)) !=
sizeof(struct hints_header)) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
if (write(fd, blist, hdr.hh_nbucket * sizeof(*blist)) !=
(ssize_t)(hdr.hh_nbucket * sizeof(*blist))) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
if (write(fd, strtab, strtab_sz) != strtab_sz) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
if (close(fd) != 0) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
/* Install it */
if (unlink(hints_file) != 0 && errno != ENOENT) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
if (rename(tmpfilename, hints_file) != 0) {
warn("%s", hints_file);
- return -1;
+ goto out;
}
free(blist);
free(strtab);
return 0;
+
+out:
+ free(blist);
+ free(strtab);
+ return -1;
}
static int
More information about the Midnightbsd-cvs
mailing list