X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fnixio%2Fsrc%2Fnixio.c;h=457bbd1f25b2ac2f8cb3fee8221a42c219ada70e;hp=383fc0af932bb055651978b73c51c27d7cf19126;hb=a2b916ab736802050b19562b7c163e3f3bb1566f;hpb=7196b2cd848577f640d9268a0a34ab3ad8706c26 diff --git a/libs/nixio/src/nixio.c b/libs/nixio/src/nixio.c index 383fc0af9..457bbd1f2 100644 --- a/libs/nixio/src/nixio.c +++ b/libs/nixio/src/nixio.c @@ -20,13 +20,14 @@ #include #include #include +#include -#define VERSION 0.1 +#define VERSION 0.2 /* pushes nil, error number and errstring on the stack */ int nixio__perror(lua_State *L) { - if (errno == EAGAIN) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { lua_pushboolean(L, 0); } else { lua_pushnil(L); @@ -53,12 +54,6 @@ nixio_sock* nixio__checksock(lua_State *L) { return sock; } -FILE* nixio__checkfile(lua_State *L) { - FILE **fpp = (FILE**)luaL_checkudata(L, 1, NIXIO_FILE_META); - luaL_argcheck(L, *fpp, 1, "invalid file object"); - return *fpp; -} - /* read fd from nixio_sock object */ int nixio__checksockfd(lua_State *L) { return nixio__checksock(L)->fd; @@ -80,7 +75,9 @@ int nixio__tofd(lua_State *L, int ud) { luaL_getmetatable(L, LUA_FILEHANDLE); if (lua_rawequal(L, -3, -4)) { fd = ((nixio_sock*)udata)->fd; - } else if (lua_rawequal(L, -2, -4) || lua_rawequal(L, -1, -4)) { + } else if (lua_rawequal(L, -2, -4)) { + fd = *((int*)udata); + } else if (lua_rawequal(L, -1, -4)) { fd = (*((FILE **)udata)) ? fileno(*((FILE **)udata)) : -1; } lua_pop(L, 4); @@ -88,13 +85,31 @@ int nixio__tofd(lua_State *L, int ud) { return fd; } +/* An empty iterator */ +int nixio__nulliter(lua_State *L) { + lua_pushnil(L); + return 1; +} + +static int nixio_errno(lua_State *L) { + lua_pushinteger(L, errno); + return 1; +} + +static int nixio_strerror(lua_State *L) { + lua_pushstring(L, strerror(luaL_checkinteger(L, 1))); + return 1; +} + /* object table */ static const luaL_reg R[] = { + {"errno", nixio_errno}, + {"strerror", nixio_strerror}, {NULL, NULL} }; /* entry point */ -LUALIB_API int luaopen_nixio(lua_State *L) { +NIXIO_API int luaopen_nixio(lua_State *L) { /* create metatable */ luaL_newmetatable(L, NIXIO_META); @@ -110,6 +125,9 @@ LUALIB_API int luaopen_nixio(lua_State *L) { lua_setfield(L, -2, "meta_socket"); /* register methods */ +#ifdef __WINNT__ + nixio_open__mingw(L); +#endif nixio_open_file(L); nixio_open_socket(L); nixio_open_sockopt(L); @@ -118,6 +136,13 @@ LUALIB_API int luaopen_nixio(lua_State *L) { nixio_open_poll(L); nixio_open_io(L); nixio_open_splice(L); + nixio_open_process(L); + nixio_open_syslog(L); + nixio_open_bit(L); + nixio_open_bin(L); + nixio_open_fs(L); + nixio_open_user(L); + nixio_open_tls_crypto(L); nixio_open_tls_context(L); nixio_open_tls_socket(L); @@ -126,16 +151,80 @@ LUALIB_API int luaopen_nixio(lua_State *L) { lua_setfield(L, -2, "version"); /* some constants */ - lua_createtable(L, 0, 7); + lua_newtable(L); + + lua_pushliteral(L, NIXIO_SEP); + lua_setfield(L, -2, "sep"); + + lua_pushliteral(L, NIXIO_PATHSEP); + lua_setfield(L, -2, "pathsep"); + + lua_pushinteger(L, NIXIO_BUFFERSIZE); + lua_setfield(L, -2, "buffersize"); NIXIO_PUSH_CONSTANT(EACCES); + NIXIO_PUSH_CONSTANT(EINTR); NIXIO_PUSH_CONSTANT(ENOSYS); NIXIO_PUSH_CONSTANT(EINVAL); - NIXIO_PUSH_CONSTANT(EWOULDBLOCK); NIXIO_PUSH_CONSTANT(EAGAIN); NIXIO_PUSH_CONSTANT(ENOMEM); NIXIO_PUSH_CONSTANT(ENOENT); + NIXIO_PUSH_CONSTANT(ECHILD); + NIXIO_PUSH_CONSTANT(EIO); + NIXIO_PUSH_CONSTANT(EBADF); + NIXIO_PUSH_CONSTANT(EFAULT); + NIXIO_PUSH_CONSTANT(EFBIG); + NIXIO_PUSH_CONSTANT(ENOSPC); + NIXIO_PUSH_CONSTANT(EPIPE); + NIXIO_PUSH_CONSTANT(ESPIPE); + NIXIO_PUSH_CONSTANT(EISDIR); + NIXIO_PUSH_CONSTANT(EPERM); + NIXIO_PUSH_CONSTANT(EEXIST); + NIXIO_PUSH_CONSTANT(EMFILE); + NIXIO_PUSH_CONSTANT(ENAMETOOLONG); + NIXIO_PUSH_CONSTANT(ENFILE); + NIXIO_PUSH_CONSTANT(ENODEV); + NIXIO_PUSH_CONSTANT(EXDEV); + NIXIO_PUSH_CONSTANT(ENOTDIR); + NIXIO_PUSH_CONSTANT(ENXIO); + NIXIO_PUSH_CONSTANT(EROFS); + NIXIO_PUSH_CONSTANT(EBUSY); + NIXIO_PUSH_CONSTANT(ESRCH); + NIXIO_PUSH_CONSTANT(SIGINT); + NIXIO_PUSH_CONSTANT(SIGTERM); + NIXIO_PUSH_CONSTANT(SIGSEGV); + +#ifndef __WINNT__ + NIXIO_PUSH_CONSTANT(EWOULDBLOCK); + NIXIO_PUSH_CONSTANT(ELOOP); + NIXIO_PUSH_CONSTANT(EOVERFLOW); + NIXIO_PUSH_CONSTANT(ETXTBSY); + NIXIO_PUSH_CONSTANT(EAFNOSUPPORT); + NIXIO_PUSH_CONSTANT(ENOBUFS); + NIXIO_PUSH_CONSTANT(EPROTONOSUPPORT); + NIXIO_PUSH_CONSTANT(ENOPROTOOPT); + NIXIO_PUSH_CONSTANT(EADDRINUSE); + NIXIO_PUSH_CONSTANT(ENETDOWN); + NIXIO_PUSH_CONSTANT(ENETUNREACH); + + NIXIO_PUSH_CONSTANT(SIGALRM); + NIXIO_PUSH_CONSTANT(SIGKILL); + NIXIO_PUSH_CONSTANT(SIGHUP); + NIXIO_PUSH_CONSTANT(SIGSTOP); + NIXIO_PUSH_CONSTANT(SIGCONT); + NIXIO_PUSH_CONSTANT(SIGCHLD); + NIXIO_PUSH_CONSTANT(SIGQUIT); + NIXIO_PUSH_CONSTANT(SIGUSR1); + NIXIO_PUSH_CONSTANT(SIGUSR2); + NIXIO_PUSH_CONSTANT(SIGIO); + NIXIO_PUSH_CONSTANT(SIGURG); + NIXIO_PUSH_CONSTANT(SIGPIPE); + + lua_pushvalue(L, -1); + lua_setfield(L, -3, "const_sock"); + signal(SIGPIPE, SIG_IGN); +#endif /* !__WINNT__ */ lua_setfield(L, -2, "const"); /* remove meta table */