diff options
Diffstat (limited to 'libs/nixio/src')
-rw-r--r-- | libs/nixio/src/address.c | 59 | ||||
-rw-r--r-- | libs/nixio/src/nixio.c | 3 | ||||
-rw-r--r-- | libs/nixio/src/nixio.h | 1 |
3 files changed, 55 insertions, 8 deletions
diff --git a/libs/nixio/src/address.c b/libs/nixio/src/address.c index eff05e3a0d..98bba01d0f 100644 --- a/libs/nixio/src/address.c +++ b/libs/nixio/src/address.c @@ -493,22 +493,67 @@ static int nixio_getifaddrs(lua_State *L) { } #endif +/** + * protoent conversion helper + */ +static int nixio__pushprotoent(lua_State *L, struct protoent *e) { + int i; + if (e) { + lua_newtable(L); + + lua_pushstring(L, e->p_name); + lua_setfield(L, -2, "name"); + + lua_pushnumber(L, e->p_proto); + lua_setfield(L, -2, "proto"); + + lua_newtable(L); + for (i = 0; e->p_aliases[i]; i++) { + lua_pushstring(L, e->p_aliases[i]); + lua_rawseti(L, -2, i+1); + } + lua_setfield(L, -2, "aliases"); + return 1; + } else { + return 0; + } +} + +/** + * getprotobyname(name) + */ +static int nixio_getprotobyname(lua_State *L) { + const char *name = luaL_checkstring(L, 1); + struct protoent *res = getprotobyname(name); + return nixio__pushprotoent(L, res); +} + +/** + * getprotobynumber(proto) + */ +static int nixio_getprotobynumber(lua_State *L) { + int proto = luaL_checkinteger(L, 1); + struct protoent *res = getprotobynumber(proto); + return nixio__pushprotoent(L, res); +} /* module table */ static const luaL_reg R[] = { #if defined(__linux__) || defined(BSD) - {"getifaddrs", nixio_getifaddrs}, + {"getifaddrs", nixio_getifaddrs}, #endif - {"getaddrinfo", nixio_getaddrinfo}, - {"getnameinfo", nixio_getnameinfo}, - {NULL, NULL} + {"getaddrinfo", nixio_getaddrinfo}, + {"getnameinfo", nixio_getnameinfo}, + {"getprotobyname", nixio_getprotobyname}, + {"getprotobynumber", nixio_getprotobynumber}, + {NULL, NULL} }; /* object table */ static const luaL_reg M[] = { - {"getsockname", nixio_sock_getsockname}, - {"getpeername", nixio_sock_getpeername}, - {NULL, NULL} + {"getsockname", nixio_sock_getsockname}, + {"getpeername", nixio_sock_getpeername}, + {NULL, NULL} }; void nixio_open_address(lua_State *L) { diff --git a/libs/nixio/src/nixio.c b/libs/nixio/src/nixio.c index 70a77b4c9b..ae81c6f964 100644 --- a/libs/nixio/src/nixio.c +++ b/libs/nixio/src/nixio.c @@ -22,7 +22,7 @@ #include <errno.h> #include <signal.h> -#define VERSION 0.3 +#define VERSION 0.4 /* pushes nil, error number and errstring on the stack */ @@ -133,6 +133,7 @@ NIXIO_API int luaopen_nixio(lua_State *L) { nixio_open_sockopt(L); nixio_open_bind(L); nixio_open_address(L); + nixio_open_protoent(L); nixio_open_poll(L); nixio_open_io(L); nixio_open_splice(L); diff --git a/libs/nixio/src/nixio.h b/libs/nixio/src/nixio.h index 2be197f133..8802e92043 100644 --- a/libs/nixio/src/nixio.h +++ b/libs/nixio/src/nixio.h @@ -111,6 +111,7 @@ void nixio_open_socket(lua_State *L); void nixio_open_sockopt(lua_State *L); void nixio_open_bind(lua_State *L); void nixio_open_address(lua_State *L); +void nixio_open_protoent(lua_State *L); void nixio_open_poll(lua_State *L); void nixio_open_io(lua_State *L); void nixio_open_splice(lua_State *L); |