summaryrefslogtreecommitdiffstats
path: root/usr.bin/truss
diff options
context:
space:
mode:
authorsef <sef@FreeBSD.org>2000-02-15 20:25:47 +0000
committersef <sef@FreeBSD.org>2000-02-15 20:25:47 +0000
commit0446e158adf541fdd83218941979db2fa8677bbf (patch)
tree4114aa248f3adfb9365df5e72d9dfd4027ea7aba /usr.bin/truss
parentabe3cf9b8b7e218d932d09457862b0cfeae31416 (diff)
downloadFreeBSD-src-0446e158adf541fdd83218941979db2fa8677bbf.zip
FreeBSD-src-0446e158adf541fdd83218941979db2fa8677bbf.tar.gz
Fix a leak. (Thanks Bruce, this was a bonehead mistake on my part :).)
Submitted by: Bruce Evans
Diffstat (limited to 'usr.bin/truss')
-rw-r--r--usr.bin/truss/syscalls.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c
index bdd087b..1b98cba 100644
--- a/usr.bin/truss/syscalls.c
+++ b/usr.bin/truss/syscalls.c
@@ -115,10 +115,12 @@ get_syscall(const char *name) {
char *
get_string(int procfd, void *offset, int max) {
char *buf;
- int size, len, c;
+ int size, len, c, fd;
FILE *p;
- if ((p = fdopen(procfd, "r")) == NULL)
+ if ((fd = dup(procfd)) == -1)
+ err(1, "dup");
+ if ((p = fdopen(fd, "r")) == NULL)
err(1, "fdopen");
buf = malloc( size = (max ? max : 64 ) );
len = 0;
@@ -130,15 +132,18 @@ get_string(int procfd, void *offset, int max) {
break;
}
if (len == size) {
- char *tmp = buf;
+ char *tmp;
tmp = realloc(buf, size+64);
if (tmp == NULL) {
buf[len] = 0;
+ fclose(p);
return buf;
}
size += 64;
+ buf = tmp;
}
}
+ fclose(p);
return buf;
}
OpenPOWER on IntegriCloud