diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2017-05-13 19:13:37 +0200 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2017-05-13 19:13:37 +0200 |
commit | 8393d49145395b3a369a71de0d673df1be7c349d (patch) | |
tree | b12cab874f571fddd4b05f8f29ea4122a321e66d | |
parent | 820179eeefcee1c74c7a39bb8a64555acc42dc1b (diff) | |
download | psutil-8393d49145395b3a369a71de0d673df1be7c349d.tar.gz |
#930 / netbsd / connections: free() kinfo_pcb struct
-rw-r--r-- | psutil/arch/bsd/netbsd_socks.c | 117 |
1 files changed, 62 insertions, 55 deletions
diff --git a/psutil/arch/bsd/netbsd_socks.c b/psutil/arch/bsd/netbsd_socks.c index bd260ad3..9b84a91f 100644 --- a/psutil/arch/bsd/netbsd_socks.c +++ b/psutil/arch/bsd/netbsd_socks.c @@ -66,7 +66,7 @@ static void psutil_kiflist_clear(void); static void psutil_kpcblist_init(void); static void psutil_kpcblist_clear(void); static int psutil_get_files(void); -static int psutil_get_sockets(const char *name); +static int psutil_get_sockets(const char *name, struct kinfo_pcb *pcb); static int psutil_get_info(int aff); @@ -166,10 +166,9 @@ psutil_get_files(void) { // Get open sockets. static int -psutil_get_sockets(const char *name) { +psutil_get_sockets(const char *name, struct kinfo_pcb *pcb) { size_t namelen; int mib[8]; - struct kinfo_pcb *pcb; size_t len; size_t j; @@ -226,84 +225,92 @@ psutil_get_sockets(const char *name) { // Collect open file and connections. static int psutil_get_info(int aff) { + struct kinfo_pcb *pcb = NULL; + switch (aff) { case INET: - if (psutil_get_sockets("net.inet.tcp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet.udp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.tcp6.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.udp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.tcp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet.udp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.tcp6.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.udp6.pcblist", pcb) != 0) + goto error; break; case INET4: - if (psutil_get_sockets("net.inet.tcp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet.udp.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.tcp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet.udp.pcblist", pcb) != 0) + goto error; break; case INET6: - if (psutil_get_sockets("net.inet6.tcp6.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.udp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet6.tcp6.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.udp6.pcblist", pcb) != 0) + goto error; break; case TCP: - if (psutil_get_sockets("net.inet.tcp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.tcp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.tcp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.tcp6.pcblist", pcb) != 0) + goto error; break; case TCP4: - if (psutil_get_sockets("net.inet.tcp.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.tcp.pcblist", pcb) != 0) + goto error; break; case TCP6: - if (psutil_get_sockets("net.inet6.tcp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet6.tcp6.pcblist", pcb) != 0) + goto error; break; case UDP: - if (psutil_get_sockets("net.inet.udp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.udp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.udp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.udp6.pcblist", pcb) != 0) + goto error; break; case UDP4: - if (psutil_get_sockets("net.inet.udp.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.udp.pcblist", pcb) != 0) + goto error; break; case UDP6: - if (psutil_get_sockets("net.inet6.udp6.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet6.udp6.pcblist", pcb) != 0) + goto error; break; case UNIX: - if (psutil_get_sockets("net.local.stream.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.local.seqpacket.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.local.dgram.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.local.stream.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.local.seqpacket.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.local.dgram.pcblist", pcb) != 0) + goto error; break; case ALL: - if (psutil_get_sockets("net.inet.tcp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet.udp.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.tcp6.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.inet6.udp6.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.local.stream.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.local.seqpacket.pcblist") != 0) - return -1; - if (psutil_get_sockets("net.local.dgram.pcblist") != 0) - return -1; + if (psutil_get_sockets("net.inet.tcp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet.udp.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.tcp6.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.inet6.udp6.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.local.stream.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.local.seqpacket.pcblist", pcb) != 0) + goto error; + if (psutil_get_sockets("net.local.dgram.pcblist", pcb) != 0) + goto error; break; } + free(pcb); return 0; + +error: + if (pcb != NULL) + free(pcb); + return -1; } |