mirror of
https://github.com/lunarmodules/luafilesystem.git
synced 2026-07-22 11:03:07 +00:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecaa0a5ae8 | ||
|
|
50cf9740a6 | ||
|
|
f3deb0e4c6 | ||
|
|
164a44cb97 | ||
|
|
0182a1f17f | ||
|
|
0aa3bf9a0a | ||
|
|
d7c2e9d153 | ||
|
|
6d2f915ee4 | ||
|
|
2a11208d8e | ||
|
|
62946f1b92 | ||
|
|
a427f48bc8 | ||
|
|
e80d17dda9 | ||
|
|
e9edc5d7a9 | ||
|
|
b80c656dfb | ||
|
|
646a17acdd | ||
|
|
8db4be836c | ||
|
|
6d548640cb | ||
|
|
a3cf6af650 | ||
|
|
51c0586f9c | ||
|
|
3bdc8f7805 | ||
|
|
41aee28e62 | ||
|
|
8774e2caae | ||
|
|
e8e69b98f5 | ||
|
|
5d40ae7548 | ||
|
|
13cfce2191 | ||
|
|
bf9b039d9c | ||
|
|
ef77b214ee | ||
|
|
f22a37da92 | ||
|
|
bb0cb1f342 | ||
|
|
2d9b354920 | ||
|
|
cab9c08749 | ||
|
|
5f942164a0 | ||
|
|
2540f6cbdb | ||
|
|
57d3fc1c31 | ||
|
|
12ff66217f | ||
|
|
508c7b3b56 | ||
|
|
e99b7844bb | ||
|
|
86e97088a0 | ||
|
|
7a93f7ee03 | ||
|
|
9dc07b0ada |
29
Makefile
29
Makefile
@@ -1,34 +1,35 @@
|
||||
# $Id: Makefile,v 1.9 2004/11/10 14:44:01 tuler Exp $
|
||||
# $Id: Makefile,v 1.19 2005/05/30 17:54:49 uid20006 Exp $
|
||||
|
||||
T= lfs
|
||||
|
||||
include ./config
|
||||
|
||||
V= 1.0b
|
||||
V= 1.1
|
||||
DIST_DIR= luafilesystem-$V
|
||||
TAR_FILE= $(DIST_DIR).tar.gz
|
||||
ZIP_FILE= $(DIST_DIR).zip
|
||||
LIBNAME= lib$T.$V$(LIB_EXT)
|
||||
LIBNAME= lib$T.$V.so
|
||||
|
||||
SRCS= $T.c
|
||||
OBJS= $T.o compat-5.1.o
|
||||
COMPAT_O= $(COMPAT_DIR)/compat-5.1.o
|
||||
SRCS= src/$T.c
|
||||
OBJS= src/$T.o $(COMPAT_O)
|
||||
|
||||
|
||||
lib: $(LIBNAME)
|
||||
lib: src/$(LIBNAME)
|
||||
|
||||
$(LIBNAME): $(OBJS)
|
||||
$(CC) $(CFLAGS) $(LIB_OPTION) -o $(LIBNAME) $(OBJS) $(LIBS)
|
||||
src/$(LIBNAME): $(OBJS)
|
||||
$(CC) $(CFLAGS) $(LIBS) $(LIB_OPTION) -o src/$(LIBNAME) $(OBJS)
|
||||
|
||||
compat-5.1.o: $(COMPAT_DIR)/compat-5.1.c
|
||||
$(COMPAT_O): $(COMPAT_DIR)/compat-5.1.c
|
||||
$(CC) -c $(CFLAGS) -o $@ $(COMPAT_DIR)/compat-5.1.c
|
||||
|
||||
install: $(LIBNAME)
|
||||
mkdir -p $(LIB_DIR)
|
||||
cp $(LIBNAME) $(LIB_DIR)
|
||||
ln -f -s $(LIB_DIR)/$(LIBNAME) $(LIB_DIR)/$T$(LIB_EXT)
|
||||
install: src/$(LIBNAME)
|
||||
mkdir -p $(LUA_LIBDIR)
|
||||
cp src/$(LIBNAME) $(LUA_LIBDIR)
|
||||
ln -f -s $(LUA_LIBDIR)/$(LIBNAME) $(LUA_LIBDIR)/$T.so
|
||||
|
||||
clean:
|
||||
rm -f $L $(LIBNAME) $(OBJS)
|
||||
rm -f $L src/$(LIBNAME) $(OBJS)
|
||||
|
||||
dist: dist_dir
|
||||
tar -czf $(TAR_FILE) $(DIST_DIR)
|
||||
|
||||
19
config
19
config
@@ -1,23 +1,22 @@
|
||||
# Installation directories
|
||||
# System's libraries directory (where binary libraries are installed)
|
||||
LIB_DIR= /usr/local/lib
|
||||
# System's lua directory (where Lua libraries are installed)
|
||||
LUA_DIR= /usr/local/lua
|
||||
LUA_LIBDIR= /usr/local/lib/lua/5.0
|
||||
# Lua includes directory
|
||||
LUA_INC= /usr/local/include/lua5
|
||||
|
||||
# OS dependent
|
||||
LIB_EXT= .dylib
|
||||
#LIB_EXT= .so
|
||||
LIB_OPTION= -dynamiclib #for MacOS X
|
||||
#LIB_OPTION= -shared #for Linux
|
||||
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X
|
||||
LIB_OPTION= -shared #for Linux
|
||||
|
||||
COMPAT_DIR= .
|
||||
COMPAT_DIR= ../compat/src
|
||||
|
||||
# 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/usr/local/include/lua5 -I$(COMPAT_DIR)
|
||||
LIBS= -L$(LIB_DIR) -llua -llualib -lm $(DLLIB)
|
||||
INCS= -I$(LUA_INC) -I$(COMPAT_DIR)
|
||||
LIBS= $(LUA_LIBS) $(DLLIB)
|
||||
CFLAGS= $(WARN) $(INCS)
|
||||
CC= gcc
|
||||
|
||||
|
||||
96
doc/us/examples.html
Normal file
96
doc/us/examples.html
Normal file
@@ -0,0 +1,96 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>LuaFileSystem</title>
|
||||
<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">
|
||||
<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" -->
|
||||
|
||||
<div id="main">
|
||||
|
||||
<div id="navigation">
|
||||
<h1>LuaFileSystem</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#history">History</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</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="license.html">License</a></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<div id="content">
|
||||
|
||||
<h2><a name="example"></a>Examples</h2>
|
||||
|
||||
<h3>Directory iterator</h3>
|
||||
|
||||
<p>The following example iterates over a directory and recursively lists the
|
||||
attributes for each file inside it.</p>
|
||||
|
||||
<pre class="example">
|
||||
require"lfs"
|
||||
|
||||
function attrdir (path)
|
||||
for file in lfs.dir(path) do
|
||||
if file ~= "." and file ~= ".." then
|
||||
local f = path..'/'..file
|
||||
print ("\t "..f)
|
||||
local attr = lfs.attributes (f)
|
||||
assert (type(attr) == "table")
|
||||
if attr.mode == "directory" then
|
||||
attrdir (f)
|
||||
else
|
||||
for name, value in pairs(attr) do
|
||||
print (name, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
attrdir (".")
|
||||
</pre>
|
||||
|
||||
</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: examples.html,v 1.3 2005/05/20 18:04:56 uid20002 Exp $
|
||||
</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,122 +1,121 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
||||
<title>LuaFileSystem</title>
|
||||
<style type="text/css">
|
||||
ul { list-style-type: disc };
|
||||
</style>
|
||||
<title>LuaFileSystem</title>
|
||||
<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 bgcolor="#FFFFFF">
|
||||
<center>
|
||||
<table border="0" cellspacing="2" cellpadding="2">
|
||||
<tr>
|
||||
<td align="center"><a href="http://www.keplerproject.org"><img
|
||||
border="0" alt="LuaFileSystem" src="luafilesystem.png"></a> </td>
|
||||
</tr>
|
||||
<body>
|
||||
|
||||
<tr>
|
||||
<td align="center"><big><b>LuaFileSystem</b></big> </td>
|
||||
</tr>
|
||||
<div id="container">
|
||||
|
||||
<tr>
|
||||
<td align="center" valign="top">File System Library for the <a
|
||||
href="http://www.lua.org">Lua</a> Programming Language</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
<div id="product">
|
||||
<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" -->
|
||||
|
||||
<center><small><a href="#over">overview</a> · <a href=
|
||||
"#download">download</a> · <a href="manual.html">manual</a>
|
||||
· <a href="#credits">credits</a> · <a href=
|
||||
"#contact">contact us</a></small></center>
|
||||
<div id="main">
|
||||
|
||||
<div id="navigation">
|
||||
<h1>LuaFileSystem</h1>
|
||||
<ul>
|
||||
<li><strong>Home</strong>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#history">History</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</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="license.html">License</a></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<hr>
|
||||
<h2>Contents</h2>
|
||||
<div id="content">
|
||||
|
||||
<h2><a name="overview"></a>Overview</h2>
|
||||
|
||||
<p>LuaFileSystem is a <a href="http://www.lua.org">Lua</a> library
|
||||
developed to complement the set of functions related to file
|
||||
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 is free software and uses the same
|
||||
<a href="license.html">license</a> as Lua 5.0.</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>
|
||||
|
||||
|
||||
<h2><a name="download"></a>Download</h2>
|
||||
|
||||
<p>LuaFileSystem can be downloaded in source format 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>
|
||||
|
||||
|
||||
<h2><a name="history"></a>History</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="#over">Overview</a></li>
|
||||
|
||||
<li><a href="#version">Current Version</a></li>
|
||||
|
||||
<li><a href="#download">Download</a></li>
|
||||
|
||||
<li><a href="#manual">Manual</a></li>
|
||||
|
||||
<li><a href="#credits">Credits</a></li>
|
||||
|
||||
<li><a href="#contact">Contact us</a></li>
|
||||
<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>
|
||||
|
||||
<a name="over"></a>
|
||||
|
||||
<h2>Overview</h2>
|
||||
|
||||
<p>LuaFileSystem is a library developed to complement the set of
|
||||
functions related to file systems offered by the standard Lua
|
||||
distribution. One of its goals is to be as portable as Lua.</p>
|
||||
|
||||
<p>LuaFileSystem is free software and uses the same <a href=
|
||||
"license.html">license</a> as Lua 5.0. <a name="version"></a></p>
|
||||
|
||||
<h2>Current version</h2>
|
||||
|
||||
<p>Current version is 1.0 beta. It was developed for Lua 5.0.</p>
|
||||
|
||||
<p>Version 1.0 follows the <a href=
|
||||
"http://www.keplerproject.org/compat">package proposal</a> for Lua
|
||||
5.1 (see section <a href="#installation">Installation</a> for more
|
||||
details). <a name="download"></a></p>
|
||||
|
||||
<h2>Download</h2>
|
||||
|
||||
<p>LuaFileSystem can be downloaded from its <a href=
|
||||
"http://luaforge.net/project/showfiles.php?group_id=66">Lua
|
||||
Forge</a> page. <a name="new"></a></p>
|
||||
|
||||
<h2>What's new</h2>
|
||||
|
||||
<ul>
|
||||
<li>[10/nov/2004] Version 1.0 beta released</li>
|
||||
</ul>
|
||||
|
||||
<a name="installation"></a>
|
||||
|
||||
<h2>Installation</h2>
|
||||
|
||||
<p>LuaFileSystem is distributed as a pair of C source and header
|
||||
files. The distribution provides a <tt>Makefile</tt> prepared to
|
||||
compile the library and install it. The file <tt>config</tt> should
|
||||
be edited to suit the needs of the aimed platform.</p>
|
||||
|
||||
<p>LuaFileSystem follows the <a href=
|
||||
"http://www.keplerproject.org/compat">package proposal</a> for Lua
|
||||
5.1, therefore this package should be "installed". In other words,
|
||||
if you are using Lua 5.0, the files <tt>compat-5.1.c</tt> and
|
||||
<tt>compat-5.1.h</tt> must be used in the compilation and the file
|
||||
<tt>compat-5.1.lua</tt> must be installed in the <tt>LUA_PATH</tt>.
|
||||
If you are using Lua 5.1, nothing should be done.</p>
|
||||
|
||||
<a name="credits"></a>
|
||||
|
||||
<h2>Credits</h2>
|
||||
<h2><a name="credits"></a>Credits</h2>
|
||||
|
||||
<p>LuaFileSystem was designed by Roberto Ierusalimschy,
|
||||
André Carregal and Tomás Guisasola as part of <a
|
||||
href="http://www.keplerproject.org">The Kepler Project</a> which
|
||||
holds its copyright.</p>
|
||||
André Carregal and Tomás Guisasola as part of the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a>
|
||||
which holds its copyright.</p>
|
||||
|
||||
<a name="contact"></a>
|
||||
<h2><a name="contact"></a>Contact us</h2>
|
||||
|
||||
<h2>Contact us</h2>
|
||||
|
||||
<p>For more information please <a href=
|
||||
"mailto:info-NO-SPAM-THANKS@keplerproject.org">contact us</a>.
|
||||
<p>For more information please
|
||||
<a href="mailto:info-NO-SPAM-THANKS@keplerproject.org">contact us</a>.
|
||||
Comments are welcome!</p>
|
||||
|
||||
<hr>
|
||||
<small>$Id: index.html,v 1.6 2004/11/11 15:33:20 tomas Exp
|
||||
$</small>
|
||||
</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>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -1,23 +1,68 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
||||
<title>LuaFileSystem: license</title>
|
||||
<title>LuaFileSystem</title>
|
||||
<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 bgcolor="#FFFFFF">
|
||||
<hr>
|
||||
<body>
|
||||
|
||||
<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_name"><big><strong>LuaFileSystem</strong></big></div>
|
||||
<div id="product_description">File System Library for the Lua Programming Language</div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
<div id="main">
|
||||
|
||||
<div id="navigation">
|
||||
<h1>LuaFileSystem</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#history">History</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</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><strong>License</strong></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<div id="content">
|
||||
|
||||
<h1>License</h1>
|
||||
|
||||
<p>
|
||||
LuaFileSystem is free software: it can be used for both academic
|
||||
and commercial purposes at absolutely no cost. There are no
|
||||
royalties or GNU-like "copyleft" restrictions. LuaFileSystem
|
||||
qualifies as <a href=
|
||||
"http://www.opensource.org/docs/definition.html">Open Source</a>
|
||||
software. Its licenses are compatible with <a href=
|
||||
"http://www.gnu.org/licenses/gpl.html">GPL</a>. LuaFileSystem is
|
||||
not in the public domain and <a href=
|
||||
"http://www.keplerproject.org">The Kepler Project</a> keep its
|
||||
copyright. The legal details are below.
|
||||
qualifies as
|
||||
<a href="http://www.opensource.org/docs/definition.html">Open Source</a>
|
||||
software.
|
||||
Its licenses are compatible with
|
||||
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
|
||||
LuaFileSystem is not in the public domain and the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a>
|
||||
keep its copyright.
|
||||
The legal details are below.
|
||||
</p>
|
||||
|
||||
<p>The spirit of the license is that you are free to use
|
||||
LuaFileSystem for any purpose at no cost without having to ask us.
|
||||
@@ -29,12 +74,8 @@ somewhere in your product or its documentation.</p>
|
||||
Ierusalimschy, André Carregal and Tomás Guisasola.
|
||||
The implementation is not derived from licensed software.</p>
|
||||
|
||||
<p>
|
||||
<!-- ===================================================================== -->
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
Copyright © 2004 The Kepler Project.
|
||||
<hr/>
|
||||
<p>Copyright © 2004-2005 The Kepler Project.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
@@ -56,13 +97,18 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.</p>
|
||||
|
||||
<p>
|
||||
<!-- ===================================================================== -->
|
||||
</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: license.html,v 1.7 2005/05/20 18:43:00 uid20006 Exp $
|
||||
</small></p>
|
||||
</div><!-- id="about" -->
|
||||
|
||||
</div><!-- id="container" -->
|
||||
|
||||
<hr>
|
||||
<small>$Id: license.html,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp
|
||||
$</small>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -1,197 +1,202 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
||||
<title>LuaFileSystem</title>
|
||||
<style type="text/css">
|
||||
ul { list-style-type: disc };
|
||||
</style>
|
||||
<title>LuaFileSystem</title>
|
||||
<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 bgcolor="#FFFFFF">
|
||||
<hr>
|
||||
<center>
|
||||
<table border="0" cellspacing="2" cellpadding="2">
|
||||
<tr>
|
||||
<td align="center"><a href=
|
||||
"http://www.keplerproject.org/luafilesystem"><img border="0" alt=
|
||||
"LuaFileSystem logo" src="luafilesystem.png"></a> </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="center"><big><b>LuaFileSystem Reference Manual</b></big>
|
||||
</td>
|
||||
</tr>
|
||||
<body>
|
||||
|
||||
<tr>
|
||||
<td align="center" valign="top">File system library for the <a
|
||||
href="http://www.lua.org">Lua</a> programming language</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
<div id="container">
|
||||
|
||||
<center><small><a href="index.html">home</a> · <a href=
|
||||
"#introduction">introduction</a> · <a href=
|
||||
"#reference">reference</a> · <a href=
|
||||
"#example">example</a></small></center>
|
||||
<div id="product">
|
||||
<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" -->
|
||||
|
||||
<hr>
|
||||
<a name="introduction"></a>
|
||||
<div id="main">
|
||||
|
||||
<div id="navigation">
|
||||
<h1>LuaFileSystem</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#history">History</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Manual</strong>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</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="license.html">License</a></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<h2>Introduction</h2>
|
||||
<div id="content">
|
||||
|
||||
<h2><a name="introduction"></a>Introduction</h2>
|
||||
|
||||
<p>LuaFileSystem is a <a href="http://www.lua.org">Lua</a> library
|
||||
developed to complement the set of functions related to file
|
||||
systems offered by the standard Lua distribution.</p>
|
||||
|
||||
<p>LuaFileSystem is free software and uses the same <a href=
|
||||
"license.html">license</a> as Lua 5.0.</p>
|
||||
<p>LuaFileSystem offers a portable way to access
|
||||
the underlying directory structure and file attributes.</p>
|
||||
|
||||
<a name="reference"></a>
|
||||
<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>Reference</h2>
|
||||
<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>Windows users can use the pre-compiled 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>
|
||||
|
||||
<p>LuaFileSystem offers the following functions:</p>
|
||||
|
||||
<ul>
|
||||
<li style="list-style: none"><a name="attributes"></a></li>
|
||||
<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:
|
||||
<dl>
|
||||
<dt><strong><code>dev</code></strong></dt>
|
||||
<dd>on Unix systems, 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>
|
||||
|
||||
<dt><strong><code>mode</code></strong></dt>
|
||||
<dd>string representing the associated protection mode (the values could be
|
||||
<code>file</code>, <code>directory</code>, <code>link</code>, <code>socket</code>,
|
||||
<code>named pipe</code>, <code>char device</code>, <code>block device</code> or
|
||||
<code>other</code>)</dd>
|
||||
|
||||
<dt><strong><code>nlink</code></strong></dt>
|
||||
<dd>number of hard links to the file</dd>
|
||||
|
||||
<li><b><tt>lfs.attributes (filepath)</tt></b><br>
|
||||
Obtains the file attributes. The attributes are:
|
||||
<dt><strong><code>uid</code></strong></dt>
|
||||
<dd>user-id of owner (Unix only, always 0 on Windows)</dd>
|
||||
|
||||
<div style="margin-left: 2em"><i>dev</i>, device inode resides
|
||||
on;<br>
|
||||
<i>ino</i>, inode's number;<br>
|
||||
<i>mode</i>, inode protection mode (<small>values could be
|
||||
<tt>file</tt>, <tt>directory</tt>, <tt>link</tt>, <tt>socket</tt>,
|
||||
<tt>named pipe</tt>, <tt>char device</tt>, <tt>block device</tt> or
|
||||
<tt>other</tt></small>);<br>
|
||||
<i>nlink</i>, number of hard links to the file;<br>
|
||||
<i>uid</i>, user-id of owner;<br>
|
||||
<i>gid</i>, group-id of owner;<br>
|
||||
<i>rdev</i>, device type, for special file inode;<br>
|
||||
<i>access</i>, time of last access;<br>
|
||||
<i>modification</i>, time of last data modification;<br>
|
||||
<i>change</i>, time of last file status change;<br>
|
||||
<i>size</i>, file size, in bytes;<br>
|
||||
<i>blocks</i>, block allocated for file; (Unix only)<br>
|
||||
<i>blksize</i>, optimal file system I/O blocksize; (Unix only)<br>
|
||||
</div>
|
||||
<dt><strong><code>gid</code></strong></dt>
|
||||
<dd>group-id of owner (Unix only, always 0 on Windows)</dd>
|
||||
|
||||
Returns a table with file attributes described above. <a name=
|
||||
"chdir"></a></li>
|
||||
<dt><strong><code>rdev</code></strong></dt>
|
||||
<dd>on Unix systems, represents the device type, for special file inode.
|
||||
On Windows systems represents the same as <code>dev</code></dd>
|
||||
|
||||
<li><b><tt>lfs.chdir (path)</tt></b><br>
|
||||
Changes the current working directory to the given
|
||||
<tt>path</tt>.<br>
|
||||
Returns <tt>true</tt> in case of success or <tt>nil</tt> plus an
|
||||
error string. <a name="getcwd"></a></li>
|
||||
<dt><strong><code>access</code></strong></dt>
|
||||
<dd>time of last access</dd>
|
||||
|
||||
<li><b><tt>lfs.currentdir ()</tt></b><br>
|
||||
Returns a string with the current working directory or
|
||||
<code>nil</code> plus an error string. <a name="dir"></a></li>
|
||||
<dt><strong><code>modification</code></strong></dt>
|
||||
<dd>time of last data modification</dd>
|
||||
|
||||
<li><b><tt>lfs.dir (path)</tt></b><br>
|
||||
Lua iterator over the entries of a given directory. Raises an
|
||||
error if <tt>path</tt> is not a directory. <a name="lock"></a></li>
|
||||
<dt><strong><code>change</code></strong></dt>
|
||||
<dd>time of last file status change</dd>
|
||||
|
||||
<li><b><tt>lfs.lock (filehandle, mode[, start[,
|
||||
length]])</tt></b><br>
|
||||
Locks a file or a part of it. This function works on <em>open
|
||||
files</em>; the file handle should be specified as the first
|
||||
argument. The string <code>mode</code> could be either
|
||||
<code>r</code> (for a read/shared lock) or <code>w</code> (for a
|
||||
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.
|
||||
<a name="mkdir"></a></li>
|
||||
<dt><strong><code>size</code></strong></dt>
|
||||
<dd>file size, in bytes</dd>
|
||||
|
||||
<li><b><tt>lfs.mkdir (dirname)</tt></b><br>
|
||||
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). <a name=
|
||||
"unlock"></a></li>
|
||||
<dt><strong><code>blocks</code></strong></dt>
|
||||
<dd>block allocated for file; (Unix only)</dd>
|
||||
|
||||
<dt><strong><code>blksize</code></strong></dt>
|
||||
<dd>optimal file system I/O blocksize; (Unix only)</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
<li><b><tt>lfs.unlock (filehandle[, start[, length]])</tt></b><br>
|
||||
Unlocks a file or a part of it. This function works on <em>open
|
||||
files</em>; the file handle should be specified as the first
|
||||
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.</li>
|
||||
</ul>
|
||||
<dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt>
|
||||
<dd>Changes the current working directory to the given
|
||||
<code>path</code>.<br />
|
||||
Returns <code>true</code> in case of success or <code>nil</code> plus an
|
||||
error string.</dd>
|
||||
|
||||
<dt><a name="getcwd"></a><strong><code>lfs.currentdir ()</code></strong></dt>
|
||||
<dd>Returns a string with the current working directory or <code>nil</code>
|
||||
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>
|
||||
|
||||
<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
|
||||
file handle should be specified as the first argument.
|
||||
The string <code>mode</code> could be either
|
||||
<code>r</code> (for a read/shared lock) or <code>w</code> (for a
|
||||
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.
|
||||
</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>
|
||||
|
||||
<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;
|
||||
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>
|
||||
|
||||
<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
|
||||
<em>open files</em>; the file handle should be specified as the first
|
||||
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>
|
||||
</dl>
|
||||
|
||||
<a name="example"></a>
|
||||
</div> <!-- id="content" -->
|
||||
|
||||
<h2>Example</h2>
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<pre>
|
||||
require"lfs"
|
||||
<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>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
function attrdir (path)
|
||||
for file in lfs.dir(path) do
|
||||
if file ~= "." and file ~= ".." then
|
||||
local f = path..'/'..file
|
||||
print ("\t "..f)
|
||||
local attr = lfs.attributes (f)
|
||||
assert (type(attr) == "table")
|
||||
if attr.mode == "directory" then
|
||||
attrdir (f)
|
||||
else
|
||||
for name, value in pairs(attr) do
|
||||
print (name, value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
attrdir (".")
|
||||
</pre>
|
||||
|
||||
<a name="contents"></a>
|
||||
|
||||
<h2>Contents</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="#introduction">Introduction</a></li>
|
||||
|
||||
<li><a href="#reference">Reference</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="#chdir">chdir</a></li>
|
||||
|
||||
<li><a href="#currentdir">currentdir</a></li>
|
||||
|
||||
<li><a href="#dir">dir</a></li>
|
||||
|
||||
<li><a href="#lock">lock</a></li>
|
||||
|
||||
<li><a href="#mkdir">mkdir</a></li>
|
||||
|
||||
<li><a href="#unlock">unlock</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><a href="#examples">Examples</a></li>
|
||||
</ul>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
|
||||
<center><small><a href="index.html">home</a> · <a href=
|
||||
"#introduction">introduction</a> · <a href=
|
||||
"#reference">reference</a> · <a href=
|
||||
"#example">example</a></small></center>
|
||||
|
||||
<hr>
|
||||
<small>$Id: manual.html,v 1.7 2004/11/10 14:09:45 tuler Exp
|
||||
$</small>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
96
src/lfs.c
96
src/lfs.c
@@ -5,11 +5,12 @@
|
||||
** lfs.chdir (path)
|
||||
** lfs.currentdir ()
|
||||
** lfs.dir (path)
|
||||
** lfs.mkdir (path)
|
||||
** lfs.lock (fh, mode)
|
||||
** lfs.mkdir (path)
|
||||
** lfs.touch (filepath [, atime [, mtime]])
|
||||
** lfs.unlock (fh)
|
||||
**
|
||||
** $Id: lfs.c,v 1.14 2004/11/17 14:08:04 tomas Exp $
|
||||
** $Id: lfs.c,v 1.21 2005/05/20 18:32:19 uid20006 Exp $
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
@@ -18,15 +19,17 @@
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
#include <direct.h>
|
||||
#include <io.h>
|
||||
#include <sys/locking.h>
|
||||
#include <sys/utime.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <utime.h>
|
||||
#endif
|
||||
|
||||
#include "lua.h"
|
||||
@@ -114,13 +117,13 @@ static FILE *check_file (lua_State *L, int idx, const char *funcname) {
|
||||
*/
|
||||
static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long start, long len, const char *funcname) {
|
||||
int code;
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
/* lkmode valid values are:
|
||||
_LK_LOCK Locks the specified bytes. If the bytes cannot be locked, the program immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, the constant returns an error.
|
||||
_LK_NBLCK Locks the specified bytes. If the bytes cannot be locked, the constant returns an error.
|
||||
_LK_NBRLCK Same as _LK_NBLCK.
|
||||
_LK_RLCK Same as _LK_LOCK.
|
||||
_LK_UNLCK Unlocks the specified bytes, which must have been previously locked.
|
||||
LK_LOCK Locks the specified bytes. If the bytes cannot be locked, the program immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, the constant returns an error.
|
||||
LK_NBLCK Locks the specified bytes. If the bytes cannot be locked, the constant returns an error.
|
||||
LK_NBRLCK Same as _LK_NBLCK.
|
||||
LK_RLCK Same as _LK_LOCK.
|
||||
LK_UNLCK Unlocks the specified bytes, which must have been previously locked.
|
||||
|
||||
Regions should be locked only briefly and should be unlocked before closing a file or exiting the program.
|
||||
|
||||
@@ -128,10 +131,10 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
|
||||
*/
|
||||
int lkmode;
|
||||
switch (*mode) {
|
||||
case 'r': lkmode = _LK_NBLCK; break;
|
||||
case 'w': lkmode = _LK_NBLCK; break;
|
||||
case 'u': lkmode = _LK_UNLCK; break;
|
||||
default : luaL_error (L, "%s: invalid mode", funcname);
|
||||
case 'r': lkmode = LK_NBLCK; break;
|
||||
case 'w': lkmode = LK_NBLCK; break;
|
||||
case 'u': lkmode = LK_UNLCK; break;
|
||||
default : return luaL_error (L, "%s: invalid mode", funcname);
|
||||
}
|
||||
if (!len) {
|
||||
fseek (fh, 0L, SEEK_END);
|
||||
@@ -145,7 +148,7 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
|
||||
case 'w': f.l_type = F_WRLCK; break;
|
||||
case 'r': f.l_type = F_RDLCK; break;
|
||||
case 'u': f.l_type = F_UNLCK; break;
|
||||
default : luaL_error (L, "%s: invalid mode", funcname);
|
||||
default : return luaL_error (L, "%s: invalid mode", funcname);
|
||||
}
|
||||
f.l_whence = SEEK_SET;
|
||||
f.l_start = (off_t)start;
|
||||
@@ -205,7 +208,7 @@ static void cgilua_sleep( lua_State *L )
|
||||
{
|
||||
unsigned int usec = (unsigned int)luaL_check_number( L, 1 );
|
||||
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
sleep( (unsigned int)ceil( usec/1000.0 ));
|
||||
#else
|
||||
Sleep( (DWORD)usec );
|
||||
@@ -230,7 +233,7 @@ static void cgilua_filesize( lua_State *L )
|
||||
static int make_dir (lua_State *L) {
|
||||
const char *path = luaL_checkstring (L, 1);
|
||||
int fail;
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
int oldmask = umask (0);
|
||||
fail = _mkdir (path);
|
||||
#else
|
||||
@@ -345,18 +348,32 @@ static int dir_create_meta (lua_State *L) {
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#define S_ISDIR(mode) (mode&_S_IFDIR)
|
||||
#define S_ISREG(mode) (mode&_S_IFREG)
|
||||
#define S_ISLNK(mode) (0)
|
||||
#define S_ISSOCK(mode) (0)
|
||||
#define S_ISFIFO(mode) (0)
|
||||
#define S_ISCHR(mode) (mode&_S_IFCHR)
|
||||
#define S_ISBLK(mode) (0)
|
||||
#ifndef S_ISDIR
|
||||
#define S_ISDIR(mode) (mode&_S_IFDIR)
|
||||
#endif
|
||||
#ifndef S_ISREG
|
||||
#define S_ISREG(mode) (mode&_S_IFREG)
|
||||
#endif
|
||||
#ifndef S_ISLNK
|
||||
#define S_ISLNK(mode) (0)
|
||||
#endif
|
||||
#ifndef S_ISSOCK
|
||||
#define S_ISSOCK(mode) (0)
|
||||
#endif
|
||||
#ifndef S_ISFIFO
|
||||
#define S_ISFIFO(mode) (0)
|
||||
#endif
|
||||
#ifndef S_ISCHR
|
||||
#define S_ISCHR(mode) (mode&_S_IFCHR)
|
||||
#endif
|
||||
#ifndef S_ISBLK
|
||||
#define S_ISBLK(mode) (0)
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
** Convert the inode protection mode to a string.
|
||||
*/
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
static const char *mode2string (unsigned short mode) {
|
||||
#else
|
||||
static const char *mode2string (mode_t mode) {
|
||||
@@ -380,6 +397,30 @@ static const char *mode2string (mode_t mode) {
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Set access time and modification values for file
|
||||
*/
|
||||
static int file_utime (lua_State *L) {
|
||||
const char *file = luaL_checkstring (L, 1);
|
||||
struct utimbuf utb, *buf;
|
||||
|
||||
if (lua_gettop (L) == 1) /* set to current date/time */
|
||||
buf = NULL;
|
||||
else {
|
||||
utb.actime = (time_t)luaL_optnumber (L, 2, 0);
|
||||
utb.modtime = (time_t)luaL_optnumber (L, 3, utb.actime);
|
||||
buf = &utb;
|
||||
}
|
||||
if (utime (file, buf)) {
|
||||
lua_pushnil (L);
|
||||
lua_pushfstring (L, "%s", strerror (errno));
|
||||
return 2;
|
||||
}
|
||||
lua_pushboolean (L, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Get file information
|
||||
*/
|
||||
@@ -437,7 +478,7 @@ static int file_info (lua_State *L) {
|
||||
lua_pushliteral (L, "size");
|
||||
lua_pushnumber (L, (lua_Number)info.st_size);
|
||||
lua_rawset (L, -3);
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
/* blocks allocated for file */
|
||||
lua_pushliteral (L, "blocks");
|
||||
lua_pushnumber (L, (lua_Number)info.st_blocks);
|
||||
@@ -457,7 +498,7 @@ static int file_info (lua_State *L) {
|
||||
*/
|
||||
static void set_info (lua_State *L) {
|
||||
lua_pushliteral (L, "_COPYRIGHT");
|
||||
lua_pushliteral (L, "Copyright (C) 2004 Kepler Project");
|
||||
lua_pushliteral (L, "Copyright (C) 2004-2005 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");
|
||||
@@ -466,7 +507,7 @@ static void set_info (lua_State *L) {
|
||||
lua_pushliteral (L, "LuaFileSystem");
|
||||
lua_settable (L, -3);
|
||||
lua_pushliteral (L, "_VERSION");
|
||||
lua_pushliteral (L, "1.0b");
|
||||
lua_pushliteral (L, "1.1");
|
||||
lua_settable (L, -3);
|
||||
}
|
||||
|
||||
@@ -478,6 +519,7 @@ static const struct luaL_reg fslib[] = {
|
||||
{"dir", dir_iter_factory},
|
||||
{"lock", file_lock},
|
||||
{"mkdir", make_dir},
|
||||
{"touch", file_utime},
|
||||
{"unlock", file_unlock},
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
@@ -32,9 +32,31 @@ 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
|
||||
assert (lfs.mkdir (tmp.."/lfs_tmp_dir"), "could not make a new directory")
|
||||
assert (os.remove (tmp.."/lfs_tmp_dir"), "could not remove new directory")
|
||||
assert (lfs.mkdir (tmp.."/lfs_tmp_dir/lfs_tmp_dir") == false, "could create a directory inside a non-existent one")
|
||||
local tmpdir = tmp.."/lfs_tmp_dir"
|
||||
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")
|
||||
--
|
||||
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")
|
||||
print"Ok!"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
LIBRARY lfs.dll
|
||||
DESCRIPTION "LuaFileSystem"
|
||||
VERSION 1.0
|
||||
VERSION 1.1
|
||||
EXPORTS
|
||||
luaopen_lfs
|
||||
|
||||
@@ -43,7 +43,7 @@ RSC=rc.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../lua/include" /I "../../compat" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x416 /d "NDEBUG"
|
||||
@@ -53,7 +53,11 @@ BSC32=bscmake.exe
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 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
|
||||
# ADD LINK32 lua50.lib lualib50.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:"../../lua/lib/vc6"
|
||||
# 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
|
||||
# End Special Build Tool
|
||||
|
||||
!ELSEIF "$(CFG)" == "luafilesystem_dll - Win32 Debug"
|
||||
|
||||
@@ -69,7 +73,7 @@ LINK32=link.exe
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../lua/include" /I "../../compat" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x416 /d "_DEBUG"
|
||||
@@ -79,7 +83,7 @@ BSC32=bscmake.exe
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 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 /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 lua50d.lib lualib50d.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 /debug /machine:I386 /out:"../bin/vc6/lfsd.dll" /pdbtype:sept /libpath:"../../lua/lib/vc6"
|
||||
# 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 /debug /machine:I386 /out:"../bin/vc6/lfsd.dll" /pdbtype:sept /libpath:"../../external-src/lua50/lib/dll"
|
||||
|
||||
!ENDIF
|
||||
|
||||
@@ -92,15 +96,15 @@ LINK32=link.exe
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\..\compat\compat-5.1.c"
|
||||
SOURCE="..\..\compat\src\compat-5.1.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\lfs.c
|
||||
SOURCE=..\src\lfs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\lfs.def
|
||||
SOURCE=.\lfs.def
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
@@ -108,11 +112,11 @@ SOURCE=..\lfs.def
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\..\compat\compat-5.1.h"
|
||||
SOURCE="..\..\compat\src\compat-5.1.h"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\lfs.h
|
||||
SOURCE=..\src\lfs.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
Reference in New Issue
Block a user