aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomas <tomas>2007-06-07 01:28:08 +0000
committertomas <tomas>2007-06-07 01:28:08 +0000
commit57a64a5cfee378f331ae425945a8026bcc668a8b (patch)
tree77101c424f96ca8bb594c24e303c86136c60fab9
parent47f40e5705c53425ca0d22662f31c6742c2a5569 (diff)
downloadluafilesystem-57a64a5cfee378f331ae425945a8026bcc668a8b.tar.gz
luafilesystem-57a64a5cfee378f331ae425945a8026bcc668a8b.tar.bz2
luafilesystem-57a64a5cfee378f331ae425945a8026bcc668a8b.zip
Adding function symlinkatributes. Updating version to 1.3.0
-rw-r--r--Makefile4
-rw-r--r--doc/us/index.html12
-rw-r--r--doc/us/manual.html13
-rw-r--r--src/lfs.c30
-rw-r--r--tests/test.lua6
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 @@
1# $Id: Makefile,v 1.29 2006/12/04 15:28:53 mascarenhas Exp $ 1# $Id: Makefile,v 1.30 2007/06/07 01:28:08 tomas Exp $
2 2
3T= lfs 3T= lfs
4V= 1.2.1 4V= 1.3.0
5CONFIG= ./config 5CONFIG= ./config
6 6
7include $(CONFIG) 7include $(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.</p>
71 71
72<h2><a name="status"></a>Status</h2> 72<h2><a name="status"></a>Status</h2>
73 73
74<p>Current version is 1.2.1. It was developed for Lua 5.1.</p> 74<p>Current version is 1.3.0. It was developed for Lua 5.1.</p>
75 75
76<h2><a name="download"></a>Download</h2> 76<h2><a name="download"></a>Download</h2>
77 77
@@ -84,6 +84,14 @@ version of LuaFileSystem can be found at the same LuaForge page.</p>
84<h2><a name="history"></a>History</h2> 84<h2><a name="history"></a>History</h2>
85 85
86<dl class="history"> 86<dl class="history">
87 <dt><strong>Version 1.3.0</strong> [?/Jun/2007]</dt>
88 <dd>
89 <ul>
90 <li>added function
91 <a href="manual.html#symlinkattributes"><code>lfs.symlinkattributes</code></a></li>
92 </ul>
93 </dd>
94
87 <dt><strong>Version 1.2.1</strong> [08/May/2007]</dt> 95 <dt><strong>Version 1.2.1</strong> [08/May/2007]</dt>
88 <dd> 96 <dd>
89 <ul> 97 <ul>
@@ -139,7 +147,7 @@ Comments are welcome!</p>
139<div id="about"> 147<div id="about">
140 <p><a href="http://validator.w3.org/check?uri=referer"> 148 <p><a href="http://validator.w3.org/check?uri=referer">
141 <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p> 149 <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
142 <p><small>$Id: index.html,v 1.35 2007/05/08 19:23:12 carregal Exp $</small></p> 150 <p><small>$Id: index.html,v 1.36 2007/06/07 01:28:08 tomas Exp $</small></p>
143</div> <!-- id="about" --> 151</div> <!-- id="about" -->
144 152
145</div> <!-- id="container" --> 153</div> <!-- id="container" -->
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:
153 <dt><strong><code>blksize</code></strong></dt> 153 <dt><strong><code>blksize</code></strong></dt>
154 <dd>optimal file system I/O blocksize; (Unix only)</dd> 154 <dd>optimal file system I/O blocksize; (Unix only)</dd>
155 </dl> 155 </dl>
156 This function uses <code>stat</code> internally thus if the given
157 <code>filepath</code> is a symbolic link, it is followed (if it points to
158 another link the chain is followed recursively) and the information
159 is about the file it refers to.
160 To obtain information about the link itself, see function
161 <a href="#symlinkattributes">lfs.symlinkattributes</a>.
156 </dd> 162 </dd>
157 163
158 <dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt> 164 <dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt>
@@ -197,6 +203,11 @@ LuaFileSystem offers the following functions:
197 Returns <code>true</code> if the operation was successful; 203 Returns <code>true</code> if the operation was successful;
198 in case of error, it returns <code>nil</code> plus an error string.</dd> 204 in case of error, it returns <code>nil</code> plus an error string.</dd>
199 205
206 <dt><a name="symlinkattributes"></a><strong><code>lfs.symlinkattributes (filepath [, aname])</code></strong></dt>
207 <dd>Identical to <a href="#attributes">lfs.attributes</a> except that
208 it obtains information about the link itself (not the file it refers to).
209 </dd>
210
200 <dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt> 211 <dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt>
201 <dd>Set access and modification times of a file. This function is 212 <dd>Set access and modification times of a file. This function is
202 a bind to <code>utime</code> function. The first argument is the 213 a bind to <code>utime</code> function. The first argument is the
@@ -228,7 +239,7 @@ LuaFileSystem offers the following functions:
228<div id="about"> 239<div id="about">
229 <p><a href="http://validator.w3.org/check?uri=referer"> 240 <p><a href="http://validator.w3.org/check?uri=referer">
230 <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p> 241 <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
231 <p><small>$Id: manual.html,v 1.35 2007/05/17 23:08:56 carregal Exp $</small></p> 242 <p><small>$Id: manual.html,v 1.36 2007/06/07 01:28:08 tomas Exp $</small></p>
232</div> <!-- id="about" --> 243</div> <!-- id="about" -->
233 244
234</div> <!-- id="container" --> 245</div> <!-- id="container" -->
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 @@
1/* 1/*
2** LuaFileSystem 2** LuaFileSystem
3** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem) 3** Copyright Kepler Project 2004-2007 (http://www.keplerproject.org/luafilesystem)
4** 4**
5** File system manipulation library. 5** File system manipulation library.
6** This library offers these functions: 6** This library offers these functions:
@@ -11,10 +11,11 @@
11** lfs.lock (fh, mode) 11** lfs.lock (fh, mode)
12** lfs.mkdir (path) 12** lfs.mkdir (path)
13** lfs.rmdir (path) 13** lfs.rmdir (path)
14** lfs.symlinkattributes (filepath [, attributename]) -- thanks to Sam Roberts
14** lfs.touch (filepath [, atime [, mtime]]) 15** lfs.touch (filepath [, atime [, mtime]])
15** lfs.unlock (fh) 16** lfs.unlock (fh)
16** 17**
17** $Id: lfs.c,v 1.37 2007/05/15 12:58:35 tomas Exp $ 18** $Id: lfs.c,v 1.38 2007/06/07 01:28:08 tomas Exp $
18*/ 19*/
19 20
20#include <errno.h> 21#include <errno.h>
@@ -511,14 +512,14 @@ struct _stat_members members[] = {
511}; 512};
512 513
513/* 514/*
514** Get file information 515** Get file or symbolic link information
515*/ 516*/
516static int file_info (lua_State *L) { 517static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
517 int i; 518 int i;
518 struct stat info; 519 struct stat info;
519 const char *file = luaL_checkstring (L, 1); 520 const char *file = luaL_checkstring (L, 1);
520 521
521 if (stat(file, &info)) { 522 if (st(file, &info)) {
522 lua_pushnil (L); 523 lua_pushnil (L);
523 lua_pushfstring (L, "cannot obtain information from file `%s'", file); 524 lua_pushfstring (L, "cannot obtain information from file `%s'", file);
524 return 2; 525 return 2;
@@ -551,6 +552,22 @@ static int file_info (lua_State *L) {
551 552
552 553
553/* 554/*
555** Get file information using stat.
556*/
557static int file_info (lua_State *L) {
558 return _file_info_ (L, stat);
559}
560
561
562/*
563** Get symbolic link information using lstat.
564*/
565static int link_info (lua_State *L) {
566 return _file_info_ (L, lstat);
567}
568
569
570/*
554** Assumes the table is on top of the stack. 571** Assumes the table is on top of the stack.
555*/ 572*/
556static void set_info (lua_State *L) { 573static void set_info (lua_State *L) {
@@ -561,7 +578,7 @@ static void set_info (lua_State *L) {
561 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"); 578 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");
562 lua_settable (L, -3); 579 lua_settable (L, -3);
563 lua_pushliteral (L, "_VERSION"); 580 lua_pushliteral (L, "_VERSION");
564 lua_pushliteral (L, "LuaFileSystem 1.2.1"); 581 lua_pushliteral (L, "LuaFileSystem 1.3.0");
565 lua_settable (L, -3); 582 lua_settable (L, -3);
566} 583}
567 584
@@ -574,6 +591,7 @@ static const struct luaL_reg fslib[] = {
574 {"lock", file_lock}, 591 {"lock", file_lock},
575 {"mkdir", make_dir}, 592 {"mkdir", make_dir},
576 {"rmdir", remove_dir}, 593 {"rmdir", remove_dir},
594 {"symlinkattributes", link_info},
577 {"touch", file_utime}, 595 {"touch", file_utime},
578 {"unlock", file_unlock}, 596 {"unlock", file_unlock},
579 {NULL, NULL}, 597 {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))
69assert (new_att.access == testdate2, "could not set access time") 69assert (new_att.access == testdate2, "could not set access time")
70assert (new_att.modification == testdate1, "could not set modification time") 70assert (new_att.modification == testdate1, "could not set modification time")
71 71
72-- Checking symbolic link information
73assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_"))
74assert (lfs.attributes"_a_link_for_test_".mode == "file")
75assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
76assert (os.remove"_a_link_for_test_")
77
72-- Restore access time to current value 78-- Restore access time to current value
73assert (lfs.touch (tmpfile, attrib.access, attrib.modification)) 79assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
74new_att = assert (lfs.attributes (tmpfile)) 80new_att = assert (lfs.attributes (tmpfile))