4 Commits

Author SHA1 Message Date
carregal
2afb826d96 Merging README 2007-05-08 22:11:42 +00:00
carregal
00be93ab51 Merging the trunk changes for the 1.2.1 release 2007-05-08 21:35:10 +00:00
carregal
0147f85957 Merging the documentation from HEAD 2006-03-15 20:30:53 +00:00
carregal
d5c95fbf86 Merging of VC6 files from HEAD 2006-03-15 19:36:19 +00:00
16 changed files with 107 additions and 370 deletions

View File

@@ -1,7 +1,7 @@
# $Id: Makefile,v 1.32 2008/02/11 22:42:21 carregal Exp $ # $Id: Makefile,v 1.26.2.1 2007/05/08 21:35:11 carregal Exp $
T= lfs T= lfs
V= 1.4.0 V= 1.2.1
CONFIG= ./config CONFIG= ./config
include $(CONFIG) include $(CONFIG)
@@ -9,14 +9,15 @@ include $(CONFIG)
SRCS= src/$T.c SRCS= src/$T.c
OBJS= src/$T.o OBJS= src/$T.o
lib: src/lfs.so lib: src/$(LIBNAME)
src/lfs.so: $(OBJS) src/$(LIBNAME): $(OBJS)
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS) export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/$(LIBNAME) $(OBJS)
install: src/lfs.so install: src/$(LIBNAME)
mkdir -p $(LUA_LIBDIR) mkdir -p $(LUA_LIBDIR)
cp src/lfs.so $(LUA_LIBDIR) cp src/$(LIBNAME) $(LUA_LIBDIR)
cd $(LUA_LIBDIR); ln -f -s $(LIBNAME) $T.so
clean: clean:
rm -f src/lfs.so $(OBJS) rm -f src/$(LIBNAME) $(OBJS)

View File

@@ -1,26 +1,24 @@
# $Id: Makefile.win,v 1.10 2008/02/13 22:08:31 carregal Exp $ # $Id: Makefile.win,v 1.4.2.1 2007/05/08 21:35:11 carregal Exp $
T= lfs T= lfs
V= 1.4.0 V= 1.2.1
include config.win include config.win
SRCS= src\$T.c SRCS= src\$T.c
OBJS= src\$T.obj OBJS= src\$T.obj
lib: src\lfs.dll lib: src\$(LIBNAME)
.c.obj: .c.obj:
$(CC) /c /Fo$@ $(CFLAGS) $< $(CC) /c /Fo$@ $(CFLAGS) $<
src\lfs.dll: $(OBJS) src\$(LIBNAME): $(OBJS)
link /dll /def:src\$T.def /out:src\lfs.dll $(OBJS) "$(LUA_LIB)" link /dll /def:src\$T.def /out:src\$(LIBNAME) $(OBJS) $(LUA_LIB)
IF EXIST src\lfs.dll.manifest mt -manifest src\lfs.dll.manifest -outputresource:src\lfs.dll;2
install: src\lfs.dll install: src\$(LIBNAME)
IF NOT EXIST "$(LUA_LIBDIR)" mkdir "$(LUA_LIBDIR)" IF NOT EXIST $(LUA_LIBDIR) mkdir $(LUA_LIBDIR)
copy src\lfs.dll "$(LUA_LIBDIR)" copy src\$(LIBNAME) $(LUA_LIBDIR)
clean: clean:
del src\lfs.dll $(OBJS) src\$T.lib src\$T.exp del src\$(LIBNAME) $(OBJS) src\$T.lib src\$T.exp
IF EXIST src\lfs.dll.manifest del src\lfs.dll.manifest

24
README
View File

@@ -1,23 +1,9 @@
LuaFileSystem - File System Library for Lua LuaFileSystem - File System Library for Lua
Copyright 2003 Kepler Project Copyright 2003-2007 PUC-Rio
http://www.keplerproject.org/luafilesystem http://www.keplerproject.org/luafilesystem
Description 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. LuaFileSystem is free software and uses the same license as Lua 5.1 Current version is 1.2.1.
-----------
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.
LuaFileSystem is free software and uses the same license as Lua 5.1
Current version is 1.4.0
LuaRocks Installation
---------------------
luarocks install luafilesystem
Unix Installation
-----------------
To install on Linux/OSX/BSD, please edit the config file and then call To install on Linux/OSX/BSD, please edit the config file and then call
make make
@@ -25,10 +11,4 @@ make install
The last step may require root privileges. The last step may require root privileges.
Windows Installation
--------------------
To install on Windows, please copy lfs.ddl to your package.cpath directory
Documentation
-------------
Please check the documentation at /doc/us/ for more information. Please check the documentation at /doc/us/ for more information.

13
config
View File

@@ -1,13 +1,8 @@
# Installation directories # Installation directories
# Default installation prefix
PREFIX=/usr/local
# System's libraries directory (where binary libraries are installed) # System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= $(PREFIX)/lib/lua/5.1 LUA_LIBDIR= /usr/local/lib/lua/5.1
# Lua includes directory # Lua includes directory
LUA_INC= $(PREFIX)/include LUA_INC= /usr/local/include/lua51
# OS dependent # OS dependent
LIB_OPTION= -shared #for Linux LIB_OPTION= -shared #for Linux
@@ -16,9 +11,9 @@ LIB_OPTION= -shared #for Linux
LIBNAME= $T.so.$V LIBNAME= $T.so.$V
# 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
INCS= -I$(LUA_INC) INCS= -I$(LUA_INC)
CFLAGS= $(WARN) $(INCS) CFLAGS= $(WARN) $(INCS)
CC= gcc CC= gcc
# $Id: config,v 1.21 2007/10/27 22:42:32 carregal Exp $ # $Id: config,v 1.14.2.1 2007/05/08 21:35:10 carregal Exp $

View File

@@ -1,10 +1,10 @@
# 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:\lua5.1 LUA_LIBDIR= c:\lua5.1\lib
# Lua includes directory # Lua includes directory
LUA_INC= c:\lua5.1\include LUA_INC= c:\lua5.1\include
# Lua library # Lua library
LUA_LIB= c:\lua5.1\lua5.1.lib LUA_LIB= c:\lua5.1\bin\lua5.1.lib
LIBNAME= $T.dll LIBNAME= $T.dll
@@ -14,4 +14,4 @@ INCS= /I$(LUA_INC)
CFLAGS= $(WARN) $(INCS) CFLAGS= $(WARN) $(INCS)
CC= cl CC= cl
# $Id: config.win,v 1.4 2007/05/18 19:52:59 carregal Exp $ # $Id: config.win,v 1.3.2.1 2007/05/08 21:35:10 carregal Exp $

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html>
<head> <head>
<title>LuaFileSystem</title> <title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/> <link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -93,8 +93,9 @@ attrdir (".")
</div> <!-- id="main" --> </div> <!-- id="main" -->
<div id="about"> <div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p> <p><a href="http://validator.w3.org/check?uri=referer">
<p><small>$Id: examples.html,v 1.8 2007/12/14 15:28:04 carregal Exp $</small></p> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
<p><small>$Id: examples.html,v 1.5.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
</div> <!-- id="about" --> </div> <!-- id="about" -->
</div> <!-- id="container" --> </div> <!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html>
<head> <head>
<title>LuaFileSystem</title> <title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/> <link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -71,61 +71,41 @@ 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.4.0. It was developed for Lua 5.1.</p> <p>Current version is 1.2.1. It was developed for Lua 5.1.</p>
<h2><a name="download"></a>Download</h2> <h2><a name="download"></a>Download</h2>
<p>LuaFileSystem source can be downloaded from its <p>LuaFileSystem source can be downloaded from its
<a href="http://luaforge.net/projects/luafilesystem/files">Lua Forge</a> <a href="http://luaforge.net/projects/luafilesystem/files">Lua Forge</a>
page. If you are using page. If you are using
<a href="http://luabinaries.luaforge.net">LuaBinaries</a> 5.1.3 a Windows binary <a href="http://luabinaries.luaforge.net">LuaBinaries</a> 5.1.2 a Windows binary
version of LuaFileSystem (compiled with Visual Studio 2005 Express) can be found at the same LuaForge page.</p> version of LuaFileSystem can be found at the same LuaForge page.</p>
<h2><a name="history"></a>History</h2> <h2><a name="history"></a>History</h2>
<dl class="history"> <dl class="history">
<dt><strong>Version 1.4.0</strong> [13/Feb/2008]</dt> <dt><strong>Version 1.2.1</strong> [08/May/2007]</dt>
<dd>
<ul>
<li><a href="manual.html#attributes"><code>lfs.attributes</code></a>
raises an error if attribute does not exist</li>
<li>added function
<a href="manual.html#setmode"><code>lfs.setmode</code></a>
(works only in non Windows systems).</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.3/">Version 1.3.0</a></strong> [26/Oct/2007]</dt>
<dd>
<ul>
<li>added function
<a href="manual.html#symlinkattributes"><code>lfs.symlinkattributes</code></a>
(works only in non Windows systems).</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2.1</a></strong> [08/May/2007]</dt>
<dd> <dd>
<ul> <ul>
<li>compatible only with Lua 5.1 (Lua 5.0 support was dropped)</li> <li>compatible only with Lua 5.1 (Lua 5.0 support was dropped)</li>
</ul> </ul>
</dd> </dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2</a></strong> [15/Mar/2006]</dt> <dt><strong>Version 1.2</strong> [15/Mar/2006]</dt>
<dd> <dd>
<ul> <ul>
<li>added optional argument to <li>added optional argument to
<a href="manual.html#attributes"><code>lfs.attributes</code></a></li> <a href="manual.html#attributes"><code>lfs.attributes</code></a></li>
<li>added function <li>added function
<a href="manual.html#rmdir"><code>lfs.rmdir</code></a></li> <a href="manual.html#rmdir"><code>lfs.rmdir</code></a></li>
<li>bug correction on <a href="manual.html#dir"><code>lfs.dir</code></a></li> <li>bug correction on <code>lfs.dir</code></li>
</ul> </ul>
</dd> </dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.1/">Version 1.1</a></strong> [30/May/2005]</dt> <dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.1/">Version 1.1</a></strong> [30/May/2005]</dt>
<dd> <dd>
<ul> <ul>
<li>added function <a href="manual.html#touch"><code>lfs.touch</code></a>.</li> <li>added function <code>lfs.touch</code>.</li>
</ul> </ul>
</dd> </dd>
@@ -157,8 +137,9 @@ Comments are welcome!</p>
</div> <!-- id="main" --> </div> <!-- id="main" -->
<div id="about"> <div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p> <p><a href="http://validator.w3.org/check?uri=referer">
<p><small>$Id: index.html,v 1.40 2008/02/13 21:00:10 carregal Exp $</small></p> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
<p><small>$Id: index.html,v 1.30.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
</div> <!-- id="about" --> </div> <!-- id="about" -->
</div> <!-- id="container" --> </div> <!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html>
<head> <head>
<title>LuaFileSystem</title> <title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/> <link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -85,7 +85,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 Kepler Project.</p> <p>Copyright &copy; 2004-2007 The 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
@@ -112,8 +112,9 @@ SOFTWARE.</p>
</div> <!-- id="main" --> </div> <!-- id="main" -->
<div id="about"> <div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p> <p><a href="http://validator.w3.org/check?uri=referer">
<p><small>$Id: license.html,v 1.13 2008/02/11 22:42:21 carregal Exp $</small></p> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
<p><small>$Id: license.html,v 1.9.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
</div><!-- id="about" --> </div><!-- id="about" -->
</div><!-- id="container" --> </div><!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html>
<head> <head>
<title>LuaFileSystem</title> <title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/> <link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -74,7 +74,7 @@ and header files for the target version must be installed properly.
<p> <p>
LuaFileSystem offers a Makefile and a separate configuration file, LuaFileSystem offers a Makefile and a separate configuration file,
<code>config</code>, <code>config</code>,
which should be edited to suit your installation before running which should be edited to suit your installation before runnig
<code>make</code>. <code>make</code>.
The file has some definitions like paths to the external libraries, The file has some definitions like paths to the external libraries,
compiler options and the like. compiler options and the like.
@@ -82,15 +82,13 @@ compiler options and the like.
<h2><a name="installation"></a>Installation</h2> <h2><a name="installation"></a>Installation</h2>
<p>The easiest way to install LuaFileSystem is to use LuaRocks:</p> <p>The LuaFileSystem compiled binary should be copied to a directory in your
<pre class="example">
luarocks install luafilesystem
</pre>
<p>If you prefer to install LuaFileSystem manually, the compiled binary should be copied to a directory in your
<a href="http://www.lua.org/manual/5.1/manual.html#pdf-package.cpath">C path</a>.</p> <a href="http://www.lua.org/manual/5.1/manual.html#pdf-package.cpath">C path</a>.</p>
<p>Windows users can use the binary version of LuaFileSystem
(<code>lfs.dll</code>) available at
<a href="http://luaforge.net/projects/luafilesystem/files">LuaForge</a>.</p>
<h2><a name="reference"></a>Reference</h2> <h2><a name="reference"></a>Reference</h2>
<p> <p>
@@ -155,12 +153,6 @@ LuaFileSystem offers the following functions:
<dt><strong><code>blksize</code></strong></dt> <dt><strong><code>blksize</code></strong></dt>
<dd>optimal file system I/O blocksize; (Unix only)</dd> <dd>optimal file system I/O blocksize; (Unix only)</dd>
</dl> </dl>
This function uses <code>stat</code> internally thus if the given
<code>filepath</code> is a symbolic link, it is followed (if it points to
another link the chain is followed recursively) and the information
is about the file it refers to.
To obtain information about the link itself, see function
<a href="#symlinkattributes">lfs.symlinkattributes</a>.
</dd> </dd>
<dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt> <dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt>
@@ -205,26 +197,13 @@ LuaFileSystem offers the following functions:
Returns <code>true</code> if the operation was successful; Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.</dd> in case of error, it returns <code>nil</code> plus an error string.</dd>
<dt><a name="setmode"></a><strong><code>lfs.setmode (filepath, mode)</code></strong></dt>
<dd>Sets the writing mode for a file. The mode string can be either <code>binary</code> or <code>text</code>.
Returns the previous mode string for the file. This function is only available in Windows, so you may want to make sure that
<code>lfs.setmode</code> exists before using it.
</dd>
<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
it obtains information about the link itself (not the file it refers to).
This function is not available in Windows so you may want to make sure that
<code>lfs.symlinkattributes</code> exists before using it.
</dd>
<dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt> <dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt>
<dd>Set access and modification times of a file. This function is <dd>Set access and modification times of a file. This function is
a bind to <code>utime</code> function. The first argument is the a bind to <code>utime</code> function. The first argument is the
filename, the second argument (<code>atime</code>) is the access time, filename, the second argument (<code>atime</code>) is the access time,
and the third argument (<code>mtime</code>) is the modification time. and the third argument (<code>mtime</code>) is the modification time.
Both times are provided in seconds (which should be generated with Both times are provided in seconds (which should be generated with
Lua standard function <code>os.time</code>). Lua standard function <code>os.date</code>).
If the modification time is omitted, the access time provided is used; If the modification time is omitted, the access time provided is used;
if both times are omitted, the current time is used.<br /> if both times are omitted, the current time is used.<br />
Returns <code>true</code> if the operation was successful; Returns <code>true</code> if the operation was successful;
@@ -247,8 +226,9 @@ LuaFileSystem offers the following functions:
</div> <!-- id="main" --> </div> <!-- id="main" -->
<div id="about"> <div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p> <p><a href="http://validator.w3.org/check?uri=referer">
<p><small>$Id: manual.html,v 1.40 2008/02/11 22:48:16 carregal Exp $</small></p> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
<p><small>$Id: manual.html,v 1.30.2.2 2007/05/08 21:35:11 carregal Exp $</small></p>
</div> <!-- id="about" --> </div> <!-- id="about" -->
</div> <!-- id="container" --> </div> <!-- id="container" -->

View File

@@ -1,27 +0,0 @@
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

@@ -1,27 +0,0 @@
package = "LuaFileSystem"
version = "1.4.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

@@ -1,44 +0,0 @@
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

@@ -1,6 +1,6 @@
/* /*
** LuaFileSystem ** LuaFileSystem
** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem) ** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem)
** **
** File system manipulation library. ** File system manipulation library.
** This library offers these functions: ** This library offers these functions:
@@ -11,12 +11,10 @@
** lfs.lock (fh, mode) ** lfs.lock (fh, mode)
** lfs.mkdir (path) ** lfs.mkdir (path)
** lfs.rmdir (path) ** lfs.rmdir (path)
** lfs.setmode (filepath, mode)
** lfs.symlinkattributes (filepath [, attributename]) -- thanks to Sam Roberts
** lfs.touch (filepath [, atime [, mtime]]) ** lfs.touch (filepath [, atime [, mtime]])
** lfs.unlock (fh) ** lfs.unlock (fh)
** **
** $Id: lfs.c,v 1.47 2008/02/11 22:42:21 carregal Exp $ ** $Id: lfs.c,v 1.32.2.1 2007/05/08 21:35:10 carregal Exp $
*/ */
#include <errno.h> #include <errno.h>
@@ -30,7 +28,6 @@
#include <io.h> #include <io.h>
#include <sys/locking.h> #include <sys/locking.h>
#include <sys/utime.h> #include <sys/utime.h>
#include <fcntl.h>
#else #else
#include <unistd.h> #include <unistd.h>
#include <dirent.h> #include <dirent.h>
@@ -70,15 +67,6 @@ typedef struct dir_data {
} dir_data; } dir_data;
#ifdef _WIN32
#define lfs_setmode(L,file,m) ((void)L, _setmode(_fileno(file), m))
#else
#define _O_TEXT 0
#define _O_BINARY 0
#define lfs_setmode(L,file,m) ((void)((void)file,m), \
luaL_error(L, LUA_QL("setmode") " not supported on non Windows platforms"), -1)
#endif
/* /*
** This function changes the working (current) directory ** This function changes the working (current) directory
*/ */
@@ -101,15 +89,14 @@ static int change_dir (lua_State *L) {
** and a string describing the error ** and a string describing the error
*/ */
static int get_dir (lua_State *L) { static int get_dir (lua_State *L) {
char *path; char path[255+2];
if ((path = getcwd(NULL, 0)) == NULL) { if (getcwd(path, 255) == NULL) {
lua_pushnil(L); lua_pushnil(L);
lua_pushstring(L, getcwd_error); lua_pushstring(L, getcwd_error);
return 2; return 2;
} }
else { else {
lua_pushstring(L, path); lua_pushstring(L, path);
free(path);
return 1; return 1;
} }
} }
@@ -177,36 +164,6 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
} }
static int lfs_g_setmode (lua_State *L, FILE *f, int arg) {
static const int mode[] = {_O_TEXT, _O_BINARY};
static const char *const modenames[] = {"text", "binary", NULL};
int op = luaL_checkoption(L, arg, NULL, modenames);
int res = lfs_setmode(L, f, mode[op]);
if (res != -1) {
int i;
lua_pushboolean(L, 1);
for (i = 0; modenames[i] != NULL; i++) {
if (mode[i] == res) {
lua_pushstring(L, modenames[i]);
goto exit;
}
}
lua_pushnil(L);
exit:
return 2;
} else {
int en = errno;
lua_pushnil(L);
lua_pushfstring(L, "%s", strerror(en));
lua_pushinteger(L, en);
return 3;
}
}
static int lfs_f_setmode(lua_State *L) {
return lfs_g_setmode(L, check_file(L, 1, "setmode"), 2);
}
/* /*
** Locks a file. ** Locks a file.
** @param #1 File handle. ** @param #1 File handle.
@@ -297,8 +254,6 @@ static int remove_dir (lua_State *L) {
static int dir_iter (lua_State *L) { static int dir_iter (lua_State *L) {
#ifdef _WIN32 #ifdef _WIN32
struct _finddata_t c_file; struct _finddata_t c_file;
#else
struct dirent *entry;
#endif #endif
dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1)); dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1));
luaL_argcheck (L, !d->closed, 1, "closed directory"); luaL_argcheck (L, !d->closed, 1, "closed directory");
@@ -324,6 +279,7 @@ static int dir_iter (lua_State *L) {
} }
} }
#else #else
struct dirent *entry;
if ((entry = readdir (d->dir)) != NULL) { if ((entry = readdir (d->dir)) != NULL) {
lua_pushstring (L, entry->d_name); lua_pushstring (L, entry->d_name);
return 1; return 1;
@@ -526,9 +482,6 @@ static void push_st_blksize (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_blksize); lua_pushnumber (L, (lua_Number)info->st_blksize);
} }
#endif #endif
static void push_invalid (lua_State *L, struct stat *info) {
luaL_error(L, "invalid attribute name");
}
typedef void (*_push_function) (lua_State *L, struct stat *info); typedef void (*_push_function) (lua_State *L, struct stat *info);
@@ -553,18 +506,18 @@ struct _stat_members members[] = {
{ "blocks", push_st_blocks }, { "blocks", push_st_blocks },
{ "blksize", push_st_blksize }, { "blksize", push_st_blksize },
#endif #endif
{ NULL, push_invalid } { NULL, NULL }
}; };
/* /*
** Get file or symbolic link information ** Get file information
*/ */
static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) { static int file_info (lua_State *L) {
int i; int i;
struct stat info; struct stat info;
const char *file = luaL_checkstring (L, 1); const char *file = luaL_checkstring (L, 1);
if (st(file, &info)) { if (stat(file, &info)) {
lua_pushnil (L); lua_pushnil (L);
lua_pushfstring (L, "cannot obtain information from file `%s'", file); lua_pushfstring (L, "cannot obtain information from file `%s'", file);
return 2; return 2;
@@ -574,7 +527,6 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
const char *member = lua_tostring (L, 2); const char *member = lua_tostring (L, 2);
if (strcmp (member, "mode") == 0) v = 0; if (strcmp (member, "mode") == 0) v = 0;
#ifndef _WIN32 #ifndef _WIN32
else if (strcmp (member, "blocks") == 0) v = 11;
else if (strcmp (member, "blksize") == 0) v = 12; else if (strcmp (member, "blksize") == 0) v = 12;
#endif #endif
else /* look for member */ else /* look for member */
@@ -597,36 +549,18 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
} }
/*
** Get file information using stat.
*/
static int file_info (lua_State *L) {
return _file_info_ (L, stat);
}
/*
** Get symbolic link information using lstat.
*/
#ifndef _WIN32
static int link_info (lua_State *L) {
return _file_info_ (L, lstat);
}
#endif
/* /*
** Assumes the table is on top of the stack. ** Assumes the table is on top of the stack.
*/ */
static void set_info (lua_State *L) { static void set_info (lua_State *L) {
lua_pushliteral (L, "_COPYRIGHT"); lua_pushliteral (L, "_COPYRIGHT");
lua_pushliteral (L, "Copyright (C) 2003 Kepler Project"); lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
lua_settable (L, -3); lua_settable (L, -3);
lua_pushliteral (L, "_DESCRIPTION"); lua_pushliteral (L, "_DESCRIPTION");
lua_pushliteral (L, "LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution"); lua_pushliteral (L, "LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution");
lua_settable (L, -3); lua_settable (L, -3);
lua_pushliteral (L, "_VERSION"); lua_pushliteral (L, "_VERSION");
lua_pushliteral (L, "LuaFileSystem 1.4.0"); lua_pushliteral (L, "LuaFileSystem 1.2.1");
lua_settable (L, -3); lua_settable (L, -3);
} }
@@ -639,11 +573,6 @@ static const struct luaL_reg fslib[] = {
{"lock", file_lock}, {"lock", file_lock},
{"mkdir", make_dir}, {"mkdir", make_dir},
{"rmdir", remove_dir}, {"rmdir", remove_dir},
#ifndef _WIN32
{"symlinkattributes", link_info},
#else
{"setmode", lfs_f_setmode},
#endif
{"touch", file_utime}, {"touch", file_utime},
{"unlock", file_unlock}, {"unlock", file_unlock},
{NULL, NULL}, {NULL, NULL},
@@ -651,7 +580,7 @@ static const struct luaL_reg fslib[] = {
int luaopen_lfs (lua_State *L) { int luaopen_lfs (lua_State *L) {
dir_create_meta (L); dir_create_meta (L);
luaL_register (L, "lfs", fslib); luaL_openlib (L, "lfs", fslib, 0);
set_info (L); set_info (L);
return 1; return 1;
} }

View File

@@ -1,5 +1,5 @@
LIBRARY lfs.dll LIBRARY lfs.dll
DESCRIPTION "LuaFileSystem" DESCRIPTION "LuaFileSystem"
VERSION 1.4.0 VERSION 1.2.1
EXPORTS EXPORTS
luaopen_lfs luaopen_lfs

View File

@@ -1,8 +1,8 @@
/* /*
** LuaFileSystem ** LuaFileSystem
** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem) ** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem)
** **
** $Id: lfs.h,v 1.4 2008/02/11 22:42:21 carregal Exp $ ** $Id: lfs.h,v 1.3 2006/03/10 23:37:32 carregal Exp $
*/ */
/* Define 'chdir' for systems that do not implement it */ /* Define 'chdir' for systems that do not implement it */

View File

@@ -34,17 +34,8 @@ assert (lfs.currentdir() == current, "error trying to change directories")
assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory") assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory")
-- Changing creating and removing directories -- Changing creating and removing directories
local tmpdir = current..sep.."lfs_tmp_dir" local tmpdir = tmp..sep.."lfs_tmp_dir"
local tmpfile = tmpdir..sep.."tmp_file" local tmpfile = tmpdir..sep.."tmp_file"
-- Test for existence of a previous lfs_tmp_dir
-- that may have resulted from an interrupted test execution and remove it
if lfs.chdir (tmpdir) then
assert (lfs.chdir (upper), "could not change to upper directory")
assert (os.remove (tmpfile), "could not remove file from previous test")
assert (lfs.rmdir (tmpdir), "could not remove directory from previous test")
end
-- tries to create a directory
assert (lfs.mkdir (tmpdir), "could not make a new directory") assert (lfs.mkdir (tmpdir), "could not make a new directory")
local attrib, errmsg = lfs.attributes (tmpdir) local attrib, errmsg = lfs.attributes (tmpdir)
if not attrib then if not attrib then
@@ -54,41 +45,19 @@ local f = io.open(tmpfile, "w")
f:close() f:close()
-- Change access time -- Change access time
local testdate = os.time({ year = 2007, day = 10, month = 2, hour=0}) assert (lfs.touch (tmpfile, 86401))
assert (lfs.touch (tmpfile, testdate))
local new_att = assert (lfs.attributes (tmpfile)) local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate, "could not set access time") assert (new_att.access == 86401, "could not set access time")
assert (new_att.modification == testdate, "could not set modification time") assert (new_att.modification == 86401, "could not set modification time")
-- Change access and modification time -- Change access and modification time
local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0}) assert (lfs.touch (tmpfile, 86403, 86402))
local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0})
assert (lfs.touch (tmpfile, testdate2, testdate1))
local new_att = assert (lfs.attributes (tmpfile)) local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate2, "could not set access time") assert (new_att.access == 86403, "could not set access time")
assert (new_att.modification == testdate1, "could not set modification time") assert (new_att.modification == 86402, "could not set modification time")
if lfs.symlinkattributes then
-- Checking symbolic link information (does not work in Windows)
assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_"))
assert (lfs.attributes"_a_link_for_test_".mode == "file")
assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
assert (os.remove"_a_link_for_test_")
end
if lfs.setmode then
-- Checking text/binary modes (works only in Windows)
local f = io.open(tmpfile, "w")
local mode = lfs.setmode(f, "binary")
assert(mode == "text")
mode = lfs.setmode(f, "text")
assert(mode == "binary")
f:close()
end
-- Restore access time to current value -- Restore access time to current value
assert (lfs.touch (tmpfile, attrib.access, attrib.modification)) assert (lfs.touch (tmpfile))
new_att = assert (lfs.attributes (tmpfile)) new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == attrib.access) assert (new_att.access == attrib.access)
assert (new_att.modification == attrib.modification) assert (new_att.modification == attrib.modification)