aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortomas <tomas>2005-01-18 10:48:02 +0000
committertomas <tomas>2005-01-18 10:48:02 +0000
commit86e97088a0e6c6a1ad0af79991ade650f0b51faa (patch)
tree30ca6c1ec04fd4ef16c3a9dff163ff0a4d13d6a1 /src
parent7a93f7ee03c7cbbda3ea33b0ad9fce6c319b91c8 (diff)
downloadluafilesystem-86e97088a0e6c6a1ad0af79991ade650f0b51faa.tar.gz
luafilesystem-86e97088a0e6c6a1ad0af79991ade650f0b51faa.tar.bz2
luafilesystem-86e97088a0e6c6a1ad0af79991ade650f0b51faa.zip
Acrescimo da funcao lfs.touch (lfs.c e test.lua).
Pequenas correcoes para evitar warnings de redefinicao de macros.
Diffstat (limited to 'src')
-rw-r--r--src/lfs.c59
1 files changed, 50 insertions, 9 deletions
diff --git a/src/lfs.c b/src/lfs.c
index 2d62a66..6f672ac 100644
--- a/src/lfs.c
+++ b/src/lfs.c
@@ -7,9 +7,10 @@
7** lfs.dir (path) 7** lfs.dir (path)
8** lfs.mkdir (path) 8** lfs.mkdir (path)
9** lfs.lock (fh, mode) 9** lfs.lock (fh, mode)
10** lfs.touch (filepath [, atime [, mtime]])
10** lfs.unlock (fh) 11** lfs.unlock (fh)
11** 12**
12** $Id: lfs.c,v 1.14 2004/11/17 14:08:04 tomas Exp $ 13** $Id: lfs.c,v 1.15 2005/01/18 10:48:02 tomas Exp $
13*/ 14*/
14 15
15#include <errno.h> 16#include <errno.h>
@@ -17,6 +18,7 @@
17#include <string.h> 18#include <string.h>
18#include <time.h> 19#include <time.h>
19#include <sys/stat.h> 20#include <sys/stat.h>
21#include <utime.h>
20 22
21#ifdef WIN32 23#ifdef WIN32
22#include <direct.h> 24#include <direct.h>
@@ -131,7 +133,7 @@ static int _file_lock (lua_State *L, FILE *fh, const char *mode, const long star
131 case 'r': lkmode = _LK_NBLCK; break; 133 case 'r': lkmode = _LK_NBLCK; break;
132 case 'w': lkmode = _LK_NBLCK; break; 134 case 'w': lkmode = _LK_NBLCK; break;
133 case 'u': lkmode = _LK_UNLCK; break; 135 case 'u': lkmode = _LK_UNLCK; break;
134 default : luaL_error (L, "%s: invalid mode", funcname); 136 default : return luaL_error (L, "%s: invalid mode", funcname);
135 } 137 }
136 if (!len) { 138 if (!len) {
137 fseek (fh, 0L, SEEK_END); 139 fseek (fh, 0L, SEEK_END);
@@ -345,13 +347,27 @@ static int dir_create_meta (lua_State *L) {
345 347
346 348
347#ifdef _WIN32 349#ifdef _WIN32
348 #define S_ISDIR(mode) (mode&_S_IFDIR) 350 #ifndef S_ISDIR
349 #define S_ISREG(mode) (mode&_S_IFREG) 351 #define S_ISDIR(mode) (mode&_S_IFDIR)
350 #define S_ISLNK(mode) (0) 352 #endif
351 #define S_ISSOCK(mode) (0) 353 #ifndef S_ISREG
352 #define S_ISFIFO(mode) (0) 354 #define S_ISREG(mode) (mode&_S_IFREG)
353 #define S_ISCHR(mode) (mode&_S_IFCHR) 355 #endif
354 #define S_ISBLK(mode) (0) 356 #ifndef S_ISLNK
357 #define S_ISLNK(mode) (0)
358 #endif
359 #ifndef S_ISSOCK
360 #define S_ISSOCK(mode) (0)
361 #endif
362 #ifndef S_ISFIFO
363 #define S_ISFIFO(mode) (0)
364 #endif
365 #ifndef S_ISCHR
366 #define S_ISCHR(mode) (mode&_S_IFCHR)
367 #endif
368 #ifndef S_ISBLK
369 #define S_ISBLK(mode) (0)
370 #endif
355#endif 371#endif
356/* 372/*
357** Convert the inode protection mode to a string. 373** Convert the inode protection mode to a string.
@@ -381,6 +397,30 @@ static const char *mode2string (mode_t mode) {
381 397
382 398
383/* 399/*
400** Set access time and modification values for file
401*/
402static int file_utime (lua_State *L) {
403 const char *file = luaL_checkstring (L, 1);
404 struct utimbuf utb, *buf;
405
406 if (lua_gettop (L) == 1) /* set to current date/time */
407 buf = NULL;
408 else {
409 utb.actime = (time_t)luaL_optnumber (L, 2, 0);
410 utb.modtime = (time_t)luaL_optnumber (L, 3, utb.actime);
411 buf = &utb;
412 }
413 if (utime (file, buf)) {
414 lua_pushnil (L);
415 lua_pushfstring (L, "%s", strerror (errno));
416 return 2;
417 }
418 lua_pushboolean (L, 1);
419 return 1;
420}
421
422
423/*
384** Get file information 424** Get file information
385*/ 425*/
386static int file_info (lua_State *L) { 426static int file_info (lua_State *L) {
@@ -478,6 +518,7 @@ static const struct luaL_reg fslib[] = {
478 {"dir", dir_iter_factory}, 518 {"dir", dir_iter_factory},
479 {"lock", file_lock}, 519 {"lock", file_lock},
480 {"mkdir", make_dir}, 520 {"mkdir", make_dir},
521 {"touch", file_utime},
481 {"unlock", file_unlock}, 522 {"unlock", file_unlock},
482 {NULL, NULL}, 523 {NULL, NULL},
483}; 524};