diff --git a/Makefile b/Makefile index 068f309..f356cf3 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -# $Id: Makefile,v 1.29 2006/12/04 15:28:53 mascarenhas Exp $ +# $Id: Makefile,v 1.30 2007/06/07 01:28:08 tomas Exp $ T= lfs -V= 1.2.1 +V= 1.3.0 CONFIG= ./config include $(CONFIG) diff --git a/doc/us/index.html b/doc/us/index.html index c48b19a..f0d78f5 100644 --- a/doc/us/index.html +++ b/doc/us/index.html @@ -71,7 +71,7 @@ the underlying directory structure and file attributes.

Status

-

Current version is 1.2.1. It was developed for Lua 5.1.

+

Current version is 1.3.0. It was developed for Lua 5.1.

Download

@@ -84,6 +84,14 @@ version of LuaFileSystem can be found at the same LuaForge page.

History

+
Version 1.3.0 [?/Jun/2007]
+
+ +
+
Version 1.2.1 [08/May/2007]
+ This function uses stat internally thus if the given + filepath 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 + lfs.symlinkattributes.
lfs.chdir (path)
@@ -197,6 +203,11 @@ LuaFileSystem offers the following functions: Returns true if the operation was successful; in case of error, it returns nil plus an error string. +
lfs.symlinkattributes (filepath [, aname])
+
Identical to lfs.attributes except that + it obtains information about the link itself (not the file it refers to). +
+
lfs.touch (filepath [, atime [, mtime]])
Set access and modification times of a file. This function is a bind to utime function. The first argument is the @@ -228,7 +239,7 @@ LuaFileSystem offers the following functions:

Valid XHTML 1.0!

-

$Id: manual.html,v 1.35 2007/05/17 23:08:56 carregal Exp $

+

$Id: manual.html,v 1.36 2007/06/07 01:28:08 tomas Exp $

diff --git a/src/lfs.c b/src/lfs.c index bc763c1..e86840a 100644 --- a/src/lfs.c +++ b/src/lfs.c @@ -1,6 +1,6 @@ /* ** LuaFileSystem -** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem) +** Copyright Kepler Project 2004-2007 (http://www.keplerproject.org/luafilesystem) ** ** File system manipulation library. ** This library offers these functions: @@ -11,10 +11,11 @@ ** 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.37 2007/05/15 12:58:35 tomas Exp $ +** $Id: lfs.c,v 1.38 2007/06/07 01:28:08 tomas Exp $ */ #include @@ -511,14 +512,14 @@ struct _stat_members members[] = { }; /* -** 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; @@ -550,6 +551,22 @@ static int file_info (lua_State *L) { } +/* +** Get file information using stat. +*/ +static int file_info (lua_State *L) { + return _file_info_ (L, stat); +} + + +/* +** Get symbolic link information using lstat. +*/ +static int link_info (lua_State *L) { + return _file_info_ (L, lstat); +} + + /* ** Assumes the table is on top of the stack. */ @@ -561,7 +578,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.2.1"); + lua_pushliteral (L, "LuaFileSystem 1.3.0"); lua_settable (L, -3); } @@ -574,6 +591,7 @@ static const struct luaL_reg fslib[] = { {"lock", file_lock}, {"mkdir", make_dir}, {"rmdir", remove_dir}, + {"symlinkattributes", link_info}, {"touch", file_utime}, {"unlock", file_unlock}, {NULL, NULL}, diff --git a/tests/test.lua b/tests/test.lua index 94338b0..b7479e4 100644 --- a/tests/test.lua +++ b/tests/test.lua @@ -69,6 +69,12 @@ 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") +-- Checking symbolic link information +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_") + -- Restore access time to current value assert (lfs.touch (tmpfile, attrib.access, attrib.modification)) new_att = assert (lfs.attributes (tmpfile))