154 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
carregal
e52a7fef15 Using a default prefix for the Makefile 2007-10-27 22:42:32 +00:00
carregal
6368cd544f Fixing a wrong test (tks to Enrico Tassi) 2007-10-27 14:15:49 +00:00
carregal
9cdf62e1bd Documentation updates for 1.3.0 2007-10-26 21:44:43 +00:00
carregal
4790b562ca Checking for lfs.symlinkattributes so the tests are not applied in Windows 2007-10-26 21:06:14 +00:00
carregal
8432017680 Version 1.3.0 (final) 2007-10-26 21:01:07 +00:00
carregal
d202dad4f1 Removing the symbolic link tests since they don't work in Windows. We have to re-check them later. 2007-10-26 20:13:10 +00:00
carregal
6756befeff Changing version to LuaFileSystem 1.3.0 (work) 2007-10-05 02:06:58 +00:00
tomas
aeca787ff3 Improving conditional compilation for Windows version (thanks to Varol Kaptan) 2007-08-30 14:39:45 +00:00
tomas
1cfd57550e Correcting version 2007-08-30 14:38:07 +00:00
hisham
9f7e1dc153 Make include path comply with vanilla Lua 2007-07-31 03:22:55 +00:00
tomas
97ccdc90ed Avoiding dependency in backwards compatibility to Lua 5.0 2007-06-22 12:44:46 +00:00
tomas
57a64a5cfe Adding function symlinkatributes. Updating version to 1.3.0 2007-06-07 01:28:08 +00:00
carregal
47f40e5705 Changes related to the new build strucutre using Lua 5.1 default paths 2007-05-18 19:52:59 +00:00
carregal
d3e7a0ed12 Corrected the second of 2 bugs on the test script found by Shmuel Zeigerman involving the access and update time on lfs.touch() 2007-05-18 18:04:46 +00:00
carregal
6a22c3e728 Correction on the documentation of lfs.touch() 2007-05-17 23:08:56 +00:00
carregal
4e23cb01d9 Corrected 1 of 2 bugs on the test script found by Shmuel Zeigerman: the use of /tmp as a necessary directory.
Corrected a bug on the test script on slow fliesystems due to the reliance on close times
2007-05-17 23:08:20 +00:00
tomas
7ee2d8e1b2 Compilation bug fix: ISO C90 forbids mixed declarations and code 2007-05-15 12:58:35 +00:00
carregal
8033232c92 Simplified README 2007-05-08 21:39:23 +00:00
carregal
3b35114a16 Details for the 1.2.1 release. Version number, droping Lua 5.0 support 2007-05-08 19:23:12 +00:00
carregal
8161cea877 Changing the default Windows building directory from c:\lua51 to c:\lua5.1 2007-03-15 21:27:52 +00:00
carregal
a11b58023e Add removal rules for nmake clean 2006-12-19 21:41:42 +00:00
mascarenhas
94e104b98a config revert 2006-12-15 18:04:50 +00:00
mascarenhas
e92c9b4d9e Added pseudo-configure script
----------------------------------------------------------------------
2006-12-15 17:14:28 +00:00
mascarenhas
c9fe48709f Windows Makefile take two 2006-12-04 18:25:24 +00:00
mascarenhas
57622411a9 Windows Makefile and config 2006-12-04 18:24:18 +00:00
mascarenhas
67c2187e9a Dropped Lua 5.0 support. 2006-12-04 15:28:53 +00:00
tomas
5100f420b7 Updating to Lua 5.1 2006-07-24 01:19:42 +00:00
carregal
722f6a9869 Reference to LuaBinaries 5.0.2 2006-06-26 18:29:13 +00:00
tomas
e10a4bc816 Correcting version number 2006-06-08 18:06:18 +00:00
tomas
c182bab5f9 Adding version information 2006-06-08 18:04:29 +00:00
tomas
df2efb797c Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 17:55:33 +00:00
tomas
b6c8c13942 Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 16:23:25 +00:00
tomas
59ef09d270 Adding support for compilation on both Lua 5.0 and Lua 5.1 2006-06-08 16:16:23 +00:00
carregal
ac0de9a462 Documentation update - minor details 2006-03-23 20:44:00 +00:00
carregal
3a7a15178f Documentation update - minor details 2006-03-15 20:29:15 +00:00
tuler
f9e07c6b08 version update 2006-03-15 18:27:13 +00:00
carregal
f78e6e2abe Documentation update - minor details 2006-03-15 16:44:04 +00:00
tomas
dbb964ffd4 Standardizing the return values in case of error 2006-03-14 15:03:34 +00:00
carregal
9344c3933d Documentation update - minor details 2006-03-14 14:07:55 +00:00
tomas
121ae680f1 Standardizing execution errors to nil followed by an error message 2006-03-14 13:39:38 +00:00
tomas
1a1716f876 Expliciting the types of the attributes 2006-03-14 13:16:18 +00:00
tomas
e100c80db4 Removing unused code 2006-03-13 00:06:24 +00:00
carregal
85bb568ca2 Documentation update reflecting the Kepler structure 2006-03-11 14:34:22 +00:00
carregal
144b4ea052 Documentation update reflecting the Kepler structure 2006-03-10 23:37:48 +00:00
carregal
44e60e8b0c Comments update - minor details 2006-03-10 23:37:32 +00:00
carregal
55be9b2227 Comments update - minor details 2006-03-10 22:38:11 +00:00
tuler
b4da6c67bb version update. 2006-03-07 19:08:27 +00:00
tuler
a60f6307d5 variable declaration in an _WIN32 section 2006-03-07 19:07:57 +00:00
tomas
7ba0f3da76 Improving History 2006-03-04 00:33:43 +00:00
tomas
079b4e7f79 Improving lfs.attributes' reference 2006-03-03 23:58:05 +00:00
uid20013
6305fb87bd Saying where the library should be copied to. 2006-02-07 01:42:58 +00:00
tuler
55de5925e5 access time 11, 22 and 33 do not work on windows 2005-08-18 12:43:05 +00:00
tomas
e206fd0e63 Upgrading lfs.attributes so that it could receive an extra parameter.
If it is a table, then it is used instead of creating a new one.
If it is a string, then it is used to indicate the attribute which will
be returned (only one parameter is accepted).
2005-08-18 01:00:44 +00:00
uid20006
87b373b3d8 touch does not work with directories in windows. 2005-08-16 18:24:28 +00:00
uid20006
e7ced7f8af using lfs.rmdir instead of os.remove. 2005-08-16 13:48:23 +00:00
uid20006
5cb0d77851 moved luaL_argcheck call. 2005-08-16 13:47:58 +00:00
uid20013
e224c98838 Closing directory after a complete traversal.
Adding tests for that.
2005-08-16 00:11:15 +00:00
tomas
865d2453ff Correcting option which only exists on MacOS X. 2005-06-27 17:06:01 +00:00
tomas
1a1f08c803 Library name without prefix: <lib>.so.<ver>
Adding symbolic link: <lib>.so -> <lib.so.<ver>
2005-06-24 01:49:16 +00:00
tomas
3479c6d935 Removing _NAME field. 2005-06-21 11:46:13 +00:00
tomas
26d207052c Cleaning unused libraries while building .so. 2005-06-10 13:01:15 +00:00
tuler
82926a72ed version update 2005-06-09 16:22:37 +00:00
tuler
7446e31486 new function rmdir 2005-06-09 16:19:27 +00:00
carregal
af9acdaf85 Documentation update 2005-06-08 14:25:09 +00:00
tomas
9015b5352b Correcting linking on MacOS X. 2005-06-06 22:15:53 +00:00
tomas
9f9257647e Excluding -ldl option (it seems not necessary).
Including configurable config file.
2005-06-06 20:10:10 +00:00
tomas
95bd727a3d Standardizing Makefile and config. 2005-06-05 00:36:18 +00:00
tomas
9265a97822 Cleanup. 2005-06-04 18:22:29 +00:00
tuler
97abe2139e new function lfs.rmdir 2005-06-03 21:50:59 +00:00
tuler
197032fa7b changed link to LuaBinaries 2005-06-02 21:14:53 +00:00
carregal
bfe68e98e6 Documentation update 2005-06-02 21:02:44 +00:00
uid20006
99443a0111 correting name of generated zip file. 2005-05-30 19:18:44 +00:00
uid20002
ecaa0a5ae8 Documentation update 2005-05-30 18:25:15 +00:00
uid20006
50cf9740a6 *** empty log message *** 2005-05-30 18:19:14 +00:00
uid20006
f3deb0e4c6 release date update. 2005-05-30 17:57:11 +00:00
uid20006
164a44cb97 1.0 instead of 1.0.0 2005-05-30 17:54:49 +00:00
tomas
0182a1f17f Correction on library name (no more .dylib). 2005-05-28 21:48:36 +00:00
tomas
0aa3bf9a0a Upgrading for LuaBinaries. 2005-05-25 12:55:32 +00:00
carregal
d7c2e9d153 Documentation update 2005-05-24 23:27:34 +00:00
carregal
6d2f915ee4 Documentation update, using LuaBinaries 2005-05-24 23:05:18 +00:00
tuler
2a11208d8e LuaBinaries release 2 update. 2005-05-23 20:24:00 +00:00
carregal
62946f1b92 Correcting file format 2005-05-23 19:49:06 +00:00
carregal
a427f48bc8 Documentation update 2005-05-22 18:56:24 +00:00
carregal
e80d17dda9 Documentation update 2005-05-22 18:07:36 +00:00
uid20006
e9edc5d7a9 xhtml validation 2005-05-20 18:43:00 +00:00
uid20006
b80c656dfb xhtml validation 2005-05-20 18:38:07 +00:00
uid20006
646a17acdd changed from 1.1.0 to 1.1 2005-05-20 18:32:19 +00:00
uid20002
8db4be836c Documentation update 2005-05-20 18:23:29 +00:00
uid20002
6d548640cb Documentation update 2005-05-20 18:18:13 +00:00
uid20002
a3cf6af650 Documentation update 2005-05-20 18:04:56 +00:00
uid20002
51c0586f9c Documentation update 2005-05-20 12:30:13 +00:00
uid20002
3bdc8f7805 Documentation update 2005-05-20 12:10:58 +00:00
uid20002
41aee28e62 Documentation update 2005-05-19 20:31:04 +00:00
uid20002
8774e2caae Documentation update 2005-05-19 20:24:31 +00:00
tuler
e8e69b98f5 generating binary zip distribution on post build 2005-05-17 21:56:28 +00:00
tuler
5d40ae7548 compiled with luabinaries release 2 2005-05-06 20:12:07 +00:00
tuler
13cfce2191 new documentation format 2005-05-04 02:28:51 +00:00
tuler
bf9b039d9c *** keyword substitution change *** 2005-05-04 02:00:54 +00:00
tuler
ef77b214ee *** empty log message *** 2005-04-14 15:31:16 +00:00
tomas
f22a37da92 Upgrading version number. 2005-04-08 18:57:11 +00:00
tomas
bb0cb1f342 Upgrading Makefile for new directory structure. 2005-04-08 18:55:00 +00:00
tuler
2d9b354920 using luabinaries 2005-03-30 18:04:09 +00:00
tomas
cab9c08749 Melhoria de padronizacao e reutilizacao da compilacao e da instalacao. 2005-02-01 16:50:27 +00:00
tomas
5f942164a0 Acrescimo de documentacao da lfs.touch.
Adaptacao para a versao 1.1.
2005-01-24 10:59:58 +00:00
tuler
2540f6cbdb WIN32 details 2005-01-24 10:19:49 +00:00
tomas
57d3fc1c31 Acrescimo da funcao lfs.touch, inaugurando a versao 1.1. 2005-01-21 10:19:04 +00:00
tomas
12ff66217f Atualizacao para lancamento da versao 1.0 oficial 2005-01-19 14:30:08 +00:00
tomas
508c7b3b56 Eliminando funcao lfs.touch() para lancamento da versao 1.0 oficial. 2005-01-19 14:28:58 +00:00
tuler
e99b7844bb <sys/utime.h> in Windows. 2005-01-18 11:21:58 +00:00
tomas
86e97088a0 Acrescimo da funcao lfs.touch (lfs.c e test.lua).
Pequenas correcoes para evitar warnings de redefinicao de macros.
2005-01-18 10:48:02 +00:00
tomas
7a93f7ee03 Uniformizacao de nomes de variaveis entre as bibliotecas do Kepler.
Melhorias para reutilizacao do Makefile.
2005-01-18 09:36:11 +00:00
tomas
9dc07b0ada Retirando o artigo (The) dos links para o Projeto Kepler. 2004-12-28 16:39:51 +00:00
tuler
7f726e65bb Visual Studio 6 projects. 2004-12-14 16:26:31 +00:00
carregal
949d9dc86c HTML Tidying 2004-11-22 17:39:39 +00:00
tomas
e354e5c568 Troca de <> por "". 2004-11-17 14:08:04 +00:00
tomas
b71e2bd6a3 Troca de e-mail. 2004-11-11 15:33:20 +00:00
tuler
3234fcd2da versao beta, e nao alfa 2004-11-10 15:30:00 +00:00
tuler
19fe539ed1 alterada versao no Makefile 2004-11-10 14:44:01 +00:00
tuler
819cbf6efb link para a pagina de download do LuaForge.
verso beta.
2004-11-10 14:18:45 +00:00
tuler
688efd472c alguns atributos sao especificos de Unix. 2004-11-10 14:09:45 +00:00
tomas
c9286d40fe Correcoes em valores de retorno de funcoes. 2004-11-05 10:54:28 +00:00
tomas
2bc7cbf743 Melhorias na documentacao. 2004-11-05 10:37:29 +00:00
tuler
963ec46731 ifdefs por conta de problemas de compilacao no windows. 2004-11-04 22:21:28 +00:00
tomas
ccd7be1984 Acrescimo das variaveis de informacao. 2004-11-03 10:11:18 +00:00
tomas
4d5d1e75fa Pequenas correcoes nos valores de retorno de algumas funcoes.
Acrescimo do arquivo de testes.
2004-11-01 15:27:13 +00:00
tomas
3219f4618d Correcao no valor de retorno da mkdir. 2004-11-01 08:57:56 +00:00
tomas
f66af01eec Acrescimo de exemplo.
Acrescimo do logo.
2004-10-29 16:15:59 +00:00
tomas
40db9dba61 Acrescimo do logo na distribuicao. 2004-10-27 18:40:31 +00:00
tomas
1c8215ae46 Correcao nos atributos (eliminacao de atributos exclusivos do MacOS X). 2004-10-27 18:04:50 +00:00
tomas
b4970612f7 Acrescimo da funcao attributes. 2004-10-27 18:01:42 +00:00
tomas
0cc45c2881 Correcao nos campos de alteracao, modificacao e acesso do arquivo. 2004-10-27 18:01:01 +00:00
tomas
436e50c96a Troca dos links de download para o LuaForge. 2004-10-27 16:20:24 +00:00
tomas
7049b69af1 Pequenas melhorias na documentacao.
Implementacao da funcao `attributes' que recupera informacoes sobre os arquivos.
2004-10-23 22:33:11 +00:00
tomas
b191446532 Pequenas melhorias no processo de compilacao. 2004-10-15 10:45:18 +00:00
tomas
8ffae1be28 Pequena melhoria para achar os arquivos compat-5.1. 2004-10-15 10:07:53 +00:00
tomas
39fba7df43 Atualizando o esquema de compilacao para o uso da compat-5.1. 2004-10-15 10:04:15 +00:00
tomas
a6c8ca7123 Adaptacao `a nova funcao luaL_openlib (luaL_module). 2004-10-14 11:13:29 +00:00
tomas
8382ef4362 Atualizando o codigo para a nova proposta de pacotes. 2004-09-29 17:46:24 +00:00
tomas
c899c9b2e2 Regra que cria a distribuicao (Makefile).
Troca de nome da biblioteca (lfs).
2004-07-29 16:47:11 +00:00
tomas
70052678b1 Substituicao nos nomes dos arquivos. 2004-07-29 14:26:33 +00:00
24 changed files with 1770 additions and 737 deletions

View File

@@ -1,35 +1,22 @@
# $Id: Makefile,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
# $Id: Makefile,v 1.32 2008/02/11 22:42:21 carregal Exp $
T= luafilesystem
T= lfs
V= 1.4.0
CONFIG= ./config
include ./config
include $(CONFIG)
V= 1.0a
LIBNAME= lib$T.$V$(LIB_EXT)
L= $T.lua
TL= t_$T.lua
SRCS= src/$T.c
OBJS= src/$T.o
SRCS= $T.c
OBJS= $T.o
lib: src/lfs.so
src/lfs.so: $(OBJS)
export MACOSX_DEPLOYMENT_TARGET="10.3"; $(CC) $(CFLAGS) $(LIB_OPTION) -o src/lfs.so $(OBJS)
lib: $(LIBNAME)
$(LIBNAME): $(OBJS) $(TL)
$(CC) $(CFLAGS) $(LIB_OPTION) -o $(LIBNAME) $(OBJS) $(LIBS)
sed -e "s|LIB_NAME|$(LIB_DIR)/$(LIBNAME)|" $(TL) > $L
$(LUA_DIR)/$L: $L
mkdir -p $(LUA_DIR)
cp $L $(LUA_DIR)
install: $(LUA_DIR)/$L $(LIBNAME)
mkdir -p $(LIB_DIR)
cp $(LIBNAME) $(LIB_DIR)
install: src/lfs.so
mkdir -p $(LUA_LIBDIR)
cp src/lfs.so $(LUA_LIBDIR)
clean:
rm -f $L $(LIBNAME) $(OBJS)
dist:
mkdir -p $(DIST_DIR)
cp config $(SRCS) $T.h $(TL) Makefile $(DIST_DIR)
rm -f src/lfs.so $(OBJS)

26
Makefile.win Normal file
View File

@@ -0,0 +1,26 @@
# $Id: Makefile.win,v 1.10 2008/02/13 22:08:31 carregal Exp $
T= lfs
V= 1.4.0
include config.win
SRCS= src\$T.c
OBJS= src\$T.obj
lib: src\lfs.dll
.c.obj:
$(CC) /c /Fo$@ $(CFLAGS) $<
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\lfs.dll
IF NOT EXIST "$(LUA_LIBDIR)" mkdir "$(LUA_LIBDIR)"
copy src\lfs.dll "$(LUA_LIBDIR)"
clean:
del src\lfs.dll $(OBJS) src\$T.lib src\$T.exp
IF EXIST src\lfs.dll.manifest del src\lfs.dll.manifest

34
README Normal file
View File

@@ -0,0 +1,34 @@
LuaFileSystem - File System Library for Lua
Copyright 2003 Kepler Project
http://www.keplerproject.org/luafilesystem
Description
-----------
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.
LuaFileSystem is free software and uses the same license as Lua 5.1
Current version is 1.4.0
LuaRocks Installation
---------------------
luarocks install luafilesystem
Unix Installation
-----------------
To install on Linux/OSX/BSD, please edit the config file and then call
make
make install
The last step may require root privileges.
Windows Installation
--------------------
To install on Windows, please copy lfs.ddl to your package.cpath directory
Documentation
-------------
Please check the documentation at /doc/us/ for more information.

29
config
View File

@@ -1,21 +1,24 @@
# Installation directories
# System's libraries directory (where Lua libraries are installed)
LIB_DIR= /usr/local/lib
LUA_DIR= /usr/local/lua
# Default installation prefix
PREFIX=/usr/local
# System's libraries directory (where binary libraries are installed)
LUA_LIBDIR= $(PREFIX)/lib/lua/5.1
# Lua includes directory
LUA_INC= $(PREFIX)/include
# OS dependent
LIB_EXT= .dylib
#LIB_EXT= .so
LIB_OPTION= -dynamiclib #for MacOS X
#LIB_OPTION= -shared #for Linux
LIB_OPTION= -shared #for Linux
#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X
LIBNAME= $T.so.$V
# Compilation directives
# pre-compile and include mod2.lua into mod_lua.c
# On FreeBSD systems, the following line should be commented
DLLIB= -ldl
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings
INCS= -I/usr/local/include/lua5
LIBS= -L$(LIB_DIR) -llua -llualib -lm $(DLLIB)
WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic
INCS= -I$(LUA_INC)
CFLAGS= $(WARN) $(INCS)
CC= gcc
# $Id: config,v 1.21 2007/10/27 22:42:32 carregal Exp $

17
config.win Normal file
View File

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

103
doc/us/examples.html Normal file
View File

@@ -0,0 +1,103 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
<div id="main">
<div id="navigation">
<h1>LuaFileSystem</h1>
<ul>
<li><a href="index.html">Home</a>
<ul>
<li><a href="index.html#overview">Overview</a></li>
<li><a href="index.html#status">Status</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="index.html#history">History</a></li>
<li><a href="index.html#credits">Credits</a></li>
<li><a href="index.html#contact">Contact us</a></li>
</ul>
</li>
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><strong>Examples</strong></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
<div id="content">
<h2><a name="example"></a>Examples</h2>
<h3>Directory iterator</h3>
<p>The following example iterates over a directory and recursively lists the
attributes for each file inside it.</p>
<pre class="example">
require"lfs"
function attrdir (path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..'/'..file
print ("\t "..f)
local attr = lfs.attributes (f)
assert (type(attr) == "table")
if attr.mode == "directory" then
attrdir (f)
else
for name, value in pairs(attr) do
print (name, value)
end
end
end
end
end
attrdir (".")
</pre>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<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.8 2007/12/14 15:28:04 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>

View File

@@ -1,114 +1,167 @@
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<style type="text/css">
ul { list-style-type: disc };
</style>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body bgcolor="#FFFFFF">
<body>
<center>
<table border=0 cellspacing=2 cellpadding=2>
<tr><td align=center><a href="http://www.keplerproject.org">
<img border=0 alt="LuaFileSystem" src="luafilesystem.png"></a>
<tr><td align=center><big><b>LuaFileSystem</b></big>
<tr><td align=center valign=top>File system library for the
<a href="http://www.lua.org">Lua</a>
programming language
</table>
</center>
<p>
<div id="container">
<center><small>
<a href="#over">overview</a> &middot;
<a href="#download">download</a> &middot;
<a href="manual.html">manual</a> &middot;
<a href="#credits">credits</a> &middot;
<a href="#contact">contact us</a>
</small></center>
<p>
<div id="product">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
<hr>
<h2>Contents</h2>
<p>
<ul>
<li> <a href="#over">Overview</a>
<li> <a href="#version">Current Version</a>
<li> <a href="#download">Download</a>
<li> <a href="#manual">Manual</a>
<li> <a href="#credits">Credits</a>
<li> <a href="#contact">Contact us</a>
</ul>
<div id="main">
<div id="navigation">
<h1>LuaFileSystem</h1>
<ul>
<li><strong>Home</strong>
<ul>
<li><a href="index.html#overview">Overview</a></li>
<li><a href="index.html#status">Status</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="index.html#history">History</a></li>
<li><a href="index.html#credits">Credits</a></li>
<li><a href="index.html#contact">Contact us</a></li>
</ul>
</li>
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
<a name="over"></a>
<h2>Overview</h2>
<p>
LuaFileSystem is a library developed to complement the set of functions
related to file systems offered by the standard Lua distribution.
One of its goals is to be as portable as Lua.
<p>
LuaFileSystem is free software and uses the same
<a href="license.html">license</a>
as Lua 5.0.
<div id="content">
<h2><a name="overview"></a>Overview</h2>
<a name="version"></a>
<h2>Current version</h2>
<p>
Current version is 1.0 alpha.
It was developed for Lua 5.0.
</p>
<p>LuaFileSystem is a <a href="http://www.lua.org">Lua</a> library
developed to complement the set of functions related to file
systems offered by the standard Lua distribution.</p>
<p>LuaFileSystem offers a portable way to access
the underlying directory structure and file attributes.</p>
<a name="download"></a>
<h2>Download</h2>
<p>
LuaFileSystem can be downloaded in source code from the following links:
<p>
<ul>
<li><a href="luafilesystem-1.0a.tar.gz">luafilesystem-1.0a.tar.gz</a>.
<li><a href="luafilesystem-1.0a.zip">luafilesystem-1.0a.zip</a>.
</ul>
<p>LuaFileSystem is free software and uses the same
<a href="license.html">license</a> as Lua 5.1.</p>
<h2><a name="status"></a>Status</h2>
<a name="new"></a>
<h2>What's new</h2>
<p>
<ul>
<li>[2/Aug/2004] Version 1.0 alpha released
</ul>
<p>Current version is 1.4.0. It was developed for Lua 5.1.</p>
<h2><a name="download"></a>Download</h2>
<a name="credits"></a>
<h2>Credits</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.3 a Windows binary
version of LuaFileSystem (compiled with Visual Studio 2005 Express) can be found at the same LuaForge page.</p>
<p>
LuaFileSystem was designed by Roberto Ierusalimschy,
Andr&eacute; Carregal and Tom&aacute;s Guisasola as part of
<a href="http://www.keplerproject.org">The Kepler Project</a>
which holds its copyright.
</p>
<h2><a name="history"></a>History</h2>
<dl class="history">
<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
<a href="manual.html#symlinkattributes"><code>lfs.symlinkattributes</code></a>
(works only in non Windows systems).</li>
</ul>
</dd>
<a name="contact"></a>
<h2>Contact us</h2>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2.1</a></strong> [08/May/2007]</dt>
<dd>
<ul>
<li>compatible only with Lua 5.1 (Lua 5.0 support was dropped)</li>
</ul>
</dd>
<p>
For more information please
<a href="mailto:tomas-NO-SPAM-THANKS@keplerproject.org">contact us</a>.
Comments are welcome!
</p>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2</a></strong> [15/Mar/2006]</dt>
<dd>
<ul>
<li>added optional argument to
<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 <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 <a href="manual.html#touch"><code>lfs.touch</code></a>.</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.0/">Version 1.0</a></strong> [21/Jan/2005]</dt>
<dd />
<p>
<hr>
<small>
$Id: index.html,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
</small>
<dt><strong>Version 1.0 Beta</strong> [10/Nov/2004]</dt>
<dd />
</dl>
<h2><a name="credits"></a>Credits</h2>
<p>LuaFileSystem was designed by Roberto Ierusalimschy,
Andr&eacute; Carregal and Tom&aacute;s Guisasola as part of the
<a href="http://www.keplerproject.org">Kepler Project</a>,
which holds its copyright.</p>
<h2><a name="contact"></a>Contact us</h2>
<p>For more information please
<a href="mailto:info-NO-SPAM-THANKS@keplerproject.org">contact us</a>.
Comments are welcome!</p>
<p>You can also reach other Kepler developers and users on the Kepler Project
<a href="http://luaforge.net/mail/?group_id=104">mailing list</a>.</p>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<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.40 2008/02/13 21:00:10 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>

View File

@@ -1,78 +1,122 @@
<! See Copyright Notice at the end of this file>
<HTML>
<HEAD>
<TITLE>LuaFileSystem: license</TITLE>
</HEAD>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<BODY BGCOLOR="#FFFFFF">
<body>
<HR>
<H1>
License
</H1>
<div id="container">
LuaFileSystem
is free software:
it can be used for both academic and commercial purposes at absolutely no cost.
There are no royalties or GNU-like "copyleft" restrictions.
LuaFileSystem qualifies as
<A HREF="http://www.opensource.org/docs/definition.html">Open Source</A>
<div id="product">
<div id="product_logo">
<a href="http://www.keplerproject.org">
<img alt="LuaFileSystem" src="luafilesystem.png"/>
</a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
<div id="main">
<div id="navigation">
<h1>LuaFileSystem</h1>
<ul>
<li><a href="index.html">Home</a>
<ul>
<li><a href="index.html#overview">Overview</a></li>
<li><a href="index.html#status">Status</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="index.html#history">History</a></li>
<li><a href="index.html#credits">Credits</a></li>
<li><a href="index.html#contact">Contact us</a></li>
</ul>
</li>
<li><a href="manual.html">Manual</a>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><strong>License</strong></li>
</ul>
</div> <!-- id="navigation" -->
<div id="content">
<h1>License</h1>
<p>
LuaFileSystem is free software: it can be used for both academic
and commercial purposes at absolutely no cost. There are no
royalties or GNU-like "copyleft" restrictions. LuaFileSystem
qualifies as
<a href="http://www.opensource.org/docs/definition.html">Open Source</a>
software.
Its licenses are compatible with
<A HREF="http://www.gnu.org/licenses/gpl.html">GPL</A>.
LuaFileSystem is not in the public domain and
<a href="http://www.keplerproject.org">The Kepler Project</a>
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
LuaFileSystem is not in the public domain and the
<a href="http://www.keplerproject.org">Kepler Project</a>
keep its copyright.
The legal details are below.
<P>
The legal details are below.
</p>
The spirit of the license is that
you are free to use LuaFileSystem for any purpose at no cost without having to ask us.
The only requirement is that
if you do use LuaFileSystem,
then you should give us credit by including the appropriate copyright notice
somewhere in your product or its documentation.
<P>
<p>The spirit of the license is that you are free to use
LuaFileSystem for any purpose at no cost without having to ask us.
The only requirement is that if you do use LuaFileSystem, then you
should give us credit by including the appropriate copyright notice
somewhere in your product or its documentation.</p>
The LuaFileSystem library is designed and implemented
by
Roberto Ierusalimschy,
Andr&eacute; Carregal and
Tom&aacute;s Guisasola.
The implementation is not derived from licensed software.
<P>
<p>The LuaFileSystem library is designed and implemented by Roberto
Ierusalimschy, Andr&eacute; Carregal and Tom&aacute;s Guisasola.
The implementation is not derived from licensed software.</p>
<!-- ===================================================================== -->
<HR>
Copyright &copy; 2004 The Kepler Project.
<P>
<hr/>
<p>Copyright &copy; 2003 Kepler Project.</p>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
<P>
<p>Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:</p>
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
<P>
<p>The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.</p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
<P>
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.</p>
<!-- ===================================================================== -->
<HR>
<SMALL>
$Id: license.html,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
</SMALL>
</div> <!-- id="content" -->
</BODY>
</HTML>
</div> <!-- id="main" -->
<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.13 2008/02/11 22:42:21 carregal Exp $</small></p>
</div><!-- id="about" -->
</div><!-- id="container" -->
</body>
</html>

BIN
doc/us/luafilesystem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -1,144 +1,257 @@
<! See Copyright Notice in license.html>
<html>
<head>
<title>LuaFileSystem</title>
<style type="text/css">
ul { list-style-type: disc };
</style>
</head>
<body bgcolor="#FFFFFF">
<hr>
<center>
<table border=0 cellspacing=2 cellpadding=2>
<tr><td align=center><a href="http://www.keplerproject.org/luafilesystem">
<img border=0 alt="LuaFileSystem logo" src="luafilesystem.png"></a>
<tr><td align=center><big><b>LuaFileSystem Reference Manual</b></big>
<tr><td align=center valign=top>File system library for the
<a href="http://www.lua.org">Lua</a>
programming language
</table>
</center>
<p>
<center><small>
<a href="index.html">home</a> &middot;
<a href="#introduction">introduction</a> &middot;
<a href="#reference">reference</a> &middot;
<a href="#example">example</a>
</small></center>
<p>
<hr>
<a name="introduction"></a>
<h2>Introduction</h2>
<p>
LuaFileSystem is a <a href="http://www.lua.org">Lua</a> library
developed to complement the set of functions related to file systems offered
by the standard Lua distribution.
<p>
LuaFileSystem is free software and uses the same
<a href="license.html">license</a>
as Lua 5.0.
</p>
<a name="reference"></a>
<h2>Reference</h2>
<p>
LuaFileSystem offers the following functions:
<ul>
<a name="chdir"></a>
<li> <b><tt>luafilesystem.chdir (path)</tt></b> <br>
Changes the current
working directory to the given <tt>path</tt>.
<a name="getcwd"></a>
<li> <b><tt>luafilesystem.currentdir ()</tt></b> <br>
Returns the current
working directory or <code>nil</code> plus an error string.
<a name="dir"></a>
<li> <b><tt>luafilesystem.dir (path)</tt></b> <br>
Lua iterator over the entries
of a given directory.
<a name="lock"></a>
<li> <b><tt>luafilesystem.lock (filehandle, mode[, start[, length]])</tt></b> <br>
Locks a file or a part of it.
This function works on <em>open files</em>;
the file handle should be specified as the first argument.
The string <code>mode</code> could be either <code>r</code> (for a
read/shared lock) or <code>w</code> (for a write/exclusive lock).
The optional arguments <code>start</code> and <code>length</code> can be
used to specify a starting point and its length;
both should be numbers.
This function returns a boolean indicating if the operation was successful;
in case of error, it returns <code>false</code> plus a string describing the
error.
<a name="mkdir"></a>
<li> <b><tt>luafilesystem.mkdir (dirname)</tt></b> <br>
Creates a new directory.
The argument is the name of the new directory.
<a name="unlock"></a>
<li> <b><tt>luafilesystem.unlock (filehandle[, start[, length]])</tt></b> <br>
Unlocks a file or a part of it.
This function works on <em>open files</em>;
the file handle should be specified as the first argument.
The optional arguments <code>start</code> and <code>length</code> can be
used to specify a starting point and its length;
both should be numbers.
This function returns a boolean indicating if the operation was successful;
in case of error, it returns <code>false</code> plus a string describing the
error.
</ul>
<a name="example"></a>
<h2>Example</h2>
<a name="contents"></a>
<h2>Contents</h2>
<p>
<ul>
<li> <a href="#introduction">Introduction</a>
<li> <a href="#reference">Reference</a>
<ul>
<li> <a href="#chdir">chdir</a>
<li> <a href="#currentdir">currentdir</a>
<li> <a href="#dir">dir</a>
<li> <a href="#lock">lock</a>
<li> <a href="#mkdir">mkdir</a>
<li> <a href="#unlock">unlock</a>
</ul>
<li> <a href="#examples">Examples</a>
</ul>
</p>
<p>
<center><small>
<a href="index.html">home</a> &middot;
<a href="#introduction">introduction</a> &middot;
<a href="#reference">reference</a> &middot;
<a href="#example">example</a>
</small></center>
<p>
<hr>
<small>
$Id: manual.html,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
</small>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo">
<a href="http://www.keplerproject.org"><img alt="LuaFileSystem" src="luafilesystem.png"/></a>
</div>
<div id="product_name"><big><strong>LuaFileSystem</strong></big></div>
<div id="product_description">File System Library for the Lua Programming Language</div>
</div> <!-- id="product" -->
<div id="main">
<div id="navigation">
<h1>LuaFileSystem</h1>
<ul>
<li><a href="index.html">Home</a>
<ul>
<li><a href="index.html#overview">Overview</a></li>
<li><a href="index.html#status">Status</a></li>
<li><a href="index.html#download">Download</a></li>
<li><a href="index.html#history">History</a></li>
<li><a href="index.html#credits">Credits</a></li>
<li><a href="index.html#contact">Contact us</a></li>
</ul>
</li>
<li><strong>Manual</strong>
<ul>
<li><a href="manual.html#introduction">Introduction</a></li>
<li><a href="manual.html#building">Building</a></li>
<li><a href="manual.html#installation">Installation</a></li>
<li><a href="manual.html#reference">Reference</a></li>
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
</ul>
</div> <!-- id="navigation" -->
<div id="content">
<h2><a name="introduction"></a>Introduction</h2>
<p>LuaFileSystem is a <a href="http://www.lua.org">Lua</a> library
developed to complement the set of functions related to file
systems offered by the standard Lua distribution.</p>
<p>LuaFileSystem offers a portable way to access
the underlying directory structure and file attributes.</p>
<h2><a name="building"></a>Building</h2>
<p>
LuaFileSystem should be built with Lua 5.1 so the language library
and header files for the target version must be installed properly.
</p>
<p>
LuaFileSystem offers a Makefile and a separate configuration file,
<code>config</code>,
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.
</p>
<h2><a name="installation"></a>Installation</h2>
<p>The easiest way to install LuaFileSystem is to use LuaRocks:</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>
<p>
LuaFileSystem offers the following functions:
</p>
<dl class="reference">
<dt><a name="attributes"></a><strong><code>lfs.attributes (filepath [, aname])</code></strong></dt>
<dd>Returns a table with the file attributes corresponding to
<code>filepath</code> (or <code>nil</code> followed by an error message
in case of error).
If the second optional argument is given, then only the value of the
named attribute is returned (this use is equivalent to
<code>lfs.attributes(filepath).aname</code>, but the table is not created
and only one attribute is retrieved from the O.S.).
The attributes are described as follows;
attribute <code>mode</code> is a string, all the others are numbers,
and the time related attributes use the same time reference of
<a href="http://www.lua.org/manual/5.1/manual.html#pdf-os.time"><code>os.time</code></a>:
<dl>
<dt><strong><code>dev</code></strong></dt>
<dd>on Unix systems, this represents the device that the inode resides on. On Windows systems,
represents the drive number of the disk containing the file</dd>
<dt><strong><code>ino</code></strong></dt>
<dd>on Unix systems, this represents the inode number. On Windows systems this has no meaning</dd>
<dt><strong><code>mode</code></strong></dt>
<dd>string representing the associated protection mode (the values could be
<code>file</code>, <code>directory</code>, <code>link</code>, <code>socket</code>,
<code>named pipe</code>, <code>char device</code>, <code>block device</code> or
<code>other</code>)</dd>
<dt><strong><code>nlink</code></strong></dt>
<dd>number of hard links to the file</dd>
<dt><strong><code>uid</code></strong></dt>
<dd>user-id of owner (Unix only, always 0 on Windows)</dd>
<dt><strong><code>gid</code></strong></dt>
<dd>group-id of owner (Unix only, always 0 on Windows)</dd>
<dt><strong><code>rdev</code></strong></dt>
<dd>on Unix systems, represents the device type, for special file inodes.
On Windows systems represents the same as <code>dev</code></dd>
<dt><strong><code>access</code></strong></dt>
<dd>time of last access</dd>
<dt><strong><code>modification</code></strong></dt>
<dd>time of last data modification</dd>
<dt><strong><code>change</code></strong></dt>
<dd>time of last file status change</dd>
<dt><strong><code>size</code></strong></dt>
<dd>file size, in bytes</dd>
<dt><strong><code>blocks</code></strong></dt>
<dd>block allocated for file; (Unix only)</dd>
<dt><strong><code>blksize</code></strong></dt>
<dd>optimal file system I/O blocksize; (Unix only)</dd>
</dl>
This function uses <code>stat</code> internally thus if the given
<code>filepath</code> is a symbolic link, it is followed (if it points to
another link the chain is followed recursively) and the information
is about the file it refers to.
To obtain information about the link itself, see function
<a href="#symlinkattributes">lfs.symlinkattributes</a>.
</dd>
<dt><a name="chdir"></a><strong><code>lfs.chdir (path)</code></strong></dt>
<dd>Changes the current working directory to the given
<code>path</code>.<br />
Returns <code>true</code> in case of success or <code>nil</code> plus an
error string.</dd>
<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>
plus an error string.</dd>
<dt><a name="dir"></a><strong><code>lfs.dir (path)</code></strong></dt>
<dd>
Lua iterator over the entries of a given directory.
Each time the iterator is called it returns a string with an entry of the
directory; <code>nil</code> is returned when there is no more entries.
Raises an error if <code>path</code> is not a directory.
</dd>
<dt><a name="lock"></a><strong><code>lfs.lock (filehandle, mode[, start[, length]])</code></strong></dt>
<dd>Locks a file or a part of it. This function works on <em>open files</em>; the
file handle should be specified as the first argument.
The string <code>mode</code> could be either
<code>r</code> (for a read/shared lock) or <code>w</code> (for a
write/exclusive lock). The optional arguments <code>start</code>
and <code>length</code> can be used to specify a starting point and
its length; both should be numbers.<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="mkdir"></a><strong><code>lfs.mkdir (dirname)</code></strong></dt>
<dd>Creates a new directory. The argument is the name of the new
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="rmdir"></a><strong><code>lfs.rmdir (dirname)</code></strong></dt>
<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
it obtains information about the link itself (not the file it refers to).
This function is not available in Windows so you may want to make sure that
<code>lfs.symlinkattributes</code> exists before using it.
</dd>
<dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt>
<dd>Set access and modification times of a file. This function is
a bind to <code>utime</code> function. The first argument is the
filename, the second argument (<code>atime</code>) is the access time,
and the third argument (<code>mtime</code>) is the modification time.
Both times are provided in seconds (which should be generated with
Lua standard function <code>os.time</code>).
If the modification time is omitted, the access time provided is used;
if both times are omitted, the current time is used.<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="unlock"></a><strong><code>lfs.unlock (filehandle[, start[, length]])</code></strong></dt>
<dd>Unlocks a file or a part of it. This function works on
<em>open files</em>; the file handle should be specified as the first
argument. The optional arguments <code>start</code> and
<code>length</code> can be used to specify a starting point and its
length; both should be numbers.<br />
Returns <code>true</code> if the operation was successful;
in case of error, it returns <code>nil</code> plus an error string.
</dd>
</dl>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<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.40 2008/02/11 22:48:16 carregal Exp $</small></p>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>

View File

@@ -1,351 +0,0 @@
/*
** File system manipulation library.
** This library offers these functions:
** luafilesystem.attributes (filepath [, attributename])
** luafilesystem.chdir (path)
** luafilesystem.currentdir ()
** luafilesystem.dir (path)
** luafilesystem.mkdir (path)
** luafilesystem.lock (fh, mode)
** luafilesystem.unlock (fh)
**
** $Id: luafilesystem.c,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
*/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#ifdef WIN32
#include <direct.h>
#include <io.h>
#include <sys/locking.h>
#else
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include "luafilesystem.h"
/* Define 'strerror' for systems that do not implement it */
#ifdef NO_STRERROR
#define strerror(_) "System unable to describe the error"
#endif
/* Define 'getcwd' for systems that do not implement it */
#ifdef NO_GETCWD
#define getcwd(p,s) NULL
#define getcwd_error "Function 'getcwd' not provided by system"
#else
#define getcwd_error strerror(errno)
#endif
#define DIR_METATABLE "directory metatable"
#define MAX_DIR_LENGTH 1023
#ifdef _WIN32
typedef struct dir_data {
long hFile;
char pattern[MAX_DIR_LENGTH+1];
} dir_data;
#endif
/*
** This function changes the working (current) directory
*/
static int change_dir (lua_State *L) {
const char *path = luaL_checkstring(L, 1);
if (chdir(path))
luaL_error(L,"Unable to change working directory to '%s'\n%s\n",
path, chdir_error);
return 0;
}
/*
** This function returns the current directory
** If unable to get the current directory, it returns nil
** 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;
}
}
/*
** Check if the given element on the stack is a file and returns it.
*/
static FILE *check_file (lua_State *L, int idx, const char *funcname) {
FILE **fh = (FILE **)luaL_checkudata (L, idx, "FILE*");
if (fh == NULL) {
luaL_error (L, "%s: not a file", funcname);
return 0;
} else if (*fh == NULL) {
luaL_error (L, "%s: closed file", funcname);
return 0;
} else
return *fh;
}
/*
**
*/
static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long start, long len, const char *funcname) {
int code;
#ifdef WIN32
/* lkmode valid values are:
_LK_LOCK Locks the specified bytes. If the bytes cannot be locked, the program immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, the constant returns an error.
_LK_NBLCK Locks the specified bytes. If the bytes cannot be locked, the constant returns an error.
_LK_NBRLCK Same as _LK_NBLCK.
_LK_RLCK Same as _LK_LOCK.
_LK_UNLCK Unlocks the specified bytes, which must have been previously locked.
Regions should be locked only briefly and should be unlocked before closing a file or exiting the program.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__locking.asp
*/
int lkmode;
switch (*mode) {
case 'r': lkmode = _LK_NBLCK; break;
case 'w': lkmode = _LK_NBLCK; break;
case 'u': lkmode = _LK_UNLCK; break;
default : luaL_error (L, "%s: invalid mode", funcname);
}
if (!len) {
fseek (fh, 0L, SEEK_END);
len = ftell (fh);
}
fseek (fh, start, SEEK_SET);
code = _locking (fileno(fh), lkmode, len);
#else
struct flock f;
switch (*mode) {
case 'w': f.l_type = F_WRLCK; break;
case 'r': f.l_type = F_RDLCK; break;
case 'u': f.l_type = F_UNLCK; break;
default : luaL_error (L, "%s: invalid mode", funcname);
}
f.l_whence = SEEK_SET;
f.l_start = (off_t)start;
f.l_len = (off_t)len;
code = fcntl (fileno(fh), F_SETLK, &f);
#endif
return (code != -1);
}
/*
** Locks a file.
** @param #1 File handle.
** @param #2 String with lock mode ('w'rite, 'r'ead).
** @param #3 Number with start position (optional).
** @param #4 Number with length (optional).
*/
static int file_lock (lua_State *L) {
FILE *fh = check_file (L, 1, "lock");
const char *mode = luaL_checkstring (L, 2);
const long start = luaL_optlong (L, 3, 0);
long len = luaL_optlong (L, 4, 0);
if (_file_lock (L, fh, mode, start, len, "lock")) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushboolean (L, 0);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
}
/*
** Unlocks a file.
** @param #1 File handle.
** @param #2 Number with start position (optional).
** @param #3 Number with length (optional).
*/
static int file_unlock (lua_State *L) {
FILE *fh = check_file (L, 1, "unlock");
const long start = luaL_optlong (L, 2, 0);
long len = luaL_optlong (L, 3, 0);
if (_file_lock (L, fh, "u", start, len, "unlock")) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushboolean (L, 0);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
}
/*
static void cgilua_sleep( lua_State *L )
{
unsigned int usec = (unsigned int)luaL_check_number( L, 1 );
#ifndef WIN32
sleep( (unsigned int)ceil( usec/1000.0 ));
#else
Sleep( (DWORD)usec );
#endif
}
static void cgilua_filesize( lua_State *L )
{
struct stat info;
char *file = luaL_check_string( L, 1 );
if (stat(file, &info))
{
lua_pushnil( L );
lua_pushstring( L, "Cannot retrieve stat info from file" );
return;
}
lua_pushnumber(L, info.st_size);
}
*/
static int make_dir (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
int fail;
#ifdef WIN32
int oldmask = umask (0);
fail = _mkdir (path);
#else
mode_t oldmask = umask( (mode_t)0 );
fail = mkdir (path, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP |
S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH );
#endif
lua_pushboolean (L, fail);
umask (oldmask);
return 1;
}
/*
** Directory iterator
*/
static int dir_iter (lua_State *L) {
#ifdef _WIN32
dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1));
struct _finddata_t c_file;
if (d->hFile == 0L) { /* first entry */
if ((d->hFile = _findfirst (d->pattern, &c_file)) == -1L) {
lua_pushnil (L);
lua_pushstring (L, strerror (errno));
return 2;
} else {
lua_pushstring (L, c_file.name);
return 1;
}
} else { /* next entry */
if (_findnext (d->hFile, &c_file) == -1L)
return 0;
else {
lua_pushstring (L, c_file.name);
return 1;
}
}
#else
DIR *d = *(DIR **) lua_touserdata (L, lua_upvalueindex (1));
struct dirent *entry;
if ((entry = readdir (d)) != NULL) {
lua_pushstring (L, entry->d_name);
return 1;
}
else
return 0;
#endif
}
/*
** Closes directory iterators
*/
static int dir_close (lua_State *L) {
#ifdef _WIN32
dir_data *d = (dir_data *)lua_touserdata (L, 1);
if (d->hFile) {
_findclose (d->hFile);
}
#else
DIR *d = *(DIR **)lua_touserdata (L, 1);
if (d)
closedir (d);
#endif
return 0;
}
/*
** Factory of directory iterators
*/
static int dir_iter_factory (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
#ifdef _WIN32
dir_data *dir = (dir_data *) lua_newuserdata (L, sizeof(dir_data));
dir->hFile = 0L;
if (strlen(path) > MAX_DIR_LENGTH)
luaL_error (L, "path too long: %s", path);
else
sprintf (dir->pattern, "%s/*", path);
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
#else
DIR **d = (DIR **) lua_newuserdata (L, sizeof(DIR *));
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
*d = opendir (path);
if (*d == NULL)
luaL_error (L, "cannot open %s: %s", path, strerror (errno));
#endif
lua_pushcclosure (L, dir_iter, 1);
return 1;
}
/*
** Creates directory metatable.
*/
static int dir_create_meta (lua_State *L) {
luaL_newmetatable (L, DIR_METATABLE);
/* set its __gc field */
lua_pushstring (L, "__gc");
lua_pushcfunction (L, dir_close);
lua_settable (L, -3);
return 1;
}
static const struct luaL_reg fslib[] = {
{"chdir", change_dir},
{"currentdir", get_dir},
{"dir", dir_iter_factory},
{"lock", file_lock},
{"mkdir", make_dir},
{"unlock", file_unlock},
{NULL, NULL},
};
int luaopen_luafilesystem (lua_State *L) {
dir_create_meta (L);
luaL_openlib (L, "luafilesystem", fslib, 0);
return 1;
}

View File

@@ -1,5 +0,0 @@
LIBRARY luafilesystem.dll
DESCRIPTION "LuaFilesystem"
VERSION 1.0
EXPORTS
luaopen_luafilesystem

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)"
}
}
}
}

657
src/lfs.c Normal file
View File

@@ -0,0 +1,657 @@
/*
** LuaFileSystem
** Copyright Kepler Project 2003 (http://www.keplerproject.org/luafilesystem)
**
** File system manipulation library.
** This library offers these functions:
** lfs.attributes (filepath [, attributename])
** lfs.chdir (path)
** lfs.currentdir ()
** lfs.dir (path)
** 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.47 2008/02/11 22:42:21 carregal Exp $
*/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#ifdef _WIN32
#include <direct.h>
#include <io.h>
#include <sys/locking.h>
#include <sys/utime.h>
#include <fcntl.h>
#else
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <sys/types.h>
#include <utime.h>
#endif
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include "lfs.h"
/* Define 'strerror' for systems that do not implement it */
#ifdef NO_STRERROR
#define strerror(_) "System unable to describe the error"
#endif
/* Define 'getcwd' for systems that do not implement it */
#ifdef NO_GETCWD
#define getcwd(p,s) NULL
#define getcwd_error "Function 'getcwd' not provided by system"
#else
#define getcwd_error strerror(errno)
#endif
#define DIR_METATABLE "directory metatable"
#define MAX_DIR_LENGTH 1023
typedef struct dir_data {
int closed;
#ifdef _WIN32
long hFile;
char pattern[MAX_DIR_LENGTH+1];
#else
DIR *dir;
#endif
} 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
*/
static int change_dir (lua_State *L) {
const char *path = luaL_checkstring(L, 1);
if (chdir(path)) {
lua_pushnil (L);
lua_pushfstring (L,"Unable to change working directory to '%s'\n%s\n",
path, chdir_error);
return 2;
} else {
lua_pushboolean (L, 1);
return 1;
}
}
/*
** This function returns the current directory
** If unable to get the current directory, it returns nil
** and a string describing the error
*/
static int get_dir (lua_State *L) {
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;
}
}
/*
** Check if the given element on the stack is a file and returns it.
*/
static FILE *check_file (lua_State *L, int idx, const char *funcname) {
FILE **fh = (FILE **)luaL_checkudata (L, idx, "FILE*");
if (fh == NULL) {
luaL_error (L, "%s: not a file", funcname);
return 0;
} else if (*fh == NULL) {
luaL_error (L, "%s: closed file", funcname);
return 0;
} else
return *fh;
}
/*
**
*/
static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long start, long len, const char *funcname) {
int code;
#ifdef _WIN32
/* lkmode valid values are:
LK_LOCK Locks the specified bytes. If the bytes cannot be locked, the program immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, the constant returns an error.
LK_NBLCK Locks the specified bytes. If the bytes cannot be locked, the constant returns an error.
LK_NBRLCK Same as _LK_NBLCK.
LK_RLCK Same as _LK_LOCK.
LK_UNLCK Unlocks the specified bytes, which must have been previously locked.
Regions should be locked only briefly and should be unlocked before closing a file or exiting the program.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__locking.asp
*/
int lkmode;
switch (*mode) {
case 'r': lkmode = LK_NBLCK; break;
case 'w': lkmode = LK_NBLCK; break;
case 'u': lkmode = LK_UNLCK; break;
default : return luaL_error (L, "%s: invalid mode", funcname);
}
if (!len) {
fseek (fh, 0L, SEEK_END);
len = ftell (fh);
}
fseek (fh, start, SEEK_SET);
code = _locking (fileno(fh), lkmode, len);
#else
struct flock f;
switch (*mode) {
case 'w': f.l_type = F_WRLCK; break;
case 'r': f.l_type = F_RDLCK; break;
case 'u': f.l_type = F_UNLCK; break;
default : return luaL_error (L, "%s: invalid mode", funcname);
}
f.l_whence = SEEK_SET;
f.l_start = (off_t)start;
f.l_len = (off_t)len;
code = fcntl (fileno(fh), F_SETLK, &f);
#endif
return (code != -1);
}
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.
** @param #2 String with lock mode ('w'rite, 'r'ead).
** @param #3 Number with start position (optional).
** @param #4 Number with length (optional).
*/
static int file_lock (lua_State *L) {
FILE *fh = check_file (L, 1, "lock");
const char *mode = luaL_checkstring (L, 2);
const long start = luaL_optlong (L, 3, 0);
long len = luaL_optlong (L, 4, 0);
if (_file_lock (L, fh, mode, start, len, "lock")) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
}
/*
** Unlocks a file.
** @param #1 File handle.
** @param #2 Number with start position (optional).
** @param #3 Number with length (optional).
*/
static int file_unlock (lua_State *L) {
FILE *fh = check_file (L, 1, "unlock");
const long start = luaL_optlong (L, 2, 0);
long len = luaL_optlong (L, 3, 0);
if (_file_lock (L, fh, "u", start, len, "unlock")) {
lua_pushboolean (L, 1);
return 1;
} else {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
}
static int make_dir (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
int fail;
#ifdef _WIN32
int oldmask = umask (0);
fail = _mkdir (path);
#else
mode_t oldmask = umask( (mode_t)0 );
fail = mkdir (path, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP |
S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH );
#endif
if (fail) {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
umask (oldmask);
lua_pushboolean (L, 1);
return 1;
}
/*
** Removes a directory.
** @param #1 Directory path.
*/
static int remove_dir (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
int fail;
fail = rmdir (path);
if (fail) {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror(errno));
return 2;
}
lua_pushboolean (L, 1);
return 1;
}
/*
** Directory iterator
*/
static int dir_iter (lua_State *L) {
#ifdef _WIN32
struct _finddata_t c_file;
#else
struct dirent *entry;
#endif
dir_data *d = (dir_data *)lua_touserdata (L, lua_upvalueindex (1));
luaL_argcheck (L, !d->closed, 1, "closed directory");
#ifdef _WIN32
if (d->hFile == 0L) { /* first entry */
if ((d->hFile = _findfirst (d->pattern, &c_file)) == -1L) {
lua_pushnil (L);
lua_pushstring (L, strerror (errno));
return 2;
} else {
lua_pushstring (L, c_file.name);
return 1;
}
} else { /* next entry */
if (_findnext (d->hFile, &c_file) == -1L) {
/* no more entries => close directory */
_findclose (d->hFile);
d->closed = 1;
return 0;
} else {
lua_pushstring (L, c_file.name);
return 1;
}
}
#else
if ((entry = readdir (d->dir)) != NULL) {
lua_pushstring (L, entry->d_name);
return 1;
} else {
/* no more entries => close directory */
closedir (d->dir);
d->closed = 1;
return 0;
}
#endif
}
/*
** Closes directory iterators
*/
static int dir_close (lua_State *L) {
dir_data *d = (dir_data *)lua_touserdata (L, 1);
#ifdef _WIN32
if (!d->closed && d->hFile) {
_findclose (d->hFile);
d->closed = 1;
}
#else
if (!d->closed && d->dir) {
closedir (d->dir);
d->closed = 1;
}
#endif
return 0;
}
/*
** Factory of directory iterators
*/
static int dir_iter_factory (lua_State *L) {
const char *path = luaL_checkstring (L, 1);
dir_data *d = (dir_data *) lua_newuserdata (L, sizeof(dir_data));
d->closed = 0;
#ifdef _WIN32
d->hFile = 0L;
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
if (strlen(path) > MAX_DIR_LENGTH)
luaL_error (L, "path too long: %s", path);
else
sprintf (d->pattern, "%s/*", path);
#else
luaL_getmetatable (L, DIR_METATABLE);
lua_setmetatable (L, -2);
d->dir = opendir (path);
if (d->dir == NULL)
luaL_error (L, "cannot open %s: %s", path, strerror (errno));
#endif
lua_pushcclosure (L, dir_iter, 1);
return 1;
}
/*
** Creates directory metatable.
*/
static int dir_create_meta (lua_State *L) {
luaL_newmetatable (L, DIR_METATABLE);
/* set its __gc field */
lua_pushstring (L, "__gc");
lua_pushcfunction (L, dir_close);
lua_settable (L, -3);
return 1;
}
#ifdef _WIN32
#ifndef S_ISDIR
#define S_ISDIR(mode) (mode&_S_IFDIR)
#endif
#ifndef S_ISREG
#define S_ISREG(mode) (mode&_S_IFREG)
#endif
#ifndef S_ISLNK
#define S_ISLNK(mode) (0)
#endif
#ifndef S_ISSOCK
#define S_ISSOCK(mode) (0)
#endif
#ifndef S_ISFIFO
#define S_ISFIFO(mode) (0)
#endif
#ifndef S_ISCHR
#define S_ISCHR(mode) (mode&_S_IFCHR)
#endif
#ifndef S_ISBLK
#define S_ISBLK(mode) (0)
#endif
#endif
/*
** Convert the inode protection mode to a string.
*/
#ifdef _WIN32
static const char *mode2string (unsigned short mode) {
#else
static const char *mode2string (mode_t mode) {
#endif
if ( S_ISREG(mode) )
return "file";
else if ( S_ISDIR(mode) )
return "directory";
else if ( S_ISLNK(mode) )
return "link";
else if ( S_ISSOCK(mode) )
return "socket";
else if ( S_ISFIFO(mode) )
return "named pipe";
else if ( S_ISCHR(mode) )
return "char device";
else if ( S_ISBLK(mode) )
return "block device";
else
return "other";
}
/*
** Set access time and modification values for file
*/
static int file_utime (lua_State *L) {
const char *file = luaL_checkstring (L, 1);
struct utimbuf utb, *buf;
if (lua_gettop (L) == 1) /* set to current date/time */
buf = NULL;
else {
utb.actime = (time_t)luaL_optnumber (L, 2, 0);
utb.modtime = (time_t)luaL_optnumber (L, 3, utb.actime);
buf = &utb;
}
if (utime (file, buf)) {
lua_pushnil (L);
lua_pushfstring (L, "%s", strerror (errno));
return 2;
}
lua_pushboolean (L, 1);
return 1;
}
/* inode protection mode */
static void push_st_mode (lua_State *L, struct stat *info) {
lua_pushstring (L, mode2string (info->st_mode));
}
/* device inode resides on */
static void push_st_dev (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_dev);
}
/* inode's number */
static void push_st_ino (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_ino);
}
/* number of hard links to the file */
static void push_st_nlink (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_nlink);
}
/* user-id of owner */
static void push_st_uid (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_uid);
}
/* group-id of owner */
static void push_st_gid (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_gid);
}
/* device type, for special file inode */
static void push_st_rdev (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_rdev);
}
/* time of last access */
static void push_st_atime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_atime);
}
/* time of last data modification */
static void push_st_mtime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_mtime);
}
/* time of last file status change */
static void push_st_ctime (lua_State *L, struct stat *info) {
lua_pushnumber (L, info->st_ctime);
}
/* file size, in bytes */
static void push_st_size (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_size);
}
#ifndef _WIN32
/* blocks allocated for file */
static void push_st_blocks (lua_State *L, struct stat *info) {
lua_pushnumber (L, (lua_Number)info->st_blocks);
}
/* optimal file system I/O blocksize */
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);
struct _stat_members {
const char *name;
_push_function push;
};
struct _stat_members members[] = {
{ "mode", push_st_mode },
{ "dev", push_st_dev },
{ "ino", push_st_ino },
{ "nlink", push_st_nlink },
{ "uid", push_st_uid },
{ "gid", push_st_gid },
{ "rdev", push_st_rdev },
{ "access", push_st_atime },
{ "modification", push_st_mtime },
{ "change", push_st_ctime },
{ "size", push_st_size },
#ifndef _WIN32
{ "blocks", push_st_blocks },
{ "blksize", push_st_blksize },
#endif
{ NULL, push_invalid }
};
/*
** Get file or symbolic link information
*/
static int _file_info_ (lua_State *L, int (*st)(const char*, struct stat*)) {
int i;
struct stat info;
const char *file = luaL_checkstring (L, 1);
if (st(file, &info)) {
lua_pushnil (L);
lua_pushfstring (L, "cannot obtain information from file `%s'", file);
return 2;
}
if (lua_isstring (L, 2)) {
int v;
const char *member = lua_tostring (L, 2);
if (strcmp (member, "mode") == 0) v = 0;
#ifndef _WIN32
else if (strcmp (member, "blocks") == 0) v = 11;
else if (strcmp (member, "blksize") == 0) v = 12;
#endif
else /* look for member */
for (v = 1; members[v].name; v++)
if (*members[v].name == *member)
break;
/* push member value and return */
members[v].push (L, &info);
return 1;
} else if (!lua_istable (L, 2))
/* creates a table if none is given */
lua_newtable (L);
/* stores all members in table on top of the stack */
for (i = 0; members[i].name; i++) {
lua_pushstring (L, members[i].name);
members[i].push (L, &info);
lua_rawset (L, -3);
}
return 1;
}
/*
** Get file information using stat.
*/
static int file_info (lua_State *L) {
return _file_info_ (L, stat);
}
/*
** Get symbolic link information using lstat.
*/
#ifndef _WIN32
static int link_info (lua_State *L) {
return _file_info_ (L, lstat);
}
#endif
/*
** Assumes the table is on top of the stack.
*/
static void set_info (lua_State *L) {
lua_pushliteral (L, "_COPYRIGHT");
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.4.0");
lua_settable (L, -3);
}
static const struct luaL_reg fslib[] = {
{"attributes", file_info},
{"chdir", change_dir},
{"currentdir", get_dir},
{"dir", dir_iter_factory},
{"lock", file_lock},
{"mkdir", make_dir},
{"rmdir", remove_dir},
#ifndef _WIN32
{"symlinkattributes", link_info},
#else
{"setmode", lfs_f_setmode},
#endif
{"touch", file_utime},
{"unlock", file_unlock},
{NULL, NULL},
};
int luaopen_lfs (lua_State *L) {
dir_create_meta (L);
luaL_register (L, "lfs", fslib);
set_info (L);
return 1;
}

5
src/lfs.def Normal file
View File

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

View File

@@ -1,10 +1,16 @@
/* Define 'chdir' for systems that do not implement it */
/* $Id: luafilesystem.h,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $ */
#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_filesystem (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

@@ -1,8 +0,0 @@
-- $Id: t_luafilesystem.lua,v 1.1.1.1 2004/07/27 14:15:24 tomas Exp $
if not luafilesystem and loadlib then
local libname = "LIB_NAME"
local libopen = "luaopen_luafilesystem"
local init, err1, err2 = loadlib (libname, libopen)
assert (init, (err1 or '')..(err2 or ''))
init ()
end

View File

@@ -1,26 +0,0 @@
#!/usr/local/bin/lua -i
require"luafilesystem"
print(luafilesystem.version)
function p ()
local fh = assert (io.open ("teste", 'r'))
assert (luafilesystem.lock (fh, 'r'))
print (fh:read"*a")
fh:close ()
end
function wr ()
fh = assert (io.open ("teste", 'w'))
assert (luafilesystem.lock (fh, 'w'))
end
function op ()
fh = assert (io.open ("teste", 'r'))
assert (luafilesystem.lock (fh, 'r'))
end
function fw (x)
assert (fh:write (x))
end

112
tests/test.lua Normal file
View File

@@ -0,0 +1,112 @@
#!/usr/local/bin/lua5.1
local tmp = "/tmp"
local sep = "/"
local upper = ".."
require"lfs"
print (lfs._VERSION)
function attrdir (path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..sep..file
print ("\t=> "..f.." <=")
local attr = lfs.attributes (f)
assert (type(attr) == "table")
if attr.mode == "directory" then
attrdir (f)
else
for name, value in pairs(attr) do
print (name, value)
end
end
end
end
end
-- Checking changing directories
local current = assert (lfs.currentdir())
local reldir = string.gsub (current, "^.*%"..sep.."([^"..sep.."])$", "%1")
assert (lfs.chdir (upper), "could not change to upper directory")
assert (lfs.chdir (reldir), "could not change back to current directory")
assert (lfs.currentdir() == current, "error trying to change directories")
assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory")
-- Changing creating and removing directories
local tmpdir = current..sep.."lfs_tmp_dir"
local tmpfile = tmpdir..sep.."tmp_file"
-- Test for existence of a previous lfs_tmp_dir
-- that may have resulted from an interrupted test execution and remove it
if lfs.chdir (tmpdir) then
assert (lfs.chdir (upper), "could not change to upper directory")
assert (os.remove (tmpfile), "could not remove file from previous test")
assert (lfs.rmdir (tmpdir), "could not remove directory from previous test")
end
-- tries to create a directory
assert (lfs.mkdir (tmpdir), "could not make a new directory")
local attrib, errmsg = lfs.attributes (tmpdir)
if not attrib then
error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg)
end
local f = io.open(tmpfile, "w")
f:close()
-- Change access time
local testdate = os.time({ year = 2007, day = 10, month = 2, hour=0})
assert (lfs.touch (tmpfile, testdate))
local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate, "could not set access time")
assert (new_att.modification == testdate, "could not set modification time")
-- Change access and modification time
local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0})
local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0})
assert (lfs.touch (tmpfile, testdate2, testdate1))
local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate2, "could not set access time")
assert (new_att.modification == testdate1, "could not set modification time")
if lfs.symlinkattributes then
-- Checking symbolic link information (does not work in Windows)
assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_"))
assert (lfs.attributes"_a_link_for_test_".mode == "file")
assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
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))
assert (new_att.access == attrib.access)
assert (new_att.modification == attrib.modification)
-- Remove new file and directory
assert (os.remove (tmpfile), "could not remove new file")
assert (lfs.rmdir (tmpdir), "could not remove new directory")
assert (lfs.mkdir (tmpdir..sep.."lfs_tmp_dir") == nil, "could create a directory inside a non-existent one")
-- Trying to get attributes of a non-existent file
assert (lfs.attributes ("this couldn't be an actual file") == nil, "could get attributes of a non-existent file")
assert (type(lfs.attributes (upper)) == "table", "couldn't get attributes of upper directory")
-- Stressing directory iterator
count = 0
for i = 1, 4000 do
for file in lfs.dir (tmp) do
count = count + 1
end
end
print"Ok!"

5
vc6/lfs.def Normal file
View File

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

33
vc6/luafilesystem.dsw Normal file
View File

@@ -0,0 +1,33 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "luafilesystem_dll"=.\luafilesystem_dll.dsp - Package Owner=<4>
Package=<5>
{{{
begin source code control
luafilesystem
..
end source code control
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

127
vc6/luafilesystem_dll.dsp Normal file
View File

@@ -0,0 +1,127 @@
# Microsoft Developer Studio Project File - Name="luafilesystem_dll" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=luafilesystem_dll - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "luafilesystem_dll.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "luafilesystem_dll.mak" CFG="luafilesystem_dll - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "luafilesystem_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "luafilesystem_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "luafilesystem_dll"
# PROP Scc_LocalPath ".."
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "luafilesystem_dll - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "../lib/vc6"
# PROP Intermediate_Dir "luafilesystem_dll/Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x416 /d "NDEBUG"
# ADD RSC /l 0x416 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../bin/vc6/lfs.dll" /libpath:"../../external-src/lua50/lib/dll"
# Begin Special Build Tool
SOURCE="$(InputPath)"
PostBuild_Cmds=cd ../bin/vc6 zip.exe luafilesystem-1.2-win32.zip lfs.dll
# End Special Build Tool
!ELSEIF "$(CFG)" == "luafilesystem_dll - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "../lib/vc6"
# PROP Intermediate_Dir "luafilesystem_dll/Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../external-src/lua50/include" /I "../../compat/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LUAFILESYSTEM_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x416 /d "_DEBUG"
# ADD RSC /l 0x416 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 lua50.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../bin/vc6/lfsd.dll" /pdbtype:sept /libpath:"../../external-src/lua50/lib/dll"
!ENDIF
# Begin Target
# Name "luafilesystem_dll - Win32 Release"
# Name "luafilesystem_dll - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE="..\..\compat\src\compat-5.1.c"
# End Source File
# Begin Source File
SOURCE=..\src\lfs.c
# End Source File
# Begin Source File
SOURCE=.\lfs.def
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE="..\..\compat\src\compat-5.1.h"
# End Source File
# Begin Source File
SOURCE=..\src\lfs.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project