aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/us/manual.html10
-rw-r--r--src/lfs.c15
-rw-r--r--teste.lua26
-rw-r--r--tests/test.lua40
4 files changed, 57 insertions, 34 deletions
diff --git a/doc/us/manual.html b/doc/us/manual.html
index ae20fcc..5ca685d 100644
--- a/doc/us/manual.html
+++ b/doc/us/manual.html
@@ -62,6 +62,8 @@ LuaFileSystem offers the following functions:
62 <li> <b><tt>lfs.chdir (path)</tt></b> <br> 62 <li> <b><tt>lfs.chdir (path)</tt></b> <br>
63 Changes the current 63 Changes the current
64 working directory to the given <tt>path</tt>. 64 working directory to the given <tt>path</tt>.
65 Returns <tt>true</tt> in case of success or <tt>nil</tt> plus an error
66 string.
65 67
66 <a name="getcwd"></a> 68 <a name="getcwd"></a>
67 <li> <b><tt>lfs.currentdir ()</tt></b> <br> 69 <li> <b><tt>lfs.currentdir ()</tt></b> <br>
@@ -83,14 +85,14 @@ LuaFileSystem offers the following functions:
83 The optional arguments <code>start</code> and <code>length</code> can be 85 The optional arguments <code>start</code> and <code>length</code> can be
84 used to specify a starting point and its length; 86 used to specify a starting point and its length;
85 both should be numbers. 87 both should be numbers.
86 This function returns a boolean indicating if the operation was successful; 88 Returns a boolean indicating if the operation was successful;
87 in case of error, it returns <code>false</code> plus a string describing the 89 in case of error, it returns <code>false</code> plus an error string.
88 error.
89 90
90 <a name="mkdir"></a> 91 <a name="mkdir"></a>
91 <li> <b><tt>lfs.mkdir (dirname)</tt></b> <br> 92 <li> <b><tt>lfs.mkdir (dirname)</tt></b> <br>
92 Creates a new directory. 93 Creates a new directory.
93 The argument is the name of the new directory. 94 The argument is the name of the new directory.
95 Returns a boolean indicating whether the operation succeeds or not.
94 96
95 <a name="unlock"></a> 97 <a name="unlock"></a>
96 <li> <b><tt>lfs.unlock (filehandle[, start[, length]])</tt></b> <br> 98 <li> <b><tt>lfs.unlock (filehandle[, start[, length]])</tt></b> <br>
@@ -165,7 +167,7 @@ attrdir (".")
165 167
166<hr> 168<hr>
167<small> 169<small>
168$Id: manual.html,v 1.4 2004/10/29 16:15:59 tomas Exp $ 170$Id: manual.html,v 1.5 2004/11/01 15:27:13 tomas Exp $
169</small> 171</small>
170 172
171</body> 173</body>
diff --git a/src/lfs.c b/src/lfs.c
index e1dfb74..01f4076 100644
--- a/src/lfs.c
+++ b/src/lfs.c
@@ -9,7 +9,7 @@
9** lfs.lock (fh, mode) 9** lfs.lock (fh, mode)
10** lfs.unlock (fh) 10** lfs.unlock (fh)
11** 11**
12** $Id: lfs.c,v 1.7 2004/11/01 08:57:56 tomas Exp $ 12** $Id: lfs.c,v 1.8 2004/11/01 15:27:13 tomas Exp $
13*/ 13*/
14 14
15#include <errno.h> 15#include <errno.h>
@@ -64,10 +64,15 @@ typedef struct dir_data {
64*/ 64*/
65static int change_dir (lua_State *L) { 65static int change_dir (lua_State *L) {
66 const char *path = luaL_checkstring(L, 1); 66 const char *path = luaL_checkstring(L, 1);
67 if (chdir(path)) 67 if (chdir(path)) {
68 luaL_error(L,"Unable to change working directory to '%s'\n%s\n", 68 lua_pushnil (L);
69 lua_pushfstring (L,"Unable to change working directory to '%s'\n%s\n",
69 path, chdir_error); 70 path, chdir_error);
70 return 0; 71 return 2;
72 } else {
73 lua_pushboolean (L, 1);
74 return 1;
75 }
71} 76}
72 77
73/* 78/*
@@ -234,6 +239,8 @@ static int make_dir (lua_State *L) {
234 S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH ); 239 S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH );
235#endif 240#endif
236 lua_pushboolean (L, !fail); 241 lua_pushboolean (L, !fail);
242 if (fail)
243 lua_pushfstring (L, "%s", strerror(errno));
237 umask (oldmask); 244 umask (oldmask);
238 return 1; 245 return 1;
239} 246}
diff --git a/teste.lua b/teste.lua
deleted file mode 100644
index 556cab0..0000000
--- a/teste.lua
+++ /dev/null
@@ -1,26 +0,0 @@
1#!/usr/local/bin/lua -i
2
3require"lfs"
4
5print(lfs.version)
6
7function p ()
8 local fh = assert (io.open ("teste", 'r'))
9 assert (lfs.lock (fh, 'r'))
10 print (fh:read"*a")
11 fh:close ()
12end
13
14function wr ()
15 fh = assert (io.open ("teste", 'w'))
16 assert (lfs.lock (fh, 'w'))
17end
18
19function op ()
20 fh = assert (io.open ("teste", 'r'))
21 assert (lfs.lock (fh, 'r'))
22end
23
24function fw (x)
25 assert (fh:write (x))
26end
diff --git a/tests/test.lua b/tests/test.lua
new file mode 100644
index 0000000..5703bfb
--- /dev/null
+++ b/tests/test.lua
@@ -0,0 +1,40 @@
1#!/usr/local/bin/lua
2
3local tmp = "/tmp"
4local sep = "/"
5local upper = ".."
6
7require"lfs"
8
9function attrdir (path)
10 for file in lfs.dir(path) do
11 if file ~= "." and file ~= ".." then
12 local f = path..'/'..file
13 print ("\t=> "..f.." <=")
14 local attr = lfs.attributes (f)
15 assert (type(attr) == "table")
16 if attr.mode == "directory" then
17 attrdir (f)
18 else
19 for name, value in pairs(attr) do
20 print (name, value)
21 end
22 end
23 end
24 end
25end
26
27-- Checking changing directories
28local current = assert (lfs.currentdir())
29local reldir = string.gsub (current, "^.*%"..sep.."([^"..sep.."])$", "%1")
30assert (lfs.chdir (upper), "could not change to upper directory")
31assert (lfs.chdir (reldir), "could not change back to current directory")
32assert (lfs.currentdir() == current, "error trying to change directories")
33assert (lfs.chdir ("this couldn't be an actual directory") == false, "could change to a non-existent directory")
34-- Changing creating and removing directories
35assert (lfs.mkdir (tmp.."/lfs_tmp_dir"), "could not make a new directory")
36assert (os.remove (tmp.."/lfs_tmp_dir"), "could not remove new directory")
37assert (lfs.mkdir (tmp.."/lfs_tmp_dir/lfs_tmp_dir") == false, "could create a directory inside a non-existent one")
38--
39assert (lfs.attributes ("this couldn't be an actual file") == false, "could get attributes of a non-existent file")
40assert (type(lfs.attributes (upper)) == "table", "couldn't get attributes of upper directory")