Pequenas melhorias na documentacao.

Implementacao da funcao `attributes' que recupera informacoes sobre os arquivos.
This commit is contained in:
tomas
2004-10-23 22:33:11 +00:00
parent b191446532
commit 7049b69af1
2 changed files with 152 additions and 4 deletions

View File

@@ -60,6 +60,11 @@ as Lua 5.0.
Current version is 1.0 alpha.
It was developed for Lua 5.0.
</p>
<p>
Version 1.0 follows the
<a href="http://www.keplerproject.org/compat">package proposal</a>
for Lua 5.1
(see section <a href="#installation">Installation</a> for more details).
<a name="download"></a>
@@ -77,10 +82,34 @@ LuaFileSystem can be downloaded in source code from the following links:
<h2>What's new</h2>
<p>
<ul>
<li>[2/Aug/2004] Version 1.0 alpha released
<li>[?/?/2004] Version 1.0 alpha released
</ul>
<a name="installation"></a>
<h2>Installation</h2>
<p>
LuaFileSystem is distributed as a pair of C source and header files.
The distribution provides a <tt>Makefile</tt> prepared to compile the
library and install it.
The file <tt>config</tt> should be edited to suit the needs of the aimed
platform.
</p>
<p>
LuaFileSystem follows the
<a href="http://www.keplerproject.org/compat">package proposal</a>
for Lua 5.1,
therefore this package should be "installed".
In other words,
if you are using Lua 5.0,
the files <tt>compat-5.1.c</tt> and <tt>compat-5.1.h</tt> must be used
in the compilation and the file <tt>compat-5.1.lua</tt> must be installed
in the <tt>LUA_PATH</tt>.
If you are using Lua 5.1,
nothing should be done.
</p>
<a name="credits"></a>
<h2>Credits</h2>
@@ -106,7 +135,7 @@ Comments are welcome!
<p>
<hr>
<small>
$Id: index.html,v 1.1 2004/07/27 14:15:24 tomas Exp $
$Id: index.html,v 1.2 2004/10/23 22:33:11 tomas Exp $
</small>
</body>

123
src/lfs.c
View File

@@ -9,13 +9,14 @@
** lfs.lock (fh, mode)
** lfs.unlock (fh)
**
** $Id: lfs.c,v 1.3 2004/10/15 10:04:15 tomas Exp $
** $Id: lfs.c,v 1.4 2004/10/23 22:33:11 tomas Exp $
*/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/stat.h>
#ifdef WIN32
#include <direct.h>
@@ -26,7 +27,6 @@
#include <dirent.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include <lua.h>
@@ -335,7 +335,126 @@ static int dir_create_meta (lua_State *L) {
}
#ifdef _WIN32
#define S_ISDIR(mode) (mode&_S_IFDIR)
#define S_ISREG(mode) (mode&_S_IFREG)
#define S_ISLNK(mode) (0)
#define S_ISSOCK(mode) (0)
#define S_ISFIFO(mode) (0)
#define S_ISCHR(mode) (0)
#define S_ISBLK(mode) (0)
#endif
/*
** Convert the inode protection mode to a string.
*/
static const char *mode2string (mode_t mode) {
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";
}
/*
** Convert a struct timespec to a Lua table.
*/
static lua_Number time2number (struct timespec t) {
return (lua_Number)t.tv_sec + (lua_Number)t.tv_nsec / 1000000000.0;
}
/*
** Get file information
*/
static int file_info (lua_State *L) {
struct stat info;
const char *file = luaL_checkstring (L, 1);
if (stat(file, &info)) {
lua_pushnil (L);
lua_pushfstring (L, "cannot obtain information from file `%s'", file);
return 2;
}
lua_newtable (L);
/* device inode resides on */
lua_pushliteral (L, "dev");
lua_pushnumber (L, (lua_Number)info.st_dev);
lua_rawset (L, -3);
/* inode's number */
lua_pushliteral (L, "ino");
lua_pushnumber (L, (lua_Number)info.st_ino);
lua_rawset (L, -3);
/* inode protection mode */
lua_pushliteral (L, "mode");
lua_pushstring (L, mode2string (info.st_mode));
lua_rawset (L, -3);
/* number or hard links to the file */
lua_pushliteral (L, "nlink");
lua_pushnumber (L, (lua_Number)info.st_nlink);
lua_rawset (L, -3);
/* user-id of owner */
lua_pushliteral (L, "uid");
lua_pushnumber (L, (lua_Number)info.st_uid);
lua_rawset (L, -3);
/* group-id of owner */
lua_pushliteral (L, "gid");
lua_pushnumber (L, (lua_Number)info.st_gid);
lua_rawset (L, -3);
/* device type, for special file inode */
lua_pushliteral (L, "rdev");
lua_pushnumber (L, (lua_Number)info.st_rdev);
lua_rawset (L, -3);
/* time of last access */
lua_pushliteral (L, "access");
lua_pushnumber (L, time2number (info.st_atimespec));
lua_rawset (L, -3);
/* time of last data modification */
lua_pushliteral (L, "modification");
lua_pushnumber (L, time2number (info.st_mtimespec));
lua_rawset (L, -3);
/* time of last file status change */
lua_pushliteral (L, "change");
lua_pushnumber (L, time2number (info.st_ctimespec));
lua_rawset (L, -3);
/* file size, in bytes */
lua_pushliteral (L, "size");
lua_pushnumber (L, (lua_Number)info.st_size);
lua_rawset (L, -3);
/* blocks allocated for file */
lua_pushliteral (L, "blocks");
lua_pushnumber (L, (lua_Number)info.st_blocks);
lua_rawset (L, -3);
/* optimal file system I/O blocksize */
lua_pushliteral (L, "blksize");
lua_pushnumber (L, (lua_Number)info.st_blksize);
lua_rawset (L, -3);
/* user defined flags for file */
lua_pushliteral (L, "flags");
lua_pushnumber (L, (lua_Number)info.st_flags);
lua_rawset (L, -3);
/* file generation number */
lua_pushliteral (L, "gen");
lua_pushnumber (L, (lua_Number)info.st_gen);
lua_rawset (L, -3);
return 1;
}
static const struct luaL_reg fslib[] = {
{"attributes", file_info},
{"chdir", change_dir},
{"currentdir", get_dir},
{"dir", dir_iter_factory},