diff options
author | sef <sef@FreeBSD.org> | 2000-02-15 20:25:47 +0000 |
---|---|---|
committer | sef <sef@FreeBSD.org> | 2000-02-15 20:25:47 +0000 |
commit | 0446e158adf541fdd83218941979db2fa8677bbf (patch) | |
tree | 4114aa248f3adfb9365df5e72d9dfd4027ea7aba /usr.bin | |
parent | abe3cf9b8b7e218d932d09457862b0cfeae31416 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | usr.bin/truss/syscalls.c | 11 |
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; } |