usock: add usock_port() for convenient use of numeric ports
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 22 Sep 2014 16:15:58 +0000 (18:15 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 23 Sep 2014 10:01:00 +0000 (12:01 +0200)
Add a new helper function usock_port() which converts the given numeric port number
into a string using a private static buffer. This way a calling application can
conveniently use numeric port arguments without having to convert them before:

  int fd = usock(USOCK_UDP, "example.org", usock_port(80));

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
usock.c
usock.h

diff --git a/usock.c b/usock.c
index 04ed4ee57fbd635a2f488e8bffdeb3139d099314..64eab9e12cb3f3edcb3a5584b4c586ea0da551a8 100644 (file)
--- a/usock.c
+++ b/usock.c
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <string.h>
 #include <stdbool.h>
+#include <stdio.h>
 
 #include "usock.h"
 
@@ -101,6 +102,18 @@ static int usock_inet(int type, const char *host, const char *service, int sockt
        return sock;
 }
 
+const char *usock_port(int port)
+{
+       static char buffer[sizeof("65535\0")];
+
+       if (port < 0 || port > 65535)
+               return NULL;
+
+       snprintf(buffer, sizeof(buffer), "%u", port);
+
+       return buffer;
+}
+
 int usock(int type, const char *host, const char *service) {
        int socktype = ((type & 0xff) == USOCK_TCP) ? SOCK_STREAM : SOCK_DGRAM;
        bool server = !!(type & USOCK_SERVER);
diff --git a/usock.h b/usock.h
index 5df4362cfe63f6e23cb8859efde4337bee0a8a90..8345581be5f0ffcbf715074f6aa319519e955bad 100644 (file)
--- a/usock.h
+++ b/usock.h
@@ -30,6 +30,7 @@
 #define USOCK_IPV4ONLY         0x4000
 #define USOCK_UNIX             0x8000
 
+const char *usock_port(int port);
 int usock(int type, const char *host, const char *service);
 
 #endif /* USOCK_H_ */