1 Commits

Author SHA1 Message Date
Hisham Muhammad
f7eea62957 Fix memory leak in case of realloc failure.
Fixes #101.
2017-11-26 16:49:39 -02:00
29 changed files with 1039 additions and 926 deletions

View File

@@ -1,34 +1,16 @@
language: generic language: c
sudo: false sudo: false
jobs: env:
- os: linux - LUA="lua 5.1"
env: - LUA="lua 5.2"
- LUA="lua 5.1" - LUA="lua 5.3"
LIBFLAG="-shared --coverage" - LUA="luajit 2.0"
- os: linux - LUA="luajit 2.1"
env:
- LUA="lua 5.2"
LIBFLAG="-shared --coverage"
- os: linux
env:
- LUA="lua 5.3"
LIBFLAG="-shared --coverage"
- os: linux
env:
- LUA="lua 5.4"
LIBFLAG="-shared --coverage"
- os: linux
env:
- LUA="luajit 2.1"
LIBFLAG="-shared --coverage"
- os: osx
env:
- LUA="lua 5.1"
LIBFLAG="-bundle -undefined dynamic_lookup -all_load --coverage"
before_install: before_install:
- pip install cpp-coveralls hererocks - pip install --user cpp-coveralls hererocks
- hererocks env --$LUA --luarocks latest - hererocks env --$LUA --luarocks latest
- export PATH="$PWD/env/bin:$PATH" - export PATH="$PWD/env/bin:$PATH"
- luarocks install lua-path - luarocks install lua-path
@@ -38,7 +20,7 @@ before_install:
- luarocks install luacov-coveralls --server=https://luarocks.org/dev --deps-mode=none - luarocks install luacov-coveralls --server=https://luarocks.org/dev --deps-mode=none
install: install:
- luarocks make CFLAGS="-O2 -fPIC -ftest-coverage -fprofile-arcs" LIBFLAG="$LIBFLAG" - luarocks make rockspecs/luafilesystem-cvs-3.rockspec CFLAGS="-O2 -fPIC -ftest-coverage -fprofile-arcs" LIBFLAG="-shared --coverage"
script: script:
- lua -lluacov tests/test.lua - lua -lluacov tests/test.lua

View File

@@ -12,7 +12,7 @@ OBJS= src/$T.o
lib: src/lfs.so lib: src/lfs.so
src/lfs.so: $(OBJS) src/lfs.so: $(OBJS)
MACOSX_DEPLOYMENT_TARGET=$(MACOSX_DEPLOYMENT_TARGET); export MACOSX_DEPLOYMENT_TARGET; $(CC) $(LIB_OPTION) -o src/lfs.so $(OBJS) MACOSX_DEPLOYMENT_TARGET="10.3"; export MACOSX_DEPLOYMENT_TARGET; $(CC) $(LIB_OPTION) -o src/lfs.so $(OBJS)
test: lib test: lib
LUA_CPATH=./src/?.so lua tests/test.lua LUA_CPATH=./src/?.so lua tests/test.lua

View File

@@ -5,7 +5,7 @@
# LuaFileSystem - File System Library for Lua # LuaFileSystem - File System Library for Lua
Copyright 2003-2020 Kepler Project Copyright 2003-2017 Kepler Project
https://keplerproject.github.io/luafilesystem https://keplerproject.github.io/luafilesystem

View File

@@ -11,6 +11,7 @@ environment:
- LUA: "lua 5.1" - LUA: "lua 5.1"
- LUA: "lua 5.2 --compat none" - LUA: "lua 5.2 --compat none"
- LUA: "lua 5.3 --compat none" - LUA: "lua 5.3 --compat none"
- LUA: "luajit 2.0"
- LUA: "luajit 2.1" - LUA: "luajit 2.1"
# Abuse this section so we can have a matrix with different Compiler versions # Abuse this section so we can have a matrix with different Compiler versions
@@ -29,7 +30,7 @@ before_build:
- echo "Installing external deps" - echo "Installing external deps"
build_script: build_script:
- luarocks make - luarocks make rockspecs/luafilesystem-cvs-3.rockspec
before_test: before_test:

12
config
View File

@@ -3,25 +3,21 @@
# Default installation prefix # Default installation prefix
PREFIX=/usr/local PREFIX=/usr/local
LUA_VERSION = 5.1
# System's libraries directory (where binary libraries are installed) # System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= $(PREFIX)/lib/lua/$(LUA_VERSION) LUA_LIBDIR= $(PREFIX)/lib/lua/5.1
# Lua includes directory # Lua includes directory
LUA_INC += -I$(PREFIX)/include LUA_INC= $(PREFIX)/include
LUA_INC += -I/usr/include/lua$(LUA_VERSION) -I/usr/include/lua/$(LUA_VERSION)
# OS dependent # OS dependent
LIB_OPTION= -shared #for Linux LIB_OPTION= -shared #for Linux
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X #LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X
# Minimum runtime OS version on macOS LIBNAME= $T.so.$V
MACOSX_DEPLOYMENT_TARGET= 10.5
# Compilation directives # Compilation directives
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic
INCS= $(LUA_INC) INCS= -I$(LUA_INC)
CFLAGS= $(WARN) $(INCS) CFLAGS= $(WARN) $(INCS)
CC= gcc CC= gcc

View File

@@ -1,14 +1,14 @@
LUA_VERSION= 5.1
# Installation directories # Installation directories
# System's libraries directory (where binary libraries are installed) # System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= "c:\lua$(LUA_VERSION)" LUA_LIBDIR= "c:\lua5.1"
# Lua includes directory # Lua includes directory
LUA_INC= "c:\lua$(LUA_VERSION)\include" LUA_INC= "c:\lua5.1\include"
# Lua library # Lua library
LUA_LIB= "c:\lua$(LUA_VERSION)\lua$(LUA_VERSION).lib" LUA_LIB= "c:\lua5.1\lua5.1.lib"
LIBNAME= $T.dll
# Compilation directives # Compilation directives
WARN= /O2 WARN= /O2

View File

@@ -70,7 +70,7 @@ the underlying directory structure and file attributes.</p>
<h2><a name="status"></a>Status</h2> <h2><a name="status"></a>Status</h2>
<p>Current version is 1.8.0. It works with Lua 5.1, 5.2, 5.3 and 5.4, and it runs on various <p>Current version is 1.7.0. It works with Lua 5.1, 5.2 and 5.3, and it runs on various
flavors of Unix (including Linux, BSDs, macOS) and Windows.</p> flavors of Unix (including Linux, BSDs, macOS) and Windows.</p>
<h2><a name="download"></a>Download</h2> <h2><a name="download"></a>Download</h2>
@@ -86,15 +86,6 @@ $ luarocks install luafilesystem
<h2><a name="history"></a>History</h2> <h2><a name="history"></a>History</h2>
<dl class="history"> <dl class="history">
<dt><strong>Version 1.8.0</strong> [22/Apr/2020]</dt>
<dd><ul>
<li>Lua 5.4 support</li>
<li>lfs.link and lfs.symlinkattributes now work on Windows</li>
<li>MACOSX_DEPLOYMENT_TARGET is configurable in the Makefile</li>
<li>Fallback to _POSIX_PATH_MAX when MAXPATHLEN is not avaliable</li>
<li>Fixed memory leak in case of realloc failure</li>
</ul></dd>
<dt><strong>Version 1.7.0</strong> [15/Sep/2017]</dt> <dt><strong>Version 1.7.0</strong> [15/Sep/2017]</dt>
<dd><ul> <dd><ul>
<li>symlinkattributes function now provides 'target' field, containing name of the file that the symlink points to.</li> <li>symlinkattributes function now provides 'target' field, containing name of the file that the symlink points to.</li>

View File

@@ -84,7 +84,7 @@ Ierusalimschy, Andr&eacute; Carregal and Tom&aacute;s Guisasola.
The implementation is not derived from licensed software.</p> The implementation is not derived from licensed software.</p>
<hr/> <hr/>
<p>Copyright &copy; 2003 - 2020 Kepler Project.</p> <p>Copyright &copy; 2003 - 2017 Kepler Project.</p>
<p>Permission is hereby granted, free of charge, to any person <p>Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation obtaining a copy of this software and associated documentation

View File

@@ -102,15 +102,15 @@ LuaFileSystem offers the following functions:
</p> </p>
<dl class="reference"> <dl class="reference">
<dt><a name="attributes"></a><strong><code>lfs.attributes (filepath [, request_name | result_table])</code></strong></dt> <dt><a name="attributes"></a><strong><code>lfs.attributes (filepath [, aname | atable])</code></strong></dt>
<dd>Returns a table with the file attributes corresponding to <dd>Returns a table with the file attributes corresponding to
<code>filepath</code> (or <code>nil</code> followed by an error message and a system-dependent error code <code>filepath</code> (or <code>nil</code> followed by an error message and a system-dependent error code
in case of error). in case of error).
If the second optional argument is given and is a string, then only the value of the If the second optional argument is given and is a string, then only the value of the
named attribute is returned (this use is equivalent to named attribute is returned (this use is equivalent to
<code>lfs.attributes(filepath)[request_name]</code>, but the table is not created <code>lfs.attributes(filepath)[aname]</code>, but the table is not created
and only one attribute is retrieved from the O.S.). and only one attribute is retrieved from the O.S.).
if a table is passed as the second argument, it (<code>result_table</code>) is filled with attributes and returned instead of a new table. if a table is passed as the second argument, it is filled with attributes and returned instead of a new table.
The attributes are described as follows; The attributes are described as follows;
attribute <code>mode</code> is a string, all the others are numbers, attribute <code>mode</code> is a string, all the others are numbers,
and the time related attributes use the same time reference of and the time related attributes use the same time reference of
@@ -239,7 +239,7 @@ LuaFileSystem offers the following functions:
setting the mode has no effect, and the mode is always returned as <code>binary</code>. setting the mode has no effect, and the mode is always returned as <code>binary</code>.
</dd> </dd>
<dt><a name="symlinkattributes"></a><strong><code>lfs.symlinkattributes (filepath [, request_name])</code></strong></dt> <dt><a name="symlinkattributes"></a><strong><code>lfs.symlinkattributes (filepath [, aname])</code></strong></dt>
<dd>Identical to <a href="#attributes">lfs.attributes</a> except that <dd>Identical to <a href="#attributes">lfs.attributes</a> except that
it obtains information about the link itself (not the file it refers to). it obtains information about the link itself (not the file it refers to).
It also adds a <strong><code>target</code></strong> field, containing It also adds a <strong><code>target</code></strong> field, containing

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.3.0-1"
source = {
url = "http://luaforge.net/frs/download.php/2679/luafilesystem-1.3.0.tar.gz"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "make",
build_variables = {
LUA_INC = "$(LUA_INCDIR)",
LIB_OPTION = "$(LIBFLAG)"
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.4.0-1"
source = {
url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.0.tar.gz"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "make",
build_variables = {
LUA_INC = "$(LUA_INCDIR)",
LIB_OPTION = "$(LIBFLAG)"
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
}

View File

@@ -0,0 +1,43 @@
package = "LuaFileSystem"
version = "1.4.0-2"
source = {
url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.0.tar.gz"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,43 @@
package = "LuaFileSystem"
version = "1.4.1-1"
source = {
url = "http://luaforge.net/frs/download.php/3345/luafilesystem-1.4.1.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR) $(STAT64)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,43 @@
package = "LuaFileSystem"
version = "1.4.1rc1-1"
source = {
url = "http://luafilesystem.luaforge.net/luafilesystem-1.4.1rc1.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR) $(STAT64)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,26 @@
package = "LuaFileSystem"
version = "1.4.2-1"
source = {
url = "http://luaforge.net/frs/download.php/3931/luafilesystem-1.4.2.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "module",
modules = { lfs = "src/lfs.c" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.5.0-1"
source = {
url = "http://cloud.github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.5.0.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "module",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.0-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.0.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.1-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.1.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.2-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.2.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,28 @@
package = "LuaFileSystem"
version = "1.6.3-1"
source = {
url = "git://github.com/keplerproject/luafilesystem",
tag = "v_1_6_3",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]],
license = "MIT/X11",
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
lfs = "src/lfs.c"
},
copy_directories = {
"doc", "tests"
}
}

View File

@@ -1,7 +1,8 @@
package = "luafilesystem" package = "LuaFileSystem"
version = "scm-1" version = "1.7.0-1"
source = { source = {
url = "git://github.com/keplerproject/luafilesystem" url = "git://github.com/keplerproject/luafilesystem",
tag = "v1_7_0",
} }
description = { description = {
summary = "File System Library for the Lua Programming Language", summary = "File System Library for the Lua Programming Language",
@@ -11,7 +12,7 @@ description = {
distribution. LuaFileSystem offers a portable way to access the distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes. underlying directory structure and file attributes.
]], ]],
license = "MIT/X11" license = "MIT/X11",
} }
dependencies = { dependencies = {
"lua >= 5.1" "lua >= 5.1"
@@ -22,7 +23,6 @@ build = {
lfs = "src/lfs.c" lfs = "src/lfs.c"
}, },
copy_directories = { copy_directories = {
"doc", "doc", "tests"
"tests"
} }
} }

View File

@@ -0,0 +1,28 @@
package = "LuaFileSystem"
version = "1.7.0-2"
source = {
url = "git://github.com/keplerproject/luafilesystem",
tag = "v1_7_0_2",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]],
license = "MIT/X11",
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
lfs = "src/lfs.c"
},
copy_directories = {
"doc", "tests"
}
}

View File

@@ -0,0 +1,44 @@
package = "LuaFileSystem"
version = "cvs-1"
source = {
url = "cvs://:pserver:anonymous:@cvs.luaforge.net:/cvsroot/luafilesystem",
cvs_tag = "HEAD"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "$(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,26 @@
package = "LuaFileSystem"
version = "cvs-2"
source = {
url = "git://github.com/keplerproject/luafilesystem.git",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "module",
modules = { lfs = "src/lfs.c" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "cvs-3"
source = {
url = "git://github.com/keplerproject/luafilesystem.git",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1, < 5.4"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

1311
src/lfs.c

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
LIBRARY lfs.dll LIBRARY lfs.dll
VERSION 1.8 VERSION 1.7
EXPORTS EXPORTS
luaopen_lfs luaopen_lfs

View File

@@ -1,34 +1,33 @@
/* /*
** LuaFileSystem ** LuaFileSystem
** Copyright Kepler Project 2003 - 2020 ** Copyright Kepler Project 2003 - 2017 (http://keplerproject.github.io/luafilesystem)
** (http://keplerproject.github.io/luafilesystem)
*/ */
/* Define 'chdir' for systems that do not implement it */ /* Define 'chdir' for systems that do not implement it */
#ifdef NO_CHDIR #ifdef NO_CHDIR
#define chdir(p) (-1) #define chdir(p) (-1)
#define chdir_error "Function 'chdir' not provided by system" #define chdir_error "Function 'chdir' not provided by system"
#else #else
#define chdir_error strerror(errno) #define chdir_error strerror(errno)
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
#define chdir(p) (_chdir(p)) #define chdir(p) (_chdir(p))
#define getcwd(d, s) (_getcwd(d, s)) #define getcwd(d, s) (_getcwd(d, s))
#define rmdir(p) (_rmdir(p)) #define rmdir(p) (_rmdir(p))
#define LFS_EXPORT __declspec (dllexport) #define LFS_EXPORT __declspec (dllexport)
#ifndef fileno #ifndef fileno
#define fileno(f) (_fileno(f)) #define fileno(f) (_fileno(f))
#endif #endif
#else #else
#define LFS_EXPORT #define LFS_EXPORT
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
LFS_EXPORT int luaopen_lfs(lua_State * L); LFS_EXPORT int luaopen_lfs (lua_State *L);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -4,8 +4,6 @@ local tmp = "/tmp"
local sep = string.match (package.config, "[^\n]+") local sep = string.match (package.config, "[^\n]+")
local upper = ".." local upper = ".."
local is_unix = package.config:sub(1,1) == "/"
local lfs = require"lfs" local lfs = require"lfs"
print (lfs._VERSION) print (lfs._VERSION)
@@ -62,8 +60,6 @@ if not attrib then
error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg) error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg)
end end
local f = io.open(tmpfile, "w") local f = io.open(tmpfile, "w")
local data = "hello, file!"
f:write(data)
f:close() f:close()
io.write(".") io.write(".")
@@ -79,19 +75,6 @@ assert (new_att.modification == testdate, "could not set modification time")
io.write(".") io.write(".")
io.flush() io.flush()
-- High-precision attributes
local testdate_hi = os.time({ year = 2021, day = 1, month = 23, hour=0}) + 0.5555
assert (lfs.touch (tmpfile, testdate_hi))
local new_att_hi = assert (lfs.attributes (tmpfile))
if new_att_hi.modification ~= testdate_hi then
io.write("\n")
io.write("warning: no support for high-precision timestamps\n")
io.flush()
end
io.write(".")
io.flush()
-- Change access and modification time -- Change access and modification time
local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0}) local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0})
local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0}) local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0})
@@ -104,42 +87,14 @@ assert (new_att.modification == testdate1, "could not set modification time")
io.write(".") io.write(".")
io.flush() io.flush()
-- Checking link (does not work on Windows)
if lfs.link (tmpfile, "_a_link_for_test_", true) then if lfs.link (tmpfile, "_a_link_for_test_", true) then
assert (lfs.attributes"_a_link_for_test_".mode == "file") assert (lfs.attributes"_a_link_for_test_".mode == "file")
assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link") assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
assert (lfs.symlinkattributes"_a_link_for_test_".target == tmpfile) assert (lfs.symlinkattributes"_a_link_for_test_".target == tmpfile)
assert (lfs.symlinkattributes("_a_link_for_test_", "target") == tmpfile) assert (lfs.symlinkattributes("_a_link_for_test_", "target") == tmpfile)
assert (lfs.symlinkattributes(tmpfile).mode == "file")
assert (lfs.link (tmpfile, "_a_hard_link_for_test_")) assert (lfs.link (tmpfile, "_a_hard_link_for_test_"))
assert (lfs.symlinkattributes"_a_hard_link_for_test_".mode == "file") assert (lfs.attributes (tmpfile, "nlink") == 2)
local fd = io.open(tmpfile)
assert(fd:read("*a") == data)
fd:close()
fd = io.open("_a_link_for_test_")
assert(fd:read("*a") == data)
fd:close()
fd = io.open("_a_hard_link_for_test_")
assert(fd:read("*a") == data)
fd:close()
fd = io.open("_a_hard_link_for_test_", "w+")
local data2 = "write in hard link"
fd:write(data2)
fd:close()
fd = io.open(tmpfile)
assert(fd:read("*a") == data2)
fd:close()
if is_unix then
assert (lfs.attributes (tmpfile, "nlink") == 2)
end
assert (os.remove"_a_link_for_test_") assert (os.remove"_a_link_for_test_")
assert (os.remove"_a_hard_link_for_test_") assert (os.remove"_a_hard_link_for_test_")
end end
@@ -164,8 +119,8 @@ io.flush()
-- Restore access time to current value -- Restore access time to current value
assert (lfs.touch (tmpfile, attrib.access, attrib.modification)) assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
new_att = assert (lfs.attributes (tmpfile)) new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access - attrib.access < 1) assert (new_att.access == attrib.access)
assert (new_att.modification - attrib.modification < 1) assert (new_att.modification == attrib.modification)
io.write(".") io.write(".")
io.flush() io.flush()
@@ -207,7 +162,7 @@ io.write(".")
io.flush() io.flush()
-- Stressing directory iterator -- Stressing directory iterator
local count = 0 count = 0
for i = 1, 4000 do for i = 1, 4000 do
for file in lfs.dir (tmp) do for file in lfs.dir (tmp) do
count = count + 1 count = count + 1