diff options
-rw-r--r-- | luxio.c | 36 | ||||
-rw-r--r-- | luxio_constants.inc.in | 3 | ||||
-rw-r--r-- | tests/test-termident.lua | 17 |
3 files changed, 52 insertions, 4 deletions
@@ -980,8 +980,34 @@ luxio_unsetenv(lua_State *L) /* POSIX.1-2001 */ /* 4.7 Terminal identification ***********************************************/ -/* TODO: ctermid() 4.7.1 */ -/* TODO: ttyname(), ttyname_r(), isatty() 4.7.2 */ +static int +luxio_ctermid(lua_State *L) +{ + lua_pushstring(L, ctermid(NULL)); + return 1; +} + +static int +luxio_ttyname(lua_State *L) +{ + int fd = luaL_checkinteger(L, 1); + + lua_pushstring(L, ttyname(fd)); + lua_pushinteger(L, errno); + + return 2; +} + +static int +luxio_isatty(lua_State *L) +{ + int fd = luaL_checkinteger(L, 1); + + lua_pushboolean(L, isatty(fd)); + lua_pushinteger(L, errno); + + return 2; +} /* 4.8 Configurable system variables *****************************************/ @@ -4557,11 +4583,15 @@ luxio_functions[] = { { "iconv_open", luxio_iconv_open }, { "iconv_close", luxio_iconv_close }, { "iconv", luxio_iconv }, - + #if _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L { "posix_fadvise", luxio_posix_fadvise }, #endif + { "ctermid", luxio_ctermid }, + { "ttyname", luxio_ttyname }, + { "isatty", luxio_isatty }, + { NULL, NULL } }; diff --git a/luxio_constants.inc.in b/luxio_constants.inc.in index d96ee67..ca045da 100644 --- a/luxio_constants.inc.in +++ b/luxio_constants.inc.in @@ -17,7 +17,7 @@ static const struct { E(EEXIST), E(EBADF), E(EFAULT), - E(EFBIG), + E(EFBIG), E(EINTR), E(EIO), E(EISDIR), @@ -34,6 +34,7 @@ static const struct { E(ENOTCONN), E(ENOTDIR), E(ENOTSOCK), + E(ENOTTY), E(ENXIO), E(EOVERFLOW), E(EPERM), diff --git a/tests/test-termident.lua b/tests/test-termident.lua new file mode 100644 index 0000000..5cde143 --- /dev/null +++ b/tests/test-termident.lua @@ -0,0 +1,17 @@ +l = require "luxio" + +print("ctermid()", l.ctermid()) +print("ttyname(STDIN_FILENO)", l.ttyname(l.STDIN_FILENO)) +print("ttyname(STDOUT_FILENO)", l.ttyname(l.STDOUT_FILENO)) + +local tfd, tpath = l.mkstemp(nil) + +print("isatty(STDIN_FILENO)", l.isatty(l.STDIN_FILENO)) + +istty, what = l.isatty(tfd) + +print(("isatty(%s)"):format(tpath), istty, l.strerror(what)) + +print(l.strerror(l.ENOTTY)) + +l.unlink(tpath) |