From 57a64a5cfee378f331ae425945a8026bcc668a8b Mon Sep 17 00:00:00 2001
From: tomas
Date: Thu, 7 Jun 2007 01:28:08 +0000
Subject: Adding function symlinkatributes. Updating version to 1.3.0
---
Makefile | 4 ++--
doc/us/index.html | 12 ++++++++++--
doc/us/manual.html | 13 ++++++++++++-
src/lfs.c | 30 ++++++++++++++++++++++++------
tests/test.lua | 6 ++++++
5 files changed, 54 insertions(+), 11 deletions(-)
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]
-
@@ -139,7 +147,7 @@ Comments are welcome!

-
$Id: index.html,v 1.35 2007/05/08 19:23:12 carregal Exp $
+
$Id: index.html,v 1.36 2007/06/07 01:28:08 tomas Exp $
diff --git a/doc/us/manual.html b/doc/us/manual.html
index c7b7a5f..04e490a 100644
--- a/doc/us/manual.html
+++ b/doc/us/manual.html
@@ -153,6 +153,12 @@ LuaFileSystem offers the following functions:
blksize
- optimal file system I/O blocksize; (Unix only)
+ 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:

-
$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))
--
cgit v1.2.3-55-g6feb