the little operating system we wrote eventually panic'd (overflowed
heap); standalone ufs.c implementation we've used leaks f_buf
everytime ufs_open fails
Index: ufs.c
===================================================================
RCS file: /cvs/src/sys/lib/libsa/ufs.c,v
retrieving revision 1.19
diff -u -r1.19 ufs.c
--- ufs.c 6 Jan 2008 11:17:18 -0000 1.19
+++ ufs.c 21 Aug 2010 19:24:12 -0000
@@ -527,6 +527,8 @@
if (buf)
free(buf, fs->fs_bsize);
if (rc) {
+ if (fp->f_buf)
+ free(fp->f_buf, fp->f_fs->fs_bsize);
free(fp->f_fs, SBSIZE);
free(fp, sizeof(struct file));
}