mirror of
https://github.com/lunarmodules/luafilesystem.git
synced 2026-07-22 02:53:06 +00:00
fixing lfs.lock_dir on windows to return "File exists" instead of looping, plus
documenting lfs.lock_dir
This commit is contained in:
@@ -171,6 +171,16 @@ LuaFileSystem offers the following functions:
|
|||||||
<code>path</code>.<br />
|
<code>path</code>.<br />
|
||||||
Returns <code>true</code> in case of success or <code>nil</code> plus an
|
Returns <code>true</code> in case of success or <code>nil</code> plus an
|
||||||
error string.</dd>
|
error string.</dd>
|
||||||
|
|
||||||
|
<dt><a name="chdir"></a><strong><code>lfs.lock_dir(path, [seconds_stale])</code></strong></dt>
|
||||||
|
<dd>Creates a lockfile (called lockfile.lfs) in <code>path</code> 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 <code>INT_MAX</code>, which in practice means the lock will never
|
||||||
|
be stale. To free the the lock call <code>lock:free()</code>. <br/>
|
||||||
|
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.</dd>
|
||||||
|
|
||||||
<dt><a name="getcwd"></a><strong><code>lfs.currentdir ()</code></strong></dt>
|
<dt><a name="getcwd"></a><strong><code>lfs.currentdir ()</code></strong></dt>
|
||||||
<dd>Returns a string with the current working directory or <code>nil</code>
|
<dd>Returns a string with the current working directory or <code>nil</code>
|
||||||
@@ -251,7 +261,7 @@ LuaFileSystem offers the following functions:
|
|||||||
|
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
|
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
|
||||||
<p><small>$Id: manual.html,v 1.43 2008/05/08 18:45:15 carregal Exp $</small></p>
|
<p><small>$Id: manual.html,v 1.44 2009/04/24 22:24:06 mascarenhas Exp $</small></p>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
|
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
|
|||||||
13
src/lfs.c
13
src/lfs.c
@@ -9,6 +9,7 @@
|
|||||||
** lfs.currentdir ()
|
** lfs.currentdir ()
|
||||||
** lfs.dir (path)
|
** lfs.dir (path)
|
||||||
** lfs.lock (fh, mode)
|
** lfs.lock (fh, mode)
|
||||||
|
** lfs.lock_dir (path)
|
||||||
** lfs.mkdir (path)
|
** lfs.mkdir (path)
|
||||||
** lfs.rmdir (path)
|
** lfs.rmdir (path)
|
||||||
** lfs.setmode (filepath, mode)
|
** lfs.setmode (filepath, mode)
|
||||||
@@ -16,7 +17,7 @@
|
|||||||
** lfs.touch (filepath [, atime [, mtime]])
|
** lfs.touch (filepath [, atime [, mtime]])
|
||||||
** lfs.unlock (fh)
|
** 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
|
#ifndef _WIN32
|
||||||
@@ -222,11 +223,15 @@ static int lfs_lock_dir(lua_State *L) {
|
|||||||
lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2;
|
lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2;
|
||||||
}
|
}
|
||||||
strcpy(ln, path); strcat(ln, lockfile);
|
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) {
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL)) == INVALID_HANDLE_VALUE) {
|
||||||
int en = GetLastError();
|
int en = GetLastError();
|
||||||
if(en == ERROR_FILE_EXISTS || en == ERROR_SHARING_VIOLATION) continue;
|
free(ln); lua_pushnil(L);
|
||||||
free(ln); lua_pushnil(L); lua_pushstring(L, strerror(errno)); return 2;
|
if(en == ERROR_FILE_EXISTS || en == ERROR_SHARING_VIOLATION)
|
||||||
|
lua_pushstring(L, "File exists");
|
||||||
|
else
|
||||||
|
lua_pushstring(L, strerror(en));
|
||||||
|
return 2;
|
||||||
}
|
}
|
||||||
free(ln);
|
free(ln);
|
||||||
lock = (lfs_Lock*)lua_newuserdata(L, sizeof(lfs_Lock));
|
lock = (lfs_Lock*)lua_newuserdata(L, sizeof(lfs_Lock));
|
||||||
|
|||||||
Reference in New Issue
Block a user