diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/lua/llfslibext.c')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/lua/llfslibext.c | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/Build/source/texk/web2c/luatexdir/lua/llfslibext.c b/Build/source/texk/web2c/luatexdir/lua/llfslibext.c deleted file mode 100644 index eba5778dfc7..00000000000 --- a/Build/source/texk/web2c/luatexdir/lua/llfslibext.c +++ /dev/null @@ -1,171 +0,0 @@ -/* llfslibext.c - - Copyright 2010-2011 Taco Hoekwater <taco@luatex.org> - - This file is part of LuaTeX. - - LuaTeX is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your - option) any later version. - - LuaTeX is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU General Public License along - with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ - -#include "ptexlib.h" -#include "lua/luatex-api.h" - -#include <kpathsea/c-stat.h> -#include <kpathsea/c-dir.h> -#include <time.h> - - -#ifdef _WIN32 -# include <windows.h> -#else -#endif - -#ifdef _WIN32 - -static int get_short_name(lua_State * L) -{ - long length = 0; - TCHAR *buffer = NULL; - const char *lpszPath = luaL_checkstring(L, 1); - length = GetShortPathName(lpszPath, NULL, 0); - if (length == 0) { - lua_pushnil(L); - lua_pushfstring(L, "operating system error: %d", (int) GetLastError()); - return 2; - } - buffer = (TCHAR *) xmalloc(length * sizeof(TCHAR)); - length = GetShortPathName(lpszPath, buffer, length); - if (length == 0) { - lua_pushnil(L); - lua_pushfstring(L, "operating system error: %d", (int) GetLastError()); - return 2; - } - lua_pushlstring(L, (const char *) buffer, (size_t) length); - return 1; -} - -static int read_link(lua_State * L) -{ - lua_pushboolean(L, 0); - lua_pushliteral(L, "readlink not supported on this platform"); - return 2; -} - -#else - -static int pusherror(lua_State * L, const char *info) -{ - lua_pushnil(L); - if (info == NULL) - lua_pushstring(L, strerror(errno)); - else - lua_pushfstring(L, "%s: %s", info, strerror(errno)); - lua_pushinteger(L, errno); - return 3; -} - -static int Preadlink(lua_State * L) -{ -/** readlink(path) */ - const char *path = luaL_checkstring(L, 1); - char *b = NULL; - int allocated = 128; - int n; - while (1) { - b = malloc(allocated); - if (!b) - return pusherror(L, path); - n = readlink(path, b, allocated); - if (n == -1) { - free(b); - return pusherror(L, path); - } - if (n < allocated) - break; - /* Not enough room, try bigger */ - allocated *= 2; - free(b); - } - lua_pushlstring(L, b, n); - free(b); - return 1; -} - - -static int read_link(lua_State * L) -{ - return Preadlink(L); -} - -static int get_short_name(lua_State * L __attribute__ ((unused))) -{ - /* simply do nothing */ - return 1; -} -#endif - - -/* -** Get file information -*/ -static int file_is_directory(lua_State * L) -{ - struct stat info; - const char *file = luaL_checkstring(L, 1); - - if (stat(file, &info)) { - lua_pushnil(L); - lua_pushfstring(L, "cannot obtain information from file `%s'", file); - return 2; - } - if (S_ISDIR(info.st_mode)) - lua_pushboolean(L, 1); - else - lua_pushboolean(L, 0); - - return 1; -} - -static int file_is_file(lua_State * L) -{ - struct stat info; - const char *file = luaL_checkstring(L, 1); - - if (stat(file, &info)) { - lua_pushnil(L); - lua_pushfstring(L, "cannot obtain information from file `%s'", file); - return 2; - } - if (S_ISREG(info.st_mode)) - lua_pushboolean(L, 1); - else - lua_pushboolean(L, 0); - - return 1; -} - - -void open_lfslibext(lua_State * L) -{ - - lua_getglobal(L, "lfs"); - lua_pushcfunction(L, file_is_directory); - lua_setfield(L, -2, "isdir"); - lua_pushcfunction(L, file_is_file); - lua_setfield(L, -2, "isfile"); - lua_pushcfunction(L, read_link); - lua_setfield(L, -2, "readlink"); - lua_pushcfunction(L, get_short_name); - lua_setfield(L, -2, "shortname"); - lua_pop(L, 1); /* pop the table */ -} |