diff --git a/doc/us/manual.html b/doc/us/manual.html
index 9d53037..ee80703 100644
--- a/doc/us/manual.html
+++ b/doc/us/manual.html
@@ -171,6 +171,16 @@ LuaFileSystem offers the following functions:
path.
Returns true in case of success or nil plus an
error string.
+
+
lfs.lock_dir(path, [seconds_stale])
+ Creates a lockfile (called lockfile.lfs) in path if it does not
+ exist and returns the lock. If the lock already exists checks it
+ it's stale, using the second parameter (default for the second
+ parameter is INT_MAX, which in practice means the lock will never
+ be stale. To free the the lock call lock:free().
+ In case of any errors it returns nil and the error message. In
+ particular, if the lock exists and is not stale it returns the
+ "File exists" message.
lfs.currentdir ()
Returns a string with the current working directory or nil
@@ -251,7 +261,7 @@ LuaFileSystem offers the following functions:
Valid XHTML 1.0!
-
$Id: manual.html,v 1.43 2008/05/08 18:45:15 carregal Exp $
+
$Id: manual.html,v 1.44 2009/04/24 22:24:06 mascarenhas Exp $
diff --git a/src/lfs.c b/src/lfs.c
index de5918f..060034c 100644
--- a/src/lfs.c
+++ b/src/lfs.c
@@ -9,6 +9,7 @@
** lfs.currentdir ()
** lfs.dir (path)
** lfs.lock (fh, mode)
+** lfs.lock_dir (path)
** lfs.mkdir (path)
** lfs.rmdir (path)
** lfs.setmode (filepath, mode)
@@ -16,7 +17,7 @@
** lfs.touch (filepath [, atime [, mtime]])
** lfs.unlock (fh)
**
-** $Id: lfs.c,v 1.58 2009/04/24 22:11:12 mascarenhas Exp $
+** $Id: lfs.c,v 1.59 2009/04/24 22:24:07 mascarenhas Exp $
*/
#ifndef _WIN32
@@ -222,11 +223,15 @@ static int lfs_lock_dir(lua_State *L) {
lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2;
}
strcpy(ln, path); strcat(ln, lockfile);
- while((fd = CreateFile(ln, GENERIC_WRITE, 0, NULL, CREATE_NEW,
+ if((fd = CreateFile(ln, GENERIC_WRITE, 0, NULL, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL)) == INVALID_HANDLE_VALUE) {
int en = GetLastError();
- if(en == ERROR_FILE_EXISTS || en == ERROR_SHARING_VIOLATION) continue;
- free(ln); lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2;
+ free(ln); lua_pushnil(L);
+ if(en == ERROR_FILE_EXISTS || en == ERROR_SHARING_VIOLATION)
+ lua_pushstring(L, "File exists");
+ else
+ lua_pushstring(L, strerror(en));
+ return 2;
}
free(ln);
lock = (lfs_Lock*)lua_newuserdata(L, sizeof(lfs_Lock));