From c1eff3de6befe526c17da32210887ce38c0cb78f Mon Sep 17 00:00:00 2001 From: mascarenhas Date: Fri, 24 Apr 2009 22:24:06 +0000 Subject: fixing lfs.lock_dir on windows to return "File exists" instead of looping, plus documenting lfs.lock_dir --- doc/us/manual.html | 12 +++++++++++- src/lfs.c | 13 +++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) 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)); -- cgit v1.2.3-55-g6feb