From 63ee4ecea3217fd9d62c1482b84fa458b5fe3eb7 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 27 Dec 2010 18:50:58 -0500 Subject: [PATCH] endpoint_name needs to be reentrant and stack-safe --- net.c | 6 ++---- net.h | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/net.c b/net.c index 90b532f..8a7ab6a 100644 --- a/net.c +++ b/net.c @@ -38,12 +38,10 @@ void get_addr_name(char *namebuf, size_t buflen, struct sockaddr_in const *sin) } } -char const *endpoint_name(struct sockaddr_in const *peername) { +void endpoint_name(struct sockaddr_in const *peername, cmsg_bytes_t result) { char name[256]; - static char result[256]; get_addr_name(name, sizeof(name), peername); - snprintf(result, sizeof(result), "%s:%d", name, ntohs(peername->sin_port)); - return result; + snprintf(result.bytes, result.len, "%s:%d", name, ntohs(peername->sin_port)); } static void accept_connection(int servfd, short what, void *arg) { diff --git a/net.h b/net.h index 351bf2f..b63307c 100644 --- a/net.h +++ b/net.h @@ -2,7 +2,7 @@ #define cmsg_net_h extern void get_addr_name(char *namebuf, size_t buflen, struct sockaddr_in const *sin); -extern char const *endpoint_name(struct sockaddr_in const *peername); +extern void endpoint_name(struct sockaddr_in const *peername, cmsg_bytes_t result); extern void start_net(int listen_port);