aboutsummaryrefslogtreecommitdiff
path: root/liolib.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2015-11-23 09:36:11 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2015-11-23 09:36:11 -0200
commit71344b5cacce22a7a2a5dcdaccf4340420b0afa1 (patch)
tree28f6ca7342cd932a9696bc9fd30d98e985383242 /liolib.c
parentf230898ad6f1d3fd1bc0216b2f4a504db112f2df (diff)
downloadlua-71344b5cacce22a7a2a5dcdaccf4340420b0afa1.tar.gz
lua-71344b5cacce22a7a2a5dcdaccf4340420b0afa1.tar.bz2
lua-71344b5cacce22a7a2a5dcdaccf4340420b0afa1.zip
easy the way to accept other modifiers for 'mode' in 'io.open'
Diffstat (limited to 'liolib.c')
-rw-r--r--liolib.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/liolib.c b/liolib.c
index 7dd4c1ba..3d4943f6 100644
--- a/liolib.c
+++ b/liolib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: liolib.c,v 2.146 2015/07/07 17:03:34 roberto Exp roberto $ 2** $Id: liolib.c,v 2.147 2015/07/15 14:40:28 roberto Exp roberto $
3** Standard I/O (and system) library 3** Standard I/O (and system) library
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -23,18 +23,24 @@
23#include "lualib.h" 23#include "lualib.h"
24 24
25 25
26#if !defined(l_checkmode) 26
27 27
28/* 28/*
29** Check whether 'mode' matches '[rwa]%+?b?'.
30** Change this macro to accept other modes for 'fopen' besides 29** Change this macro to accept other modes for 'fopen' besides
31** the standard ones. 30** the standard ones.
32*/ 31*/
32#if !defined(l_checkmode)
33
34/* accepted extensions to 'mode' in 'fopen' */
35#if !defined(L_MODEEXT)
36#define L_MODEEXT "b"
37#endif
38
39/* Check whether 'mode' matches '[rwa]%+?[L_MODEEXT]*' */
33#define l_checkmode(mode) \ 40#define l_checkmode(mode) \
34 (*mode != '\0' && strchr("rwa", *(mode++)) != NULL && \ 41 (*mode != '\0' && strchr("rwa", *(mode++)) != NULL && \
35 (*mode != '+' || ++mode) && /* skip if char is '+' */ \ 42 (*mode != '+' || (++mode, 1)) && /* skip if char is '+' */ \
36 (*mode != 'b' || ++mode) && /* skip if char is 'b' */ \ 43 (strspn(mode, L_MODEEXT) == strlen(mode)))
37 (*mode == '\0'))
38 44
39#endif 45#endif
40 46
@@ -469,7 +475,7 @@ static int read_line (lua_State *L, FILE *f, int chop) {
469 int c = '\0'; 475 int c = '\0';
470 luaL_buffinit(L, &b); 476 luaL_buffinit(L, &b);
471 while (c != EOF && c != '\n') { /* repeat until end of line */ 477 while (c != EOF && c != '\n') { /* repeat until end of line */
472 char *buff = luaL_prepbuffer(&b); /* pre-allocate buffer */ 478 char *buff = luaL_prepbuffer(&b); /* preallocate buffer */
473 int i = 0; 479 int i = 0;
474 l_lockfile(f); /* no memory errors can happen inside the lock */ 480 l_lockfile(f); /* no memory errors can happen inside the lock */
475 while (i < LUAL_BUFFERSIZE && (c = l_getc(f)) != EOF && c != '\n') 481 while (i < LUAL_BUFFERSIZE && (c = l_getc(f)) != EOF && c != '\n')