diff options
-rw-r--r-- | libs/nixio/src/address.c | 59 | ||||
-rw-r--r-- | libs/nixio/src/protoent.c | 103 |
2 files changed, 110 insertions, 52 deletions
diff --git a/libs/nixio/src/address.c b/libs/nixio/src/address.c index 98bba01d0f..eff05e3a0d 100644 --- a/libs/nixio/src/address.c +++ b/libs/nixio/src/address.c @@ -493,67 +493,22 @@ 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}, - {"getprotobyname", nixio_getprotobyname}, - {"getprotobynumber", nixio_getprotobynumber}, - {NULL, NULL} + {"getaddrinfo", nixio_getaddrinfo}, + {"getnameinfo", nixio_getnameinfo}, + {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/protoent.c b/libs/nixio/src/protoent.c new file mode 100644 index 0000000000..bda68a5845 --- /dev/null +++ b/libs/nixio/src/protoent.c @@ -0,0 +1,103 @@ +/* + * nixio - Linux I/O library for lua + * + * Copyright (C) 2011 Jo-Philipp Wich <jow@openwrt.org> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "nixio.h" + +#ifndef __WINNT__ +#include <netdb.h> +#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); +} + +/** + * getproto(name_or_proto) + */ +static int nixio_getproto(lua_State *L) { + int i = 1; + struct protoent *res; + if (lua_isnumber(L, 1)) { + return nixio_getprotobynumber(L); + } else if (lua_isstring(L, 1)) { + return nixio_getprotobyname(L); + } else if (lua_isnoneornil(L, 1)) { + setprotoent(1); + lua_newtable(L); + while ((res = getprotoent()) != NULL) { + nixio__pushprotoent(L, res); + lua_rawseti(L, -2, i++); + } + endprotoent(); + return 1; + } else { + return luaL_argerror(L, 1, "supported values: <protoname>, <protonumber>"); + } +} + +/* module table */ +static const luaL_reg R[] = { + {"getprotobyname", nixio_getprotobyname}, + {"getprotobynumber", nixio_getprotobynumber}, + {"getproto", nixio_getproto}, + {NULL, NULL} +}; + +void nixio_open_protoent(lua_State *L) { + luaL_register(L, NULL, R); +} |