diff options
Diffstat (limited to 'libs/nixio/src/address.c')
-rw-r--r-- | libs/nixio/src/address.c | 59 |
1 files changed, 52 insertions, 7 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) { |