14 Commits

Author SHA1 Message Date
carregal
6c16dc4634 Correcting the detection of the manifest file 2008-02-13 22:08:31 +00:00
carregal
dff01ac3c9 Version 1.4.0 rockspec 2008-02-13 21:40:56 +00:00
carregal
cdfd06b4ea Minor update 2008-02-13 21:00:10 +00:00
carregal
db7e8b9133 Adding tests for lfs.setmode 2008-02-13 20:59:51 +00:00
carregal
d931b9b2bb Small corrections 2008-02-11 22:48:16 +00:00
carregal
b66ab2cae9 Preparing the 1.4.0 release.
Added documentation for lfs.setmode
2008-02-11 22:42:21 +00:00
mascarenhas
78f28b6468 lfs.attributes raises an error if attribute does not exist 2008-01-25 17:09:56 +00:00
mascarenhas
25f8aa1936 makefile.win tweak 2008-01-23 02:50:08 +00:00
mascarenhas
804e976407 updated makefile for vc2008 2008-01-23 02:48:47 +00:00
mascarenhas
d219de7885 added flag to supress manifest creation 2008-01-23 01:58:25 +00:00
mascarenhas
ed97af80fb *** empty log message *** 2008-01-16 22:33:24 +00:00
mascarenhas
895e9daf27 getcwd no longer passes a buffer 2008-01-16 22:29:26 +00:00
mascarenhas
50f17597b3 Added lfs.setmode for changing file's mode (only for Windows) 2007-12-22 17:19:45 +00:00
carregal
24fdbc0a66 Minor HTML revision 2007-12-14 15:28:04 +00:00
14 changed files with 256 additions and 77 deletions

View File

@@ -1,7 +1,7 @@
# $Id: Makefile,v 1.30 2007/06/07 01:28:08 tomas Exp $
# $Id: Makefile,v 1.32 2008/02/11 22:42:21 carregal Exp $
T= lfs
V= 1.3.0
V= 1.4.0
CONFIG= ./config
include $(CONFIG)
@@ -9,15 +9,14 @@ include $(CONFIG)
SRCS= src/$T.c
OBJS= src/$T.o
lib: src/$(LIBNAME)
lib: src/lfs.so
src/$(LIBNAME): $(OBJS)
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/$(LIBNAME) $(OBJS)
src/lfs.so: $(OBJS)
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS)
install: src/$(LIBNAME)
install: src/lfs.so
mkdir -p $(LUA_LIBDIR)
cp src/$(LIBNAME) $(LUA_LIBDIR)
cd $(LUA_LIBDIR); ln -f -s $(LIBNAME) $T.so
cp src/lfs.so $(LUA_LIBDIR)
clean:
rm -f src/$(LIBNAME) $(OBJS)
rm -f src/lfs.so $(OBJS)

View File

@@ -1,24 +1,26 @@
# $Id: Makefile.win,v 1.5 2007/08/30 14:38:07 tomas Exp $
# $Id: Makefile.win,v 1.10 2008/02/13 22:08:31 carregal Exp $
T= lfs
V= 1.3.0
V= 1.4.0
include config.win
SRCS= src\$T.c
OBJS= src\$T.obj
lib: src\$(LIBNAME)
lib: src\lfs.dll
.c.obj:
$(CC) /c /Fo$@ $(CFLAGS) $<
src\$(LIBNAME): $(OBJS)
link /dll /def:src\$T.def /out:src\$(LIBNAME) $(OBJS) $(LUA_LIB)
src\lfs.dll: $(OBJS)
link /dll /def:src\$T.def /out:src\lfs.dll $(OBJS) "$(LUA_LIB)"
IF EXIST src\lfs.dll.manifest mt -manifest src\lfs.dll.manifest -outputresource:src\lfs.dll;2
install: src\$(LIBNAME)
IF NOT EXIST $(LUA_LIBDIR) mkdir $(LUA_LIBDIR)
copy src\$(LIBNAME) $(LUA_LIBDIR)
install: src\lfs.dll
IF NOT EXIST "$(LUA_LIBDIR)" mkdir "$(LUA_LIBDIR)"
copy src\lfs.dll "$(LUA_LIBDIR)"
clean:
del src\$(LIBNAME) $(OBJS) src\$T.lib src\$T.exp
del src\lfs.dll $(OBJS) src\$T.lib src\$T.exp
IF EXIST src\lfs.dll.manifest del src\lfs.dll.manifest

8
README
View File

@@ -1,5 +1,5 @@
LuaFileSystem - File System Library for Lua
Copyright 2003-2007 Kepler Project
Copyright 2003 Kepler Project
http://www.keplerproject.org/luafilesystem
Description
@@ -10,7 +10,11 @@ related to file systems offered by the standard Lua distribution.
LuaFileSystem offers a portable way to access the underlying directory structure and file attributes.
LuaFileSystem is free software and uses the same license as Lua 5.1
Current version is 1.3.0
Current version is 1.4.0
LuaRocks Installation
---------------------
luarocks install luafilesystem
Unix Installation
-----------------

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -94,7 +94,7 @@ attrdir (".")
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: examples.html,v 1.7 2007/10/26 21:44:43 carregal Exp $</small></p>
<p><small>$Id: examples.html,v 1.8 2007/12/14 15:28:04 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -71,20 +71,31 @@ the underlying directory structure and file attributes.</p>
<h2><a name="status"></a>Status</h2>
<p>Current version is 1.3.0. It was developed for Lua 5.1.</p>
<p>Current version is 1.4.0. It was developed for Lua 5.1.</p>
<h2><a name="download"></a>Download</h2>
<p>LuaFileSystem source can be downloaded from its
<a href="http://luaforge.net/projects/luafilesystem/files">Lua Forge</a>
page. If you are using
<a href="http://luabinaries.luaforge.net">LuaBinaries</a> 5.1.2 a Windows binary
version of LuaFileSystem can be found at the same LuaForge page.</p>
<a href="http://luabinaries.luaforge.net">LuaBinaries</a> 5.1.3 a Windows binary
version of LuaFileSystem (compiled with Visual Studio 2005 Express) can be found at the same LuaForge page.</p>
<h2><a name="history"></a>History</h2>
<dl class="history">
<dt><strong>Version 1.3.0</strong> [26/Oct/2007]</dt>
<dt><strong>Version 1.4.0</strong> [13/Feb/2008]</dt>
<dd>
<ul>
<li><a href="manual.html#attributes"><code>lfs.attributes</code></a>
raises an error if attribute does not exist</li>
<li>added function
<a href="manual.html#setmode"><code>lfs.setmode</code></a>
(works only in non Windows systems).</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.3/">Version 1.3.0</a></strong> [26/Oct/2007]</dt>
<dd>
<ul>
<li>added function
@@ -107,14 +118,14 @@ version of LuaFileSystem can be found at the same LuaForge page.</p>
<a href="manual.html#attributes"><code>lfs.attributes</code></a></li>
<li>added function
<a href="manual.html#rmdir"><code>lfs.rmdir</code></a></li>
<li>bug correction on <code>lfs.dir</code></li>
<li>bug correction on <a href="manual.html#dir"><code>lfs.dir</code></a></li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.1/">Version 1.1</a></strong> [30/May/2005]</dt>
<dd>
<ul>
<li>added function <code>lfs.touch</code>.</li>
<li>added function <a href="manual.html#touch"><code>lfs.touch</code></a>.</li>
</ul>
</dd>
@@ -147,7 +158,7 @@ Comments are welcome!</p>
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: index.html,v 1.37 2007/10/26 21:44:43 carregal Exp $</small></p>
<p><small>$Id: index.html,v 1.40 2008/02/13 21:00:10 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -85,7 +85,7 @@ Ierusalimschy, Andr&eacute; Carregal and Tom&aacute;s Guisasola.
The implementation is not derived from licensed software.</p>
<hr/>
<p>Copyright &copy; 2004-2007 Kepler Project.</p>
<p>Copyright &copy; 2003 Kepler Project.</p>
<p>Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -113,7 +113,7 @@ SOFTWARE.</p>
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: license.html,v 1.11 2007/10/26 21:44:43 carregal Exp $</small></p>
<p><small>$Id: license.html,v 1.13 2008/02/11 22:42:21 carregal Exp $</small></p>
</div><!-- id="about" -->
</div><!-- id="container" -->

View File

@@ -1,6 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
@@ -74,7 +74,7 @@ and header files for the target version must be installed properly.
<p>
LuaFileSystem offers a Makefile and a separate configuration file,
<code>config</code>,
which should be edited to suit your installation before runnig
which should be edited to suit your installation before running
<code>make</code>.
The file has some definitions like paths to the external libraries,
compiler options and the like.
@@ -82,12 +82,14 @@ compiler options and the like.
<h2><a name="installation"></a>Installation</h2>
<p>The LuaFileSystem compiled binary should be copied to a directory in your
<a href="http://www.lua.org/manual/5.1/manual.html#pdf-package.cpath">C path</a>.</p>
<p>The easiest way to install LuaFileSystem is to use LuaRocks:</p>
<p>Windows users can use the binary version of LuaFileSystem
(<code>lfs.dll</code>) available at
<a href="http://luaforge.net/projects/luafilesystem/files">LuaForge</a>.</p>
<pre class="example">
luarocks install luafilesystem
</pre>
<p>If you prefer to install LuaFileSystem manually, the compiled binary should be copied to a directory in your
<a href="http://www.lua.org/manual/5.1/manual.html#pdf-package.cpath">C path</a>.</p>
<h2><a name="reference"></a>Reference</h2>
@@ -202,6 +204,12 @@ LuaFileSystem offers the following functions:
<dd>Removes an existing directory. The argument is the name of the directory.<br />
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.</dd>
<dt><a name="setmode"></a><strong><code>lfs.setmode (filepath, mode)</code></strong></dt>
<dd>Sets the writing mode for a file. The mode string can be either <code>binary</code> or <code>text</code>.
Returns the previous mode string for the file. This function is only available in Windows, so you may want to make sure that
<code>lfs.setmode</code> exists before using it.
</dd>
<dt><a name="symlinkattributes"></a><strong><code>lfs.symlinkattributes (filepath [, aname])</code></strong></dt>
<dd>Identical to <a href="#attributes">lfs.attributes</a> except that
@@ -240,7 +248,7 @@ LuaFileSystem offers the following functions:
<div id="about">
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
<p><small>$Id: manual.html,v 1.37 2007/10/26 21:44:43 carregal Exp $</small></p>
<p><small>$Id: manual.html,v 1.40 2008/02/11 22:48:16 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.3.0-1"
source = {
url = "http://luaforge.net/frs/download.php/2679/luafilesystem-1.3.0.tar.gz"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "make",
build_variables = {
LUA_INC = "$(LUA_INCDIR)",
LIB_OPTION = "$(LIBFLAG)"
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.4.0-1"
source = {
url = "http://luaforge.net/frs/download.php/2679/luafilesystem-1.3.0.tar.gz"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "make",
build_variables = {
LUA_INC = "$(LUA_INCDIR)",
LIB_OPTION = "$(LIBFLAG)"
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
}

View File

@@ -0,0 +1,44 @@
package = "LuaFileSystem"
version = "cvs-1"
source = {
url = "cvs://:pserver:anonymous:@cvs.luaforge.net:/cvsroot/luafilesystem",
cvs_tag = "HEAD"
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "$(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -1,6 +1,6 @@
/*
** LuaFileSystem
** Copyright Kepler Project 2004-2007 (http://www.keplerproject.org/luafilesystem)
** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem)
**
** File system manipulation library.
** This library offers these functions:
@@ -11,11 +11,12 @@
** lfs.lock (fh, mode)
** lfs.mkdir (path)
** lfs.rmdir (path)
** lfs.setmode (filepath, mode)
** lfs.symlinkattributes (filepath [, attributename]) -- thanks to Sam Roberts
** lfs.touch (filepath [, atime [, mtime]])
** lfs.unlock (fh)
**
** $Id: lfs.c,v 1.42 2007/10/26 21:01:07 carregal Exp $
** $Id: lfs.c,v 1.47 2008/02/11 22:42:21 carregal Exp $
*/
#include <errno.h>
@@ -29,6 +30,7 @@
#include <io.h>
#include <sys/locking.h>
#include <sys/utime.h>
#include <fcntl.h>
#else
#include <unistd.h>
#include <dirent.h>
@@ -68,6 +70,15 @@ typedef struct dir_data {
} dir_data;
#ifdef _WIN32
#define lfs_setmode(L,file,m) ((void)L, _setmode(_fileno(file), m))
#else
#define _O_TEXT 0
#define _O_BINARY 0
#define lfs_setmode(L,file,m) ((void)((void)file,m), \
luaL_error(L, LUA_QL("setmode") " not supported on non Windows platforms"), -1)
#endif
/*
** This function changes the working (current) directory
*/
@@ -90,16 +101,17 @@ static int change_dir (lua_State *L) {
** and a string describing the error
*/
static int get_dir (lua_State *L) {
char path[255+2];
if (getcwd(path, 255) == NULL) {
lua_pushnil(L);
lua_pushstring(L, getcwd_error);
return 2;
}
else {
lua_pushstring(L, path);
return 1;
}
char *path;
if ((path = getcwd(NULL, 0)) == NULL) {
lua_pushnil(L);
lua_pushstring(L, getcwd_error);
return 2;
}
else {
lua_pushstring(L, path);
free(path);
return 1;
}
}
/*
@@ -165,6 +177,36 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
}
static int lfs_g_setmode (lua_State *L, FILE *f, int arg) {
static const int mode[] = {_O_TEXT, _O_BINARY};
static const char *const modenames[] = {"text", "binary", NULL};
int op = luaL_checkoption(L, arg, NULL, modenames);
int res = lfs_setmode(L, f, mode[op]);
if (res != -1) {
int i;
lua_pushboolean(L, 1);
for (i = 0; modenames[i] != NULL; i++) {
if (mode[i] == res) {
lua_pushstring(L, modenames[i]);
goto exit;
}
}
lua_pushnil(L);
exit:
return 2;
} else {
int en = errno;
lua_pushnil(L);
lua_pushfstring(L, "%s", strerror(en));
lua_pushinteger(L, en);
return 3;
}
}
static int lfs_f_setmode(lua_State *L) {
return lfs_g_setmode(L, check_file(L, 1, "setmode"), 2);
}
/*
** Locks a file.
** @param #1 File handle.
@@ -484,6 +526,9 @@ static void push_st_blksize (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_blksize);
}
#endif
static void push_invalid (lua_State *L, struct stat *info) {
luaL_error(L, "invalid attribute name");
}
typedef void (*_push_function) (lua_State *L, struct stat *info);
@@ -508,7 +553,7 @@ struct _stat_members members[] = {
{ "blocks", push_st_blocks },
{ "blksize", push_st_blksize },
#endif
{ NULL, NULL }
{ NULL, push_invalid }
};
/*
@@ -575,13 +620,13 @@ static int link_info (lua_State *L) {
*/
static void set_info (lua_State *L) {
lua_pushliteral (L, "_COPYRIGHT");
lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
lua_pushliteral (L, "Copyright (C) 2003 Kepler Project");
lua_settable (L, -3);
lua_pushliteral (L, "_DESCRIPTION");
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");
lua_settable (L, -3);
lua_pushliteral (L, "_VERSION");
lua_pushliteral (L, "LuaFileSystem 1.3.0");
lua_pushliteral (L, "LuaFileSystem 1.4.0");
lua_settable (L, -3);
}
@@ -596,6 +641,8 @@ static const struct luaL_reg fslib[] = {
{"rmdir", remove_dir},
#ifndef _WIN32
{"symlinkattributes", link_info},
#else
{"setmode", lfs_f_setmode},
#endif
{"touch", file_utime},
{"unlock", file_unlock},

View File

@@ -1,5 +1,5 @@
LIBRARY lfs.dll
DESCRIPTION "LuaFileSystem"
VERSION 1.2.1
EXPORTS
luaopen_lfs
LIBRARY lfs.dll
DESCRIPTION "LuaFileSystem"
VERSION 1.4.0
EXPORTS
luaopen_lfs

View File

@@ -1,16 +1,16 @@
/*
** LuaFileSystem
** Copyright Kepler Project 2004-2006 (http://www.keplerproject.org/luafilesystem)
**
** $Id: lfs.h,v 1.3 2006/03/10 23:37:32 carregal Exp $
*/
/* Define 'chdir' for systems that do not implement it */
#ifdef NO_CHDIR
#define chdir(p) (-1)
#define chdir_error "Function 'chdir' not provided by system"
#else
#define chdir_error strerror(errno)
#endif
int luaopen_lfs (lua_State *L);
/*
** LuaFileSystem
** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem)
**
** $Id: lfs.h,v 1.4 2008/02/11 22:42:21 carregal Exp $
*/
/* Define 'chdir' for systems that do not implement it */
#ifdef NO_CHDIR
#define chdir(p) (-1)
#define chdir_error "Function 'chdir' not provided by system"
#else
#define chdir_error strerror(errno)
#endif
int luaopen_lfs (lua_State *L);

View File

@@ -77,6 +77,16 @@ if lfs.symlinkattributes then
assert (os.remove"_a_link_for_test_")
end
if lfs.setmode then
-- Checking text/binary modes (works only in Windows)
local f = io.open(tmpfile, "w")
local mode = lfs.setmode(f, "binary")
assert(mode == "text")
mode = lfs.setmode(f, "text")
assert(mode == "binary")
f:close()
end
-- Restore access time to current value
assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
new_att = assert (lfs.attributes (tmpfile))