mirror of
https://github.com/lunarmodules/luafilesystem.git
synced 2026-07-22 11:03:07 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2afb826d96 | ||
|
|
00be93ab51 | ||
|
|
0147f85957 | ||
|
|
d5c95fbf86 |
4
Makefile
4
Makefile
@@ -1,7 +1,7 @@
|
||||
# $Id: Makefile,v 1.30 2007/06/07 01:28:08 tomas Exp $
|
||||
# $Id: Makefile,v 1.26.2.1 2007/05/08 21:35:11 carregal Exp $
|
||||
|
||||
T= lfs
|
||||
V= 1.3.0
|
||||
V= 1.2.1
|
||||
CONFIG= ./config
|
||||
|
||||
include $(CONFIG)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# $Id: Makefile.win,v 1.5 2007/08/30 14:38:07 tomas Exp $
|
||||
# $Id: Makefile.win,v 1.4.2.1 2007/05/08 21:35:11 carregal Exp $
|
||||
|
||||
T= lfs
|
||||
V= 1.3.0
|
||||
V= 1.2.1
|
||||
|
||||
include config.win
|
||||
|
||||
|
||||
20
README
20
README
@@ -1,19 +1,9 @@
|
||||
LuaFileSystem - File System Library for Lua
|
||||
Copyright 2003-2007 Kepler Project
|
||||
Copyright 2003-2007 PUC-Rio
|
||||
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 is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. LuaFileSystem is free software and uses the same license as Lua 5.1 Current version is 1.2.1.
|
||||
|
||||
LuaFileSystem 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
|
||||
@@ -21,10 +11,4 @@ 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.
|
||||
13
config
13
config
@@ -1,13 +1,8 @@
|
||||
# Installation directories
|
||||
|
||||
# Default installation prefix
|
||||
PREFIX=/usr/local
|
||||
|
||||
# System's libraries directory (where binary libraries are installed)
|
||||
LUA_LIBDIR= $(PREFIX)/lib/lua/5.1
|
||||
|
||||
LUA_LIBDIR= /usr/local/lib/lua/5.1
|
||||
# Lua includes directory
|
||||
LUA_INC= $(PREFIX)/include
|
||||
LUA_INC= /usr/local/include/lua51
|
||||
|
||||
# OS dependent
|
||||
LIB_OPTION= -shared #for Linux
|
||||
@@ -16,9 +11,9 @@ LIB_OPTION= -shared #for Linux
|
||||
LIBNAME= $T.so.$V
|
||||
|
||||
# Compilation directives
|
||||
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic
|
||||
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings
|
||||
INCS= -I$(LUA_INC)
|
||||
CFLAGS= $(WARN) $(INCS)
|
||||
CC= gcc
|
||||
|
||||
# $Id: config,v 1.21 2007/10/27 22:42:32 carregal Exp $
|
||||
# $Id: config,v 1.14.2.1 2007/05/08 21:35:10 carregal Exp $
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Installation directories
|
||||
# System's libraries directory (where binary libraries are installed)
|
||||
LUA_LIBDIR= c:\lua5.1
|
||||
LUA_LIBDIR= c:\lua5.1\lib
|
||||
# Lua includes directory
|
||||
LUA_INC= c:\lua5.1\include
|
||||
# Lua library
|
||||
LUA_LIB= c:\lua5.1\lua5.1.lib
|
||||
LUA_LIB= c:\lua5.1\bin\lua5.1.lib
|
||||
|
||||
LIBNAME= $T.dll
|
||||
|
||||
@@ -14,4 +14,4 @@ INCS= /I$(LUA_INC)
|
||||
CFLAGS= $(WARN) $(INCS)
|
||||
CC= cl
|
||||
|
||||
# $Id: config.win,v 1.4 2007/05/18 19:52:59 carregal Exp $
|
||||
# $Id: config.win,v 1.3.2.1 2007/05/08 21:35:10 carregal Exp $
|
||||
|
||||
@@ -93,8 +93,9 @@ attrdir (".")
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<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>
|
||||
<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.5.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
@@ -71,7 +71,7 @@ the underlying directory structure and file attributes.</p>
|
||||
|
||||
<h2><a name="status"></a>Status</h2>
|
||||
|
||||
<p>Current version is 1.3.0. It was developed for Lua 5.1.</p>
|
||||
<p>Current version is 1.2.1. It was developed for Lua 5.1.</p>
|
||||
|
||||
<h2><a name="download"></a>Download</h2>
|
||||
|
||||
@@ -84,23 +84,14 @@ version of LuaFileSystem can be found at the same LuaForge page.</p>
|
||||
<h2><a name="history"></a>History</h2>
|
||||
|
||||
<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>
|
||||
<dt><strong>Version 1.2.1</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>
|
||||
<dt><strong>Version 1.2</strong> [15/Mar/2006]</dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li>added optional argument to
|
||||
@@ -146,8 +137,9 @@ Comments are welcome!</p>
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<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>
|
||||
<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.30.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
@@ -85,7 +85,7 @@ Ierusalimschy, André Carregal and Tomás Guisasola.
|
||||
The implementation is not derived from licensed software.</p>
|
||||
|
||||
<hr/>
|
||||
<p>Copyright © 2004-2007 Kepler Project.</p>
|
||||
<p>Copyright © 2004-2007 The Kepler Project.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
@@ -112,8 +112,9 @@ SOFTWARE.</p>
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<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>
|
||||
<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.9.2.1 2007/05/08 21:35:11 carregal Exp $</small></p>
|
||||
</div><!-- id="about" -->
|
||||
|
||||
</div><!-- id="container" -->
|
||||
|
||||
@@ -153,12 +153,6 @@ LuaFileSystem offers the following functions:
|
||||
<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>
|
||||
@@ -203,20 +197,13 @@ LuaFileSystem offers the following functions:
|
||||
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.time</code>).
|
||||
Lua standard function <code>os.date</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 <code>true</code> if the operation was successful;
|
||||
@@ -239,8 +226,9 @@ LuaFileSystem offers the following functions:
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<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>
|
||||
<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.30.2.2 2007/05/08 21:35:11 carregal Exp $</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
|
||||
40
src/lfs.c
40
src/lfs.c
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
** LuaFileSystem
|
||||
** Copyright Kepler Project 2004-2007 (http://www.keplerproject.org/luafilesystem)
|
||||
** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem)
|
||||
**
|
||||
** File system manipulation library.
|
||||
** This library offers these functions:
|
||||
@@ -11,11 +11,10 @@
|
||||
** 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.42 2007/10/26 21:01:07 carregal Exp $
|
||||
** $Id: lfs.c,v 1.32.2.1 2007/05/08 21:35:10 carregal Exp $
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
@@ -255,8 +254,6 @@ static int remove_dir (lua_State *L) {
|
||||
static int dir_iter (lua_State *L) {
|
||||
#ifdef _WIN32
|
||||
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");
|
||||
@@ -282,6 +279,7 @@ static int dir_iter (lua_State *L) {
|
||||
}
|
||||
}
|
||||
#else
|
||||
struct dirent *entry;
|
||||
if ((entry = readdir (d->dir)) != NULL) {
|
||||
lua_pushstring (L, entry->d_name);
|
||||
return 1;
|
||||
@@ -512,14 +510,14 @@ struct _stat_members members[] = {
|
||||
};
|
||||
|
||||
/*
|
||||
** Get file or symbolic link information
|
||||
** Get file information
|
||||
*/
|
||||
static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
|
||||
static int file_info (lua_State *L) {
|
||||
int i;
|
||||
struct stat info;
|
||||
const char *file = luaL_checkstring (L, 1);
|
||||
|
||||
if (st(file, &info)) {
|
||||
if (stat(file, &info)) {
|
||||
lua_pushnil (L);
|
||||
lua_pushfstring (L, "cannot obtain information from file `%s'", file);
|
||||
return 2;
|
||||
@@ -529,7 +527,6 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
|
||||
const char *member = lua_tostring (L, 2);
|
||||
if (strcmp (member, "mode") == 0) v = 0;
|
||||
#ifndef _WIN32
|
||||
else if (strcmp (member, "blocks") == 0) v = 11;
|
||||
else if (strcmp (member, "blksize") == 0) v = 12;
|
||||
#endif
|
||||
else /* look for member */
|
||||
@@ -552,24 +549,6 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Get file information using stat.
|
||||
*/
|
||||
static int file_info (lua_State *L) {
|
||||
return _file_info_ (L, stat);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Get symbolic link information using lstat.
|
||||
*/
|
||||
#ifndef _WIN32
|
||||
static int link_info (lua_State *L) {
|
||||
return _file_info_ (L, lstat);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
** Assumes the table is on top of the stack.
|
||||
*/
|
||||
@@ -581,7 +560,7 @@ static void set_info (lua_State *L) {
|
||||
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, "_VERSION");
|
||||
lua_pushliteral (L, "LuaFileSystem 1.3.0");
|
||||
lua_pushliteral (L, "LuaFileSystem 1.2.1");
|
||||
lua_settable (L, -3);
|
||||
}
|
||||
|
||||
@@ -594,9 +573,6 @@ static const struct luaL_reg fslib[] = {
|
||||
{"lock", file_lock},
|
||||
{"mkdir", make_dir},
|
||||
{"rmdir", remove_dir},
|
||||
#ifndef _WIN32
|
||||
{"symlinkattributes", link_info},
|
||||
#endif
|
||||
{"touch", file_utime},
|
||||
{"unlock", file_unlock},
|
||||
{NULL, NULL},
|
||||
@@ -604,7 +580,7 @@ static const struct luaL_reg fslib[] = {
|
||||
|
||||
int luaopen_lfs (lua_State *L) {
|
||||
dir_create_meta (L);
|
||||
luaL_register (L, "lfs", fslib);
|
||||
luaL_openlib (L, "lfs", fslib, 0);
|
||||
set_info (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -34,17 +34,8 @@ assert (lfs.currentdir() == current, "error trying to change directories")
|
||||
assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory")
|
||||
|
||||
-- Changing creating and removing directories
|
||||
local tmpdir = current..sep.."lfs_tmp_dir"
|
||||
local tmpdir = tmp..sep.."lfs_tmp_dir"
|
||||
local tmpfile = tmpdir..sep.."tmp_file"
|
||||
-- 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
|
||||
@@ -54,31 +45,19 @@ 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))
|
||||
assert (lfs.touch (tmpfile, 86401))
|
||||
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")
|
||||
assert (new_att.access == 86401, "could not set access time")
|
||||
assert (new_att.modification == 86401, "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))
|
||||
assert (lfs.touch (tmpfile, 86403, 86402))
|
||||
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
|
||||
assert (new_att.access == 86403, "could not set access time")
|
||||
assert (new_att.modification == 86402, "could not set modification time")
|
||||
|
||||
-- Restore access time to current value
|
||||
assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
|
||||
assert (lfs.touch (tmpfile))
|
||||
new_att = assert (lfs.attributes (tmpfile))
|
||||
assert (new_att.access == attrib.access)
|
||||
assert (new_att.modification == attrib.modification)
|
||||
|
||||
Reference in New Issue
Block a user