72 Commits

Author SHA1 Message Date
carregal
e52a7fef15 Using a default prefix for the Makefile 2007-10-27 22:42:32 +00:00
carregal
6368cd544f Fixing a wrong test (tks to Enrico Tassi) 2007-10-27 14:15:49 +00:00
carregal
9cdf62e1bd Documentation updates for 1.3.0 2007-10-26 21:44:43 +00:00
carregal
4790b562ca Checking for lfs.symlinkattributes so the tests are not applied in Windows 2007-10-26 21:06:14 +00:00
carregal
8432017680 Version 1.3.0 (final) 2007-10-26 21:01:07 +00:00
carregal
d202dad4f1 Removing the symbolic link tests since they don't work in Windows. We have to re-check them later. 2007-10-26 20:13:10 +00:00
carregal
6756befeff Changing version to LuaFileSystem 1.3.0 (work) 2007-10-05 02:06:58 +00:00
tomas
aeca787ff3 Improving conditional compilation for Windows version (thanks to Varol Kaptan) 2007-08-30 14:39:45 +00:00
tomas
1cfd57550e Correcting version 2007-08-30 14:38:07 +00:00
hisham
9f7e1dc153 Make include path comply with vanilla Lua 2007-07-31 03:22:55 +00:00
tomas
97ccdc90ed Avoiding dependency in backwards compatibility to Lua 5.0 2007-06-22 12:44:46 +00:00
tomas
57a64a5cfe Adding function symlinkatributes. Updating version to 1.3.0 2007-06-07 01:28:08 +00:00
carregal
47f40e5705 Changes related to the new build strucutre using Lua 5.1 default paths 2007-05-18 19:52:59 +00:00
carregal
d3e7a0ed12 Corrected the second of 2 bugs on the test script found by Shmuel Zeigerman involving the access and update time on lfs.touch() 2007-05-18 18:04:46 +00:00
carregal
6a22c3e728 Correction on the documentation of lfs.touch() 2007-05-17 23:08:56 +00:00
carregal
4e23cb01d9 Corrected 1 of 2 bugs on the test script found by Shmuel Zeigerman: the use of /tmp as a necessary directory.
Corrected a bug on the test script on slow fliesystems due to the reliance on close times
2007-05-17 23:08:20 +00:00
tomas
7ee2d8e1b2 Compilation bug fix: ISO C90 forbids mixed declarations and code 2007-05-15 12:58:35 +00:00
carregal
8033232c92 Simplified README 2007-05-08 21:39:23 +00:00
carregal
3b35114a16 Details for the 1.2.1 release. Version number, droping Lua 5.0 support 2007-05-08 19:23:12 +00:00
carregal
8161cea877 Changing the default Windows building directory from c:\lua51 to c:\lua5.1 2007-03-15 21:27:52 +00:00
carregal
a11b58023e Add removal rules for nmake clean 2006-12-19 21:41:42 +00:00
mascarenhas
94e104b98a config revert 2006-12-15 18:04:50 +00:00
mascarenhas
e92c9b4d9e Added pseudo-configure script
----------------------------------------------------------------------
2006-12-15 17:14:28 +00:00
mascarenhas
c9fe48709f Windows Makefile take two 2006-12-04 18:25:24 +00:00
mascarenhas
57622411a9 Windows Makefile and config 2006-12-04 18:24:18 +00:00
mascarenhas
67c2187e9a Dropped Lua 5.0 support. 2006-12-04 15:28:53 +00:00
tomas
5100f420b7 Updating to Lua 5.1 2006-07-24 01:19:42 +00:00
carregal
722f6a9869 Reference to LuaBinaries 5.0.2 2006-06-26 18:29:13 +00:00
tomas
e10a4bc816 Correcting version number 2006-06-08 18:06:18 +00:00
tomas
c182bab5f9 Adding version information 2006-06-08 18:04:29 +00:00
tomas
df2efb797c Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 17:55:33 +00:00
tomas
b6c8c13942 Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 16:23:25 +00:00
tomas
59ef09d270 Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 16:16:23 +00:00
carregal
ac0de9a462 Documentation update - minor details 2006-03-23 20:44:00 +00:00
carregal
3a7a15178f Documentation update - minor details 2006-03-15 20:29:15 +00:00
tuler
f9e07c6b08 version update 2006-03-15 18:27:13 +00:00
carregal
f78e6e2abe Documentation update - minor details 2006-03-15 16:44:04 +00:00
tomas
dbb964ffd4 Standardizing the return values in case of error 2006-03-14 15:03:34 +00:00
carregal
9344c3933d Documentation update - minor details 2006-03-14 14:07:55 +00:00
tomas
121ae680f1 Standardizing execution errors to nil followed by an error message 2006-03-14 13:39:38 +00:00
tomas
1a1716f876 Expliciting the types of the attributes 2006-03-14 13:16:18 +00:00
tomas
e100c80db4 Removing unused code 2006-03-13 00:06:24 +00:00
carregal
85bb568ca2 Documentation update reflecting the Kepler structure 2006-03-11 14:34:22 +00:00
carregal
144b4ea052 Documentation update reflecting the Kepler structure 2006-03-10 23:37:48 +00:00
carregal
44e60e8b0c Comments update - minor details 2006-03-10 23:37:32 +00:00
carregal
55be9b2227 Comments update - minor details 2006-03-10 22:38:11 +00:00
tuler
b4da6c67bb version update. 2006-03-07 19:08:27 +00:00
tuler
a60f6307d5 variable declaration in an _WIN32 section 2006-03-07 19:07:57 +00:00
tomas
7ba0f3da76 Improving History 2006-03-04 00:33:43 +00:00
tomas
079b4e7f79 Improving lfs.attributes' reference 2006-03-03 23:58:05 +00:00
uid20013
6305fb87bd Saying where the library should be copied to. 2006-02-07 01:42:58 +00:00
tuler
55de5925e5 access time 11, 22 and 33 do not work on windows 2005-08-18 12:43:05 +00:00
tomas
e206fd0e63 Upgrading lfs.attributes so that it could receive an extra parameter.
If it is a table, then it is used instead of creating a new one.
If it is a string, then it is used to indicate the attribute which will
be returned (only one parameter is accepted).
2005-08-18 01:00:44 +00:00
uid20006
87b373b3d8 touch does not work with directories in windows. 2005-08-16 18:24:28 +00:00
uid20006
e7ced7f8af using lfs.rmdir instead of os.remove. 2005-08-16 13:48:23 +00:00
uid20006
5cb0d77851 moved luaL_argcheck call. 2005-08-16 13:47:58 +00:00
uid20013
e224c98838 Closing directory after a complete traversal.
Adding tests for that.
2005-08-16 00:11:15 +00:00
tomas
865d2453ff Correcting option which only exists on MacOS X. 2005-06-27 17:06:01 +00:00
tomas
1a1f08c803 Library name without prefix: <lib>.so.<ver>
Adding symbolic link: <lib>.so -> <lib.so.<ver>
2005-06-24 01:49:16 +00:00
tomas
3479c6d935 Removing _NAME field. 2005-06-21 11:46:13 +00:00
tomas
26d207052c Cleaning unused libraries while building .so. 2005-06-10 13:01:15 +00:00
tuler
82926a72ed version update 2005-06-09 16:22:37 +00:00
tuler
7446e31486 new function rmdir 2005-06-09 16:19:27 +00:00
carregal
af9acdaf85 Documentation update 2005-06-08 14:25:09 +00:00
tomas
9015b5352b Correcting linking on MacOS X. 2005-06-06 22:15:53 +00:00
tomas
9f9257647e Excluding -ldl option (it seems not necessary).
Including configurable config file.
2005-06-06 20:10:10 +00:00
tomas
95bd727a3d Standardizing Makefile and config. 2005-06-05 00:36:18 +00:00
tomas
9265a97822 Cleanup. 2005-06-04 18:22:29 +00:00
tuler
97abe2139e new function lfs.rmdir 2005-06-03 21:50:59 +00:00
tuler
197032fa7b changed link to LuaBinaries 2005-06-02 21:14:53 +00:00
carregal
bfe68e98e6 Documentation update 2005-06-02 21:02:44 +00:00
uid20006
99443a0111 correting name of generated zip file. 2005-05-30 19:18:44 +00:00
15 changed files with 540 additions and 259 deletions

View File

@@ -1,41 +1,23 @@
# $Id: Makefile,v 1.19 2005/05/30 17:54:49 uid20006 Exp $
# $Id: Makefile,v 1.30 2007/06/07 01:28:08 tomas Exp $
T= lfs
V= 1.3.0
CONFIG= ./config
include ./config
include $(CONFIG)
V= 1.1
DIST_DIR= luafilesystem-$V
TAR_FILE= $(DIST_DIR).tar.gz
ZIP_FILE= $(DIST_DIR).zip
LIBNAME= lib$T.$V.so
COMPAT_O= $(COMPAT_DIR)/compat-5.1.o
SRCS= src/$T.c
OBJS= src/$T.o $(COMPAT_O)
OBJS= src/$T.o
lib: src/$(LIBNAME)
src/$(LIBNAME): $(OBJS)
$(CC) $(CFLAGS) $(LIBS) $(LIB_OPTION) -o src/$(LIBNAME) $(OBJS)
$(COMPAT_O): $(COMPAT_DIR)/compat-5.1.c
$(CC) -c $(CFLAGS) -o $@ $(COMPAT_DIR)/compat-5.1.c
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/$(LIBNAME) $(OBJS)
install: src/$(LIBNAME)
mkdir -p $(LUA_LIBDIR)
cp src/$(LIBNAME) $(LUA_LIBDIR)
ln -f -s $(LUA_LIBDIR)/$(LIBNAME) $(LUA_LIBDIR)/$T.so
cd $(LUA_LIBDIR); ln -f -s $(LIBNAME) $T.so
clean:
rm -f $L src/$(LIBNAME) $(OBJS)
dist: dist_dir
tar -czf $(TAR_FILE) $(DIST_DIR)
zip -rq $(ZIP_FILE) $(DIST_DIR)/*
rm -rf $(DIST_DIR)
dist_dir:
mkdir -p $(DIST_DIR)
cp config $(SRCS) $T.h $T.def Makefile *html luafilesystem.png $(DIST_DIR)
rm -f src/$(LIBNAME) $(OBJS)

24
Makefile.win Normal file
View File

@@ -0,0 +1,24 @@
# $Id: Makefile.win,v 1.5 2007/08/30 14:38:07 tomas Exp $
T= lfs
V= 1.3.0
include config.win
SRCS= src\$T.c
OBJS= src\$T.obj
lib: src\$(LIBNAME)
.c.obj:
$(CC) /c /Fo$@ $(CFLAGS) $<
src\$(LIBNAME): $(OBJS)
link /dll /def:src\$T.def /out:src\$(LIBNAME) $(OBJS) $(LUA_LIB)
install: src\$(LIBNAME)
IF NOT EXIST $(LUA_LIBDIR) mkdir $(LUA_LIBDIR)
copy src\$(LIBNAME) $(LUA_LIBDIR)
clean:
del src\$(LIBNAME) $(OBJS) src\$T.lib src\$T.exp

30
README Normal file
View File

@@ -0,0 +1,30 @@
LuaFileSystem - File System Library for Lua
Copyright 2003-2007 Kepler Project
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.3.0
Unix Installation
-----------------
To install on Linux/OSX/BSD, please edit the config file and then call
make
make install
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.

22
config
View File

@@ -1,22 +1,24 @@
# Installation directories
# Default installation prefix
PREFIX=/usr/local
# System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= /usr/local/lib/lua/5.0
LUA_LIBDIR= $(PREFIX)/lib/lua/5.1
# Lua includes directory
LUA_INC= /usr/local/include/lua5
LUA_INC= $(PREFIX)/include
# OS dependent
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X
LIB_OPTION= -shared #for Linux
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X
COMPAT_DIR= ../compat/src
LIBNAME= $T.so.$V
# Compilation directives
# On FreeBSD systems, the following line should be commented
DLLIB= -ldl
#LUA_LIBS= -llua50 -lm
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings
INCS= -I$(LUA_INC) -I$(COMPAT_DIR)
LIBS= $(LUA_LIBS) $(DLLIB)
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic
INCS= -I$(LUA_INC)
CFLAGS= $(WARN) $(INCS)
CC= gcc
# $Id: config,v 1.21 2007/10/27 22:42:32 carregal Exp $

17
config.win Normal file
View File

@@ -0,0 +1,17 @@
# Installation directories
# System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= c:\lua5.1
# Lua includes directory
LUA_INC= c:\lua5.1\include
# Lua library
LUA_LIB= c:\lua5.1\lua5.1.lib
LIBNAME= $T.dll
# Compilation directives
WARN= /O2
INCS= /I$(LUA_INC)
CFLAGS= $(WARN) $(INCS)
CC= cl
# $Id: config.win,v 1.4 2007/05/18 19:52:59 carregal Exp $

View File

@@ -12,9 +12,11 @@
<div id="container">
<div id="product">
<div id="product_logo"><a href="http://www.keplerproject.org">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a></div>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
@@ -37,11 +39,18 @@
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><strong>Examples</strong></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
@@ -84,10 +93,8 @@ attrdir (".")
</div> <!-- id="main" -->
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer"><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.3 2005/05/20 18:04:56 uid20002 Exp $
</small></p>
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: examples.html,v 1.7 2007/10/26 21:44:43 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

View File

@@ -6,14 +6,17 @@
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"><a href="http://www.keplerproject.org">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a></div>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
@@ -36,11 +39,18 @@
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
@@ -57,45 +67,69 @@ systems offered by the standard Lua distribution.</p>
the underlying directory structure and file attributes.</p>
<p>LuaFileSystem is free software and uses the same
<a href="license.html">license</a> as Lua 5.0.</p>
<a href="license.html">license</a> as Lua 5.1.</p>
<h2><a name="status"></a>Status</h2>
<p>Current version is 1.1. It was developed for Lua 5.0.</p>
<p>Version 1.1 follows the
<a href="http://www.keplerproject.org/compat">package model</a>
for Lua 5.1 (see section <a href="manual.html#installation">Installation</a>
for more details).</p>
<p>Current version is 1.3.0. It was developed for Lua 5.1.</p>
<h2><a name="download"></a>Download</h2>
<p>LuaFileSystem can be downloaded in source format from its
<p>LuaFileSystem source can be downloaded from its
<a href="http://luaforge.net/projects/luafilesystem/files">Lua Forge</a>
page. If you are using
<a href="http://luaforge.net/projects/luabinaries/">LuaBinaries</a> Release 2
a Windows pre-compiled version of LuaFileSystem can also be found at the same
LuaForge page.</p>
<a href="http://luabinaries.luaforge.net">LuaBinaries</a> 5.1.2 a Windows binary
version of LuaFileSystem can be found at the same LuaForge page.</p>
<h2><a name="history"></a>History</h2>
<ul>
<li>[30/May/2005] Version 1.1 released<br/>
added function <code>lfs.touch</code>.
</li>
<li>[21/Jan/2005] Version 1.0 released</li>
<li>[10/Nov/2004] Version 1.0 beta released</li>
</ul>
<dl class="history">
<dt><strong>Version 1.3.0</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>
<ul>
<li>compatible only with Lua 5.1 (Lua 5.0 support was dropped)</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2</a></strong> [15/Mar/2006]</dt>
<dd>
<ul>
<li>added optional argument to
<a href="manual.html#attributes"><code>lfs.attributes</code></a></li>
<li>added function
<a href="manual.html#rmdir"><code>lfs.rmdir</code></a></li>
<li>bug correction on <code>lfs.dir</code></li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.1/">Version 1.1</a></strong> [30/May/2005]</dt>
<dd>
<ul>
<li>added function <code>lfs.touch</code>.</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.0/">Version 1.0</a></strong> [21/Jan/2005]</dt>
<dd />
<dt><strong>Version 1.0 Beta</strong> [10/Nov/2004]</dt>
<dd />
</dl>
<h2><a name="credits"></a>Credits</h2>
<p>LuaFileSystem was designed by Roberto Ierusalimschy,
Andr&eacute; Carregal and Tom&aacute;s Guisasola as part of the
<a href="http://www.keplerproject.org">Kepler Project</a>
<a href="http://www.keplerproject.org">Kepler Project</a>,
which holds its copyright.</p>
<h2><a name="contact"></a>Contact us</h2>
@@ -104,15 +138,16 @@ which holds its copyright.</p>
<a href="mailto:info-NO-SPAM-THANKS@keplerproject.org">contact us</a>.
Comments are welcome!</p>
<p>You can also reach other Kepler developers and users on the Kepler Project
<a href="http://luaforge.net/mail/?group_id=104">mailing list</a>.</p>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer"><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.22 2005/05/30 18:25:15 uid20002 Exp $
</small></p>
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: index.html,v 1.37 2007/10/26 21:44:43 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

View File

@@ -6,14 +6,17 @@
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"><a href="http://www.keplerproject.org">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a></div>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
@@ -36,11 +39,18 @@
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><strong>License</strong></li>
</ul>
</div> <!-- id="navigation" -->
@@ -75,7 +85,7 @@ Ierusalimschy, Andr&eacute; Carregal and Tom&aacute;s Guisasola.
The implementation is not derived from licensed software.</p>
<hr/>
<p>Copyright &copy; 2004-2005 The Kepler Project.</p>
<p>Copyright &copy; 2004-2007 Kepler Project.</p>
<p>Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -102,10 +112,8 @@ SOFTWARE.</p>
</div> <!-- id="main" -->
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer"><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.7 2005/05/20 18:43:00 uid20006 Exp $
</small></p>
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: license.html,v 1.11 2007/10/26 21:44:43 carregal Exp $</small></p>
</div><!-- id="about" -->
</div><!-- id="container" -->

View File

@@ -12,9 +12,9 @@
<div id="container">
<div id="product">
<div id="product_logo"><a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a></div>
<div id="product_logo">
<a href="http://www.keplerproject.org"><img alt="LuaFileSystem" src="luafilesystem.png"/></a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
@@ -37,11 +37,18 @@
<li><strong>Manual</strong>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
@@ -57,39 +64,57 @@ systems offered by the standard Lua distribution.</p>
<p>LuaFileSystem offers a portable way to access
the underlying directory structure and file attributes.</p>
<p>LuaFileSystem source is distributed as a pair of C source and header
files. The distribution provides a <code>Makefile</code> prepared to
compile the library and install it. The file <code>config</code> should
be edited to suit the needs of the aimed platform.</p>
<h2><a name="building"></a>Building</h2>
<p>
LuaFileSystem should be built with Lua 5.1 so the language library
and header files for the target version must be installed properly.
</p>
<p>
LuaFileSystem offers a Makefile and a separate configuration file,
<code>config</code>,
which should be edited to suit your installation before runnig
<code>make</code>.
The file has some definitions like paths to the external libraries,
compiler options and the like.
</p>
<h2><a name="installation"></a>Installation</h2>
<p>LuaFileSystem follows the
<a href="http://www.keplerproject.org/compat">package model</a>
for Lua 5.1, therefore it should be "installed". Refer to
<a href="http://www.keplerproject.org/compat/manual.html#configuration">
Compat-5.1 configuration</a> section about how to install the compiled
binary properly</p>
<p>The LuaFileSystem 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>
<p>Windows users can use the pre-compiled version of LuaFileSystem
<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>
<a href="http://luaforge.net/projects/luafilesystem/files">LuaForge</a>.</p>
<h2><a name="reference"></a>Reference</h2>
<p>LuaFileSystem offers the following functions:</p>
<p>
LuaFileSystem offers the following functions:
</p>
<dl class="reference">
<dt><a name="attributes"></a><strong><code>lfs.attributes (filepath)</code></strong></dt>
<dd>Returns a table with the file attributes corresponding to <code>filepath</code>.
The attributes are:
<dt><a name="attributes"></a><strong><code>lfs.attributes (filepath [, aname])</code></strong></dt>
<dd>Returns a table with the file attributes corresponding to
<code>filepath</code> (or <code>nil</code> followed by an error message
in case of error).
If the second optional argument is given, then only the value of the
named attribute is returned (this use is equivalent to
<code>lfs.attributes(filepath).aname</code>, but the table is not created
and only one attribute is retrieved from the O.S.).
The attributes are described as follows;
attribute <code>mode</code> is a string, all the others are numbers,
and the time related attributes use the same time reference of
<a href="http://www.lua.org/manual/5.1/manual.html#pdf-os.time"><code>os.time</code></a>:
<dl>
<dt><strong><code>dev</code></strong></dt>
<dd>on Unix systems, represents the device that the inode resides on. On Windows systems,
<dd>on Unix systems, this represents the device that the inode resides on. On Windows systems,
represents the drive number of the disk containing the file</dd>
<dt><strong><code>ino</code></strong></dt>
<dd>on Unix systems, represents the inode number. On Windows systems this has no meaning</dd>
<dd>on Unix systems, this represents the inode number. On Windows systems this has no meaning</dd>
<dt><strong><code>mode</code></strong></dt>
<dd>string representing the associated protection mode (the values could be
@@ -107,7 +132,7 @@ binary properly</p>
<dd>group-id of owner (Unix only, always 0 on Windows)</dd>
<dt><strong><code>rdev</code></strong></dt>
<dd>on Unix systems, represents the device type, for special file inode.
<dd>on Unix systems, represents the device type, for special file inodes.
On Windows systems represents the same as <code>dev</code></dd>
<dt><strong><code>access</code></strong></dt>
@@ -128,6 +153,12 @@ binary properly</p>
<dt><strong><code>blksize</code></strong></dt>
<dd>optimal file system I/O blocksize; (Unix only)</dd>
</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>
<dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt>
@@ -141,8 +172,12 @@ binary properly</p>
plus an error string.</dd>
<dt><a name="dir"></a><strong><code>lfs.dir (path)</code></strong></dt>
<dd>Lua iterator over the entries of a given directory. Raises an
error if <code>path</code> is not a directory.</dd>
<dd>
Lua iterator over the entries of a given directory.
Each time the iterator is called it returns a string with an entry of the
directory; <code>nil</code> is returned when there is no more entries.
Raises an error if <code>path</code> is not a directory.
</dd>
<dt><a name="lock"></a><strong><code>lfs.lock (filehandle, mode[, start[, length]])</code></strong></dt>
<dd>Locks a file or a part of it. This function works on <em>open files</em>; the
@@ -152,27 +187,41 @@ binary properly</p>
write/exclusive lock). The optional arguments <code>start</code>
and <code>length</code> can be used to specify a starting point and
its length; both should be numbers.<br />
Returns a boolean indicating if the operation was successful; in
case of error, it returns <code>false</code> plus an error string.
Returns <code>true</code> if the operation was successful; in
case of error, it returns <code>nil</code> plus an error string.
</dd>
<dt><a name="mkdir"></a><strong><code>lfs.mkdir (dirname)</code></strong></dt>
<dd>Creates a new directory. The argument is the name of the new
directory.<br />
Returns a boolean indicating whether the operation succeeds or not
(in this case, an error string is returned too).</dd>
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.
</dd>
<dt><a name="rmdir"></a><strong><code>lfs.rmdir (dirname)</code></strong></dt>
<dd>Removes an existing directory. The argument is the name of the directory.<br />
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.</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>
<dd>Set access and modification times of a file. This function is
a bind to <code>utime</code> function. The first argument is the
filename, the second argument (<code>atime</code>) is the access time,
and the third argument (<code>mtime</code>) is the modification time.
Both times are provided in seconds (which should be generated with
Lua standard function <code>os.date</code>).
If the modifition time is omitted, the access time provided is used;
Lua standard function <code>os.time</code>).
If the modification time is omitted, the access time provided is used;
if both times are omitted, the current time is used.<br />
Returns a boolean indicating whether the operation succeeded or not
(followed by an error string when it fails).</dd>
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.
</dd>
<dt><a name="unlock"></a><strong><code>lfs.unlock (filehandle[, start[, length]])</code></strong></dt>
<dd>Unlocks a file or a part of it. This function works on
@@ -180,9 +229,9 @@ binary properly</p>
argument. The optional arguments <code>start</code> and
<code>length</code> can be used to specify a starting point and its
length; both should be numbers.<br />
Returns a boolean indicating if the operation was successful; in
case of error, it returns <code>false</code> plus a string
describing the error.</dd>
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.
</dd>
</dl>
</div> <!-- id="content" -->
@@ -190,10 +239,8 @@ binary properly</p>
</div> <!-- id="main" -->
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer"><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.21 2005/05/24 23:27:34 carregal Exp $
</small></p>
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: manual.html,v 1.37 2007/10/26 21:44:43 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

316
src/lfs.c
View File

@@ -1,4 +1,7 @@
/*
** LuaFileSystem
** Copyright Kepler Project 2004-2007 (http://www.keplerproject.org/luafilesystem)
**
** File system manipulation library.
** This library offers these functions:
** lfs.attributes (filepath [, attributename])
@@ -7,10 +10,12 @@
** lfs.dir (path)
** lfs.lock (fh, mode)
** lfs.mkdir (path)
** lfs.rmdir (path)
** lfs.symlinkattributes (filepath [, attributename]) -- thanks to Sam Roberts
** lfs.touch (filepath [, atime [, mtime]])
** lfs.unlock (fh)
**
** $Id: lfs.c,v 1.21 2005/05/20 18:32:19 uid20006 Exp $
** $Id: lfs.c,v 1.42 2007/10/26 21:01:07 carregal Exp $
*/
#include <errno.h>
@@ -35,8 +40,6 @@
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include "compat-5.1.h"
#include "lfs.h"
/* Define 'strerror' for systems that do not implement it */
@@ -54,12 +57,15 @@
#define DIR_METATABLE "directory metatable"
#define MAX_DIR_LENGTH 1023
#ifdef _WIN32
typedef struct dir_data {
int closed;
#ifdef _WIN32
long hFile;
char pattern[MAX_DIR_LENGTH+1];
} dir_data;
#else
DIR *dir;
#endif
} dir_data;
/*
@@ -175,7 +181,7 @@ static int file_lock (lua_State *L) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushboolean (L, 0);
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
@@ -196,40 +202,13 @@ static int file_unlock (lua_State *L) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushboolean (L, 0);
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
}
/*
static void cgilua_sleep( lua_State *L )
{
unsigned int usec = (unsigned int)luaL_check_number( L, 1 );
#ifndef _WIN32
sleep( (unsigned int)ceil( usec/1000.0 ));
#else
Sleep( (DWORD)usec );
#endif
}
static void cgilua_filesize( lua_State *L )
{
struct stat info;
char *file = luaL_check_string( L, 1 );
if (stat(file, &info))
{
lua_pushnil( L );
lua_pushstring( L, "Cannot retrieve stat info from file" );
return;
}
lua_pushnumber(L, info.st_size);
}
*/
static int make_dir (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
int fail;
@@ -241,23 +220,47 @@ static int make_dir (lua_State *L) {
fail = mkdir (path, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP |
S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH );
#endif
lua_pushboolean (L, !fail);
if (fail) {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
umask (oldmask);
lua_pushboolean (L, 1);
return 1;
}
/*
** Removes a directory.
** @param #1 Directory path.
*/
static int remove_dir (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
int fail;
fail = rmdir (path);
if (fail) {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
lua_pushboolean (L, 1);
return 1;
}
/*
** Directory iterator
*/
static int dir_iter (lua_State *L) {
#ifdef _WIN32
dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1));
struct _finddata_t c_file;
#else
struct dirent *entry;
#endif
dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1));
luaL_argcheck (L, !d->closed, 1, "closed directory");
#ifdef _WIN32
if (d->hFile == 0L) { /* first entry */
if ((d->hFile = _findfirst (d->pattern, &c_file)) == -1L) {
lua_pushnil (L);
@@ -268,22 +271,26 @@ static int dir_iter (lua_State *L) {
return 1;
}
} else { /* next entry */
if (_findnext (d->hFile, &c_file) == -1L)
if (_findnext (d->hFile, &c_file) == -1L) {
/* no more entries => close directory */
_findclose (d->hFile);
d->closed = 1;
return 0;
else {
} else {
lua_pushstring (L, c_file.name);
return 1;
}
}
#else
DIR *d = *(DIR **) lua_touserdata (L, lua_upvalueindex (1));
struct dirent *entry;
if ((entry = readdir (d)) != NULL) {
if ((entry = readdir (d->dir)) != NULL) {
lua_pushstring (L, entry->d_name);
return 1;
}
else
} else {
/* no more entries => close directory */
closedir (d->dir);
d->closed = 1;
return 0;
}
#endif
}
@@ -292,15 +299,17 @@ static int dir_iter (lua_State *L) {
** Closes directory iterators
*/
static int dir_close (lua_State *L) {
#ifdef _WIN32
dir_data *d = (dir_data *)lua_touserdata (L, 1);
if (d->hFile) {
#ifdef _WIN32
if (!d->closed && d->hFile) {
_findclose (d->hFile);
d->closed = 1;
}
#else
DIR *d = *(DIR **)lua_touserdata (L, 1);
if (d)
closedir (d);
if (!d->closed && d->dir) {
closedir (d->dir);
d->closed = 1;
}
#endif
return 0;
}
@@ -311,21 +320,21 @@ static int dir_close (lua_State *L) {
*/
static int dir_iter_factory (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
dir_data *d = (dir_data *) lua_newuserdata (L, sizeof(dir_data));
d->closed = 0;
#ifdef _WIN32
dir_data *dir = (dir_data *) lua_newuserdata (L, sizeof(dir_data));
dir->hFile = 0L;
d->hFile = 0L;
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
if (strlen(path) > MAX_DIR_LENGTH)
luaL_error (L, "path too long: %s", path);
else
sprintf (dir->pattern, "%s/*", path);
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
sprintf (d->pattern, "%s/*", path);
#else
DIR **d = (DIR **) lua_newuserdata (L, sizeof(DIR *));
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
*d = opendir (path);
if (*d == NULL)
d->dir = opendir (path);
if (d->dir == NULL)
luaL_error (L, "cannot open %s: %s", path, strerror (errno));
#endif
lua_pushcclosure (L, dir_iter, 1);
@@ -421,93 +430,158 @@ static int file_utime (lua_State *L) {
}
/* inode protection mode */
static void push_st_mode (lua_State *L, struct stat *info) {
lua_pushstring (L, mode2string (info->st_mode));
}
/* device inode resides on */
static void push_st_dev (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_dev);
}
/* inode's number */
static void push_st_ino (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_ino);
}
/* number of hard links to the file */
static void push_st_nlink (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_nlink);
}
/* user-id of owner */
static void push_st_uid (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_uid);
}
/* group-id of owner */
static void push_st_gid (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_gid);
}
/* device type, for special file inode */
static void push_st_rdev (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_rdev);
}
/* time of last access */
static void push_st_atime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_atime);
}
/* time of last data modification */
static void push_st_mtime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_mtime);
}
/* time of last file status change */
static void push_st_ctime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_ctime);
}
/* file size, in bytes */
static void push_st_size (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_size);
}
#ifndef _WIN32
/* blocks allocated for file */
static void push_st_blocks (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_blocks);
}
/* optimal file system I/O blocksize */
static void push_st_blksize (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_blksize);
}
#endif
typedef void (*_push_function) (lua_State *L, struct stat *info);
struct _stat_members {
const char *name;
_push_function push;
};
struct _stat_members members[] = {
{ "mode", push_st_mode },
{ "dev", push_st_dev },
{ "ino", push_st_ino },
{ "nlink", push_st_nlink },
{ "uid", push_st_uid },
{ "gid", push_st_gid },
{ "rdev", push_st_rdev },
{ "access", push_st_atime },
{ "modification", push_st_mtime },
{ "change", push_st_ctime },
{ "size", push_st_size },
#ifndef _WIN32
{ "blocks", push_st_blocks },
{ "blksize", push_st_blksize },
#endif
{ NULL, NULL }
};
/*
** Get file information
** Get file or symbolic link information
*/
static int file_info (lua_State *L) {
static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
int i;
struct stat info;
const char *file = luaL_checkstring (L, 1);
if (stat(file, &info)) {
if (st(file, &info)) {
lua_pushnil (L);
lua_pushfstring (L, "cannot obtain information from file `%s'", file);
return 2;
}
lua_newtable (L);
/* device inode resides on */
lua_pushliteral (L, "dev");
lua_pushnumber (L, (lua_Number)info.st_dev);
lua_rawset (L, -3);
/* inode's number */
lua_pushliteral (L, "ino");
lua_pushnumber (L, (lua_Number)info.st_ino);
lua_rawset (L, -3);
/* inode protection mode */
lua_pushliteral (L, "mode");
lua_pushstring (L, mode2string (info.st_mode));
lua_rawset (L, -3);
/* number of hard links to the file */
lua_pushliteral (L, "nlink");
lua_pushnumber (L, (lua_Number)info.st_nlink);
lua_rawset (L, -3);
/* user-id of owner */
lua_pushliteral (L, "uid");
lua_pushnumber (L, (lua_Number)info.st_uid);
lua_rawset (L, -3);
/* group-id of owner */
lua_pushliteral (L, "gid");
lua_pushnumber (L, (lua_Number)info.st_gid);
lua_rawset (L, -3);
/* device type, for special file inode */
lua_pushliteral (L, "rdev");
lua_pushnumber (L, (lua_Number)info.st_rdev);
lua_rawset (L, -3);
/* time of last access */
lua_pushliteral (L, "access");
lua_pushnumber (L, info.st_atime);
lua_rawset (L, -3);
/* time of last data modification */
lua_pushliteral (L, "modification");
lua_pushnumber (L, info.st_mtime);
lua_rawset (L, -3);
/* time of last file status change */
lua_pushliteral (L, "change");
lua_pushnumber (L, info.st_ctime);
lua_rawset (L, -3);
/* file size, in bytes */
lua_pushliteral (L, "size");
lua_pushnumber (L, (lua_Number)info.st_size);
lua_rawset (L, -3);
if (lua_isstring (L, 2)) {
int v;
const char *member = lua_tostring (L, 2);
if (strcmp (member, "mode") == 0) v = 0;
#ifndef _WIN32
/* blocks allocated for file */
lua_pushliteral (L, "blocks");
lua_pushnumber (L, (lua_Number)info.st_blocks);
lua_rawset (L, -3);
/* optimal file system I/O blocksize */
lua_pushliteral (L, "blksize");
lua_pushnumber (L, (lua_Number)info.st_blksize);
lua_rawset (L, -3);
else if (strcmp (member, "blocks") == 0) v = 11;
else if (strcmp (member, "blksize") == 0) v = 12;
#endif
else /* look for member */
for (v = 1; members[v].name; v++)
if (*members[v].name == *member)
break;
/* push member value and return */
members[v].push (L, &info);
return 1;
} else if (!lua_istable (L, 2))
/* creates a table if none is given */
lua_newtable (L);
/* stores all members in table on top of the stack */
for (i = 0; members[i].name; i++) {
lua_pushstring (L, members[i].name);
members[i].push (L, &info);
lua_rawset (L, -3);
}
return 1;
}
/*
** 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.
*/
static void set_info (lua_State *L) {
lua_pushliteral (L, "_COPYRIGHT");
lua_pushliteral (L, "Copyright (C) 2004-2005 Kepler Project");
lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
lua_settable (L, -3);
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_settable (L, -3);
lua_pushliteral (L, "_NAME");
lua_pushliteral (L, "LuaFileSystem");
lua_settable (L, -3);
lua_pushliteral (L, "_VERSION");
lua_pushliteral (L, "1.1");
lua_pushliteral (L, "LuaFileSystem 1.3.0");
lua_settable (L, -3);
}
@@ -519,6 +593,10 @@ static const struct luaL_reg fslib[] = {
{"dir", dir_iter_factory},
{"lock", file_lock},
{"mkdir", make_dir},
{"rmdir", remove_dir},
#ifndef _WIN32
{"symlinkattributes", link_info},
#endif
{"touch", file_utime},
{"unlock", file_unlock},
{NULL, NULL},
@@ -526,7 +604,7 @@ static const struct luaL_reg fslib[] = {
int luaopen_lfs (lua_State *L) {
dir_create_meta (L);
luaL_openlib (L, "lfs", fslib, 0);
luaL_register (L, "lfs", fslib);
set_info (L);
return 1;
}

5
src/lfs.def Normal file
View File

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

View File

@@ -1,5 +1,11 @@
/*
** LuaFileSystem
** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem)
**
** $Id: lfs.h,v 1.3 2006/03/10 23:37:32 carregal Exp $
*/
/* Define 'chdir' for systems that do not implement it */
/* $Id: lfs.h,v 1.1 2004/07/29 14:26:33 tomas Exp $ */
#ifdef NO_CHDIR
#define chdir(p) (-1)
#define chdir_error "Function 'chdir' not provided by system"

View File

@@ -1,15 +1,16 @@
#!/usr/local/bin/lua
#!/usr/local/bin/lua5.1
local tmp = "/tmp"
local sep = "/"
local upper = ".."
require"lfs"
print (lfs._VERSION)
function attrdir (path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'/'..file
local f = path..sep..file
print ("\t=> "..f.." <=")
local attr = lfs.attributes (f)
assert (type(attr) == "table")
@@ -31,32 +32,71 @@ assert (lfs.chdir (upper), "could not change to upper directory")
assert (lfs.chdir (reldir), "could not change back to current directory")
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")
-- Changing creating and removing directories
local tmpdir = tmp.."/lfs_tmp_dir"
local tmpdir = current..sep.."lfs_tmp_dir"
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")
local attrib, errmsg = lfs.attributes (tmpdir)
if not attrib then
error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg)
else
-- Change access time
assert (lfs.touch (tmpdir, 11))
local new_att = assert (lfs.attributes (tmpdir))
assert (new_att.access == 11, "could not set access time")
assert (new_att.modification == 11, "could not set modification time")
-- Change access and modification time
assert (lfs.touch (tmpdir, 33, 22))
local new_att = assert (lfs.attributes (tmpdir))
assert (new_att.access == 33, "could not set access time")
assert (new_att.modification == 22, "could not set modification time")
-- Restore access time to current value
assert (lfs.touch (tmpdir))
new_att = assert (lfs.attributes (tmpdir))
assert (new_att.access == attrib.access)
assert (new_att.modification == attrib.modification)
end
assert (os.remove (tmpdir), "could not remove new directory")
assert (lfs.mkdir (tmpdir.."/lfs_tmp_dir") == false, "could create a directory inside a non-existent one")
--
local f = io.open(tmpfile, "w")
f:close()
-- Change access time
local testdate = os.time({ year = 2007, day = 10, month = 2, hour=0})
assert (lfs.touch (tmpfile, testdate))
local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate, "could not set access time")
assert (new_att.modification == testdate, "could not set modification time")
-- Change access and modification time
local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0})
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))
assert (new_att.access == testdate2, "could not set access time")
assert (new_att.modification == testdate1, "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
-- Restore access time to current value
assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == attrib.access)
assert (new_att.modification == attrib.modification)
-- Remove new file and directory
assert (os.remove (tmpfile), "could not remove new file")
assert (lfs.rmdir (tmpdir), "could not remove new directory")
assert (lfs.mkdir (tmpdir..sep.."lfs_tmp_dir") == nil, "could create a directory inside a non-existent one")
-- Trying to get attributes of a non-existent file
assert (lfs.attributes ("this couldn't be an actual file") == nil, "could get attributes of a non-existent file")
assert (type(lfs.attributes (upper)) == "table", "couldn't get attributes of upper directory")
-- Stressing directory iterator
count = 0
for i = 1, 4000 do
for file in lfs.dir (tmp) do
count = count + 1
end
end
print"Ok!"

View File

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

View File

@@ -56,7 +56,7 @@ LINK32=link.exe
# ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../bin/vc6/lfs.dll" /libpath:"../../external-src/lua50/lib/dll"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=cd ../bin/vc6 zip.exe lfs-1.1-win32.zip lfs.dll
PostBuild_Cmds=cd ../bin/vc6 zip.exe luafilesystem-1.2-win32.zip lfs.dll
# End Special Build Tool
!ELSEIF "$(CFG)" == "luafilesystem_dll - Win32 Debug"