usock: add usock_port() for convenient use of numeric ports

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>
This commit is contained in:
Jo-Philipp Wich 2014-09-22 18:15:58 +02:00 committed by Felix Fietkau
parent dffbc09baf
commit fa73496098
2 changed files with 14 additions and 0 deletions

13
usock.c
View file

@ -26,6 +26,7 @@
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h>
#include "usock.h" #include "usock.h"
@ -101,6 +102,18 @@ static int usock_inet(int type, const char *host, const char *service, int sockt
return sock; 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 usock(int type, const char *host, const char *service) {
int socktype = ((type & 0xff) == USOCK_TCP) ? SOCK_STREAM : SOCK_DGRAM; int socktype = ((type & 0xff) == USOCK_TCP) ? SOCK_STREAM : SOCK_DGRAM;
bool server = !!(type & USOCK_SERVER); bool server = !!(type & USOCK_SERVER);

View file

@ -30,6 +30,7 @@
#define USOCK_IPV4ONLY 0x4000 #define USOCK_IPV4ONLY 0x4000
#define USOCK_UNIX 0x8000 #define USOCK_UNIX 0x8000
const char *usock_port(int port);
int usock(int type, const char *host, const char *service); int usock(int type, const char *host, const char *service);
#endif /* USOCK_H_ */ #endif /* USOCK_H_ */