16 Commits

Author SHA1 Message Date
mascarenhas
c039fc9798 added 1.4.1rc1 rockspec 2008-04-14 19:55:55 +00:00
mascarenhas
e7a2c5419f *** empty log message *** 2008-03-25 18:24:17 +00:00
mascarenhas
baf658a721 large file support in Linux needs STAT64=-DHAVE_STAT64 in LuaRocks
config
2008-03-25 18:20:29 +00:00
mascarenhas
5c8e92efa3 fixing config.win 2008-03-25 17:39:29 +00:00
mascarenhas
dac6b84eda fixed config.win 2008-03-25 17:38:15 +00:00
mascarenhas
ca8efaa8e7 large file support in lfs.attributes (bug #2185) 2008-03-25 16:58:29 +00:00
carregal
3aba7a98fb Small revision by Reuben Thomas 2008-03-24 18:17:59 +00:00
carregal
0154141e3f Fixed bug in the Windows tests (patch by Shmuel Zeigerman) 2008-03-10 15:28:50 +00:00
carregal
bb9cf83617 Correcting the use of the /MD flag 2008-02-19 22:07:42 +00:00
mascarenhas
c5bfbb1bd2 fixed windows compile problem 2008-02-19 20:08:23 +00:00
carregal
c2e720b5dc Finishing the new rockspecs 2008-02-18 18:55:14 +00:00
carregal
0233beea30 New rockspec for lfs 1.4.0, this time including Windows rules 2008-02-18 18:17:05 +00:00
carregal
f1e4fd1bf4 Fixing wrong decription of lfs.setmode 2008-02-18 17:20:16 +00:00
mascarenhas
640265aee7 removed warnings 2008-02-18 03:13:50 +00:00
carregal
8f943857e8 Corecting the lfs.setmode signature 2008-02-14 18:26:19 +00:00
carregal
80027817c3 Updating rockspec to include the correct package URL 2008-02-13 22:33:47 +00:00
11 changed files with 224 additions and 63 deletions

View File

@@ -1,4 +1,4 @@
# $Id: Makefile,v 1.32 2008/02/11 22:42:21 carregal Exp $ # $Id: Makefile,v 1.33 2008/03/25 18:24:17 mascarenhas Exp $
T= lfs T= lfs
V= 1.4.0 V= 1.4.0
@@ -14,7 +14,7 @@ lib: src/lfs.so
src/lfs.so: $(OBJS) src/lfs.so: $(OBJS)
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS) export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS)
install: src/lfs.so install:
mkdir -p $(LUA_LIBDIR) mkdir -p $(LUA_LIBDIR)
cp src/lfs.so $(LUA_LIBDIR) cp src/lfs.so $(LUA_LIBDIR)

View File

@@ -1,17 +1,19 @@
# Installation directories # Installation directories
# System's libraries directory (where binary libraries are installed) # System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= c:\lua5.1 LUA_LIBDIR= "c:\lua5.1"
# Lua includes directory # Lua includes directory
LUA_INC= c:\lua5.1\include LUA_INC= "c:\lua5.1\include"
# Lua library # Lua library
LUA_LIB= c:\lua5.1\lua5.1.lib LUA_LIB= "c:\lua5.1\lua5.1.lib"
LIBNAME= $T.dll LIBNAME= $T.dll
# Compilation directives # Compilation directives
WARN= /O2 WARN= /O2
INCS= /I$(LUA_INC) INCS= /I$(LUA_INC)
CFLAGS= $(WARN) $(INCS) CFLAGS= /MD $(WARN) $(INCS)
CC= cl CC= cl
# $Id: config.win,v 1.4 2007/05/18 19:52:59 carregal Exp $ # $Id: config.win,v 1.7 2008/03/25 17:39:29 mascarenhas Exp $

View File

@@ -87,11 +87,11 @@ version of LuaFileSystem (compiled with Visual Studio 2005 Express) can be found
<dt><strong>Version 1.4.0</strong> [13/Feb/2008]</dt> <dt><strong>Version 1.4.0</strong> [13/Feb/2008]</dt>
<dd> <dd>
<ul> <ul>
<li><a href="manual.html#attributes"><code>lfs.attributes</code></a>
raises an error if attribute does not exist</li>
<li>added function <li>added function
<a href="manual.html#setmode"><code>lfs.setmode</code></a> <a href="manual.html#setmode"><code>lfs.setmode</code></a>
(works only in non Windows systems).</li> (works only in Windows systems).</li>
<li><a href="manual.html#attributes"><code>lfs.attributes</code></a>
raises an error if attribute does not exist</li>
</ul> </ul>
</dd> </dd>
@@ -158,7 +158,7 @@ Comments are welcome!</p>
<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: index.html,v 1.40 2008/02/13 21:00:10 carregal Exp $</small></p> <p><small>$Id: index.html,v 1.41 2008/02/18 17:20:16 carregal Exp $</small></p>
</div> <!-- id="about" --> </div> <!-- id="about" -->
</div> <!-- id="container" --> </div> <!-- id="container" -->

View File

@@ -176,8 +176,8 @@ LuaFileSystem offers the following functions:
<dt><a name="dir"></a><strong><code>lfs.dir (path)</code></strong></dt> <dt><a name="dir"></a><strong><code>lfs.dir (path)</code></strong></dt>
<dd> <dd>
Lua iterator over the entries of a given directory. Lua iterator over the entries of a given directory.
Each time the iterator is called it returns a string with an entry of the Each time the iterator is called it returns a directory entry's name as a string, or
directory; <code>nil</code> is returned when there is no more entries. <code>nil</code> if there are no more entries.
Raises an error if <code>path</code> is not a directory. Raises an error if <code>path</code> is not a directory.
</dd> </dd>
@@ -205,7 +205,7 @@ LuaFileSystem offers the following functions:
Returns <code>true</code> if the operation was successful; Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.</dd> 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> <dt><a name="setmode"></a><strong><code>lfs.setmode (file, 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>. <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 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. <code>lfs.setmode</code> exists before using it.
@@ -248,7 +248,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.40 2008/02/11 22:48:16 carregal Exp $</small></p> <p><small>$Id: manual.html,v 1.42 2008/03/24 18:17:59 carregal Exp $</small></p>
</div> <!-- id="about" --> </div> <!-- id="about" -->
</div> <!-- id="container" --> </div> <!-- id="container" -->

View File

@@ -1,7 +1,7 @@
package = "LuaFileSystem" package = "LuaFileSystem"
version = "1.4.0-1" version = "1.4.0-1"
source = { source = {
url = "http://luaforge.net/frs/download.php/2679/luafilesystem-1.3.0.tar.gz" url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.0.tar.gz"
} }
description = { description = {
summary = "File System Library for the Lua Programming Language", summary = "File System Library for the Lua Programming Language",

View File

@@ -0,0 +1,43 @@
package = "LuaFileSystem"
version = "1.4.0-2"
source = {
url = "http://luaforge.net/frs/download.php/3158/luafilesystem-1.4.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 = {
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 = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,43 @@
package = "LuaFileSystem"
version = "1.4.1rc1-1"
source = {
url = "http://luafilesystem.luaforge.net/luafilesystem-1.4.1rc1.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 = {
platforms = {
unix = {
type = "make",
build_variables = {
LIB_OPTION = "$(LIBFLAG)",
CFLAGS = "$(CFLAGS) -I$(LUA_INCDIR) $(STAT64)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -0,0 +1,44 @@
package = "LuaFileSystem"
version = "cvs-2"
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) $(STAT64)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)"
}
},
win32 = {
type = "make",
build_variables = {
LUA_LIB = "$(LUA_LIBDIR)\\lua5.1.lib",
CFLAGS = "/MD $(CFLAGS) /I$(LUA_INCDIR)",
},
install_variables = {
LUA_LIBDIR = "$(LIBDIR)",
LUA_DIR = "$(LUADIR)",
BIN_DIR = "$(BINDIR)"
}
}
}
}

View File

@@ -16,12 +16,15 @@
** lfs.touch (filepath [, atime [, mtime]]) ** lfs.touch (filepath [, atime [, mtime]])
** lfs.unlock (fh) ** lfs.unlock (fh)
** **
** $Id: lfs.c,v 1.47 2008/02/11 22:42:21 carregal Exp $ ** $Id: lfs.c,v 1.51 2008/03/25 18:20:29 mascarenhas Exp $
*/ */
#define _LARGEFILE64_SOURCE
#include <errno.h> #include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
#include <time.h> #include <time.h>
#include <sys/stat.h> #include <sys/stat.h>
@@ -72,11 +75,22 @@ typedef struct dir_data {
#ifdef _WIN32 #ifdef _WIN32
#define lfs_setmode(L,file,m) ((void)L, _setmode(_fileno(file), m)) #define lfs_setmode(L,file,m) ((void)L, _setmode(_fileno(file), m))
#define STAT_STRUCT struct _stat64
#define STAT_FUNC _stat64
#else #else
#define _O_TEXT 0 #define _O_TEXT 0
#define _O_BINARY 0 #define _O_BINARY 0
#define lfs_setmode(L,file,m) ((void)((void)file,m), \ #define lfs_setmode(L,file,m) ((void)((void)file,m), \
luaL_error(L, LUA_QL("setmode") " not supported on non Windows platforms"), -1) luaL_error(L, LUA_QL("setmode") " not supported on this platform"), -1)
#ifdef HAVE_STAT64
#define STAT_STRUCT struct stat64
#define STAT_FUNC stat64
#define LSTAT_FUNC lstat64
#else
#define STAT_STRUCT struct stat
#define STAT_FUNC stat
#define LSTAT_FUNC lstat
#endif
#endif #endif
/* /*
@@ -176,7 +190,7 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
return (code != -1); return (code != -1);
} }
#ifdef _WIN32
static int lfs_g_setmode (lua_State *L, FILE *f, int arg) { static int lfs_g_setmode (lua_State *L, FILE *f, int arg) {
static const int mode[] = {_O_TEXT, _O_BINARY}; static const int mode[] = {_O_TEXT, _O_BINARY};
static const char *const modenames[] = {"text", "binary", NULL}; static const char *const modenames[] = {"text", "binary", NULL};
@@ -202,6 +216,13 @@ static int lfs_g_setmode (lua_State *L, FILE *f, int arg) {
return 3; return 3;
} }
} }
#else
static int lfs_g_setmode (lua_State *L, FILE *f, int arg) {
lua_pushboolean(L, 0);
lua_pushliteral(L, "setmode not supported on this platform");
return 2;
}
#endif
static int lfs_f_setmode(lua_State *L) { static int lfs_f_setmode(lua_State *L) {
return lfs_g_setmode(L, check_file(L, 1, "setmode"), 2); return lfs_g_setmode(L, check_file(L, 1, "setmode"), 2);
@@ -473,64 +494,67 @@ static int file_utime (lua_State *L) {
/* inode protection mode */ /* inode protection mode */
static void push_st_mode (lua_State *L, struct stat *info) { static void push_st_mode (lua_State *L, STAT_STRUCT *info) {
lua_pushstring (L, mode2string (info->st_mode)); lua_pushstring (L, mode2string (info->st_mode));
} }
/* device inode resides on */ /* device inode resides on */
static void push_st_dev (lua_State *L, struct stat *info) { static void push_st_dev (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_dev); lua_pushnumber (L, (lua_Number)info->st_dev);
} }
/* inode's number */ /* inode's number */
static void push_st_ino (lua_State *L, struct stat *info) { static void push_st_ino (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_ino); lua_pushnumber (L, (lua_Number)info->st_ino);
} }
/* number of hard links to the file */ /* number of hard links to the file */
static void push_st_nlink (lua_State *L, struct stat *info) { static void push_st_nlink (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_nlink); lua_pushnumber (L, (lua_Number)info->st_nlink);
} }
/* user-id of owner */ /* user-id of owner */
static void push_st_uid (lua_State *L, struct stat *info) { static void push_st_uid (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_uid); lua_pushnumber (L, (lua_Number)info->st_uid);
} }
/* group-id of owner */ /* group-id of owner */
static void push_st_gid (lua_State *L, struct stat *info) { static void push_st_gid (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_gid); lua_pushnumber (L, (lua_Number)info->st_gid);
} }
/* device type, for special file inode */ /* device type, for special file inode */
static void push_st_rdev (lua_State *L, struct stat *info) { static void push_st_rdev (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_rdev); lua_pushnumber (L, (lua_Number)info->st_rdev);
} }
/* time of last access */ /* time of last access */
static void push_st_atime (lua_State *L, struct stat *info) { static void push_st_atime (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, info->st_atime); lua_pushnumber (L, info->st_atime);
} }
/* time of last data modification */ /* time of last data modification */
static void push_st_mtime (lua_State *L, struct stat *info) { static void push_st_mtime (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, info->st_mtime); lua_pushnumber (L, info->st_mtime);
} }
/* time of last file status change */ /* time of last file status change */
static void push_st_ctime (lua_State *L, struct stat *info) { static void push_st_ctime (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, info->st_ctime); lua_pushnumber (L, info->st_ctime);
} }
/* file size, in bytes */ /* file size, in bytes */
static void push_st_size (lua_State *L, struct stat *info) { static void push_st_size (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_size); lua_pushnumber (L, (lua_Number)info->st_size);
} }
#ifndef _WIN32 #ifndef _WIN32
/* blocks allocated for file */ /* blocks allocated for file */
static void push_st_blocks (lua_State *L, struct stat *info) { static void push_st_blocks (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_blocks); lua_pushnumber (L, (lua_Number)info->st_blocks);
} }
/* optimal file system I/O blocksize */ /* optimal file system I/O blocksize */
static void push_st_blksize (lua_State *L, struct stat *info) { static void push_st_blksize (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_blksize); lua_pushnumber (L, (lua_Number)info->st_blksize);
} }
#endif #endif
static void push_invalid (lua_State *L, struct stat *info) { static void push_invalid (lua_State *L, STAT_STRUCT *info) {
luaL_error(L, "invalid attribute name"); luaL_error(L, "invalid attribute name");
#ifndef _WIN32
info->st_blksize = 0; /* never reached */
#endif
} }
typedef void (*_push_function) (lua_State *L, struct stat *info); typedef void (*_push_function) (lua_State *L, STAT_STRUCT *info);
struct _stat_members { struct _stat_members {
const char *name; const char *name;
@@ -559,9 +583,9 @@ struct _stat_members members[] = {
/* /*
** Get file or symbolic link information ** Get file or symbolic link information
*/ */
static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) { static int _file_info_ (lua_State *L, int (*st)(const char*, STAT_STRUCT*)) {
int i; int i;
struct stat info; STAT_STRUCT info;
const char *file = luaL_checkstring (L, 1); const char *file = luaL_checkstring (L, 1);
if (st(file, &info)) { if (st(file, &info)) {
@@ -601,7 +625,7 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
** Get file information using stat. ** Get file information using stat.
*/ */
static int file_info (lua_State *L) { static int file_info (lua_State *L) {
return _file_info_ (L, stat); return _file_info_ (L, STAT_FUNC);
} }
@@ -610,7 +634,13 @@ static int file_info (lua_State *L) {
*/ */
#ifndef _WIN32 #ifndef _WIN32
static int link_info (lua_State *L) { static int link_info (lua_State *L) {
return _file_info_ (L, lstat); return _file_info_ (L, LSTAT_FUNC);
}
#else
static int link_info (lua_State *L) {
lua_pushboolean(L, 0);
lua_pushliteral(L, "symlinkattributes not supported on this platform");
return 2;
} }
#endif #endif
@@ -639,11 +669,8 @@ static const struct luaL_reg fslib[] = {
{"lock", file_lock}, {"lock", file_lock},
{"mkdir", make_dir}, {"mkdir", make_dir},
{"rmdir", remove_dir}, {"rmdir", remove_dir},
#ifndef _WIN32
{"symlinkattributes", link_info}, {"symlinkattributes", link_info},
#else {"setmode", lfs_f_setmode},
{"setmode", lfs_f_setmode},
#endif
{"touch", file_utime}, {"touch", file_utime},
{"unlock", file_unlock}, {"unlock", file_unlock},
{NULL, NULL}, {NULL, NULL},

View File

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

View File

@@ -69,7 +69,8 @@ local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate2, "could not set access time") assert (new_att.access == testdate2, "could not set access time")
assert (new_att.modification == testdate1, "could not set modification time") assert (new_att.modification == testdate1, "could not set modification time")
if lfs.symlinkattributes then local res, err = lfs.symlinkattributes(tmpfile)
if err ~= "symlinkattributes not supported on this platform" then
-- Checking symbolic link information (does not work in Windows) -- Checking symbolic link information (does not work in Windows)
assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_")) assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_"))
assert (lfs.attributes"_a_link_for_test_".mode == "file") assert (lfs.attributes"_a_link_for_test_".mode == "file")
@@ -80,10 +81,10 @@ end
if lfs.setmode then if lfs.setmode then
-- Checking text/binary modes (works only in Windows) -- Checking text/binary modes (works only in Windows)
local f = io.open(tmpfile, "w") local f = io.open(tmpfile, "w")
local mode = lfs.setmode(f, "binary") local result, mode = lfs.setmode(f, "binary")
assert(mode == "text") assert((result and mode == "text") or (not result and mode == "setmode not supported on this platform"))
mode = lfs.setmode(f, "text") result, mode = lfs.setmode(f, "text")
assert(mode == "binary") assert((result and mode == "binary") or (not result and mode == "setmode not supported on this platform"))
f:close() f:close()
end end