diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-11-20 13:41:43 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1998-11-20 13:41:43 -0200 |
commit | e4830ddce3d477f51ecf1da447dd8e361d74a1a0 (patch) | |
tree | 8caff56d2056e11e8cb9a2af7722d3fb8e45e688 /liolib.c | |
parent | 758e330d6e5ef83c1fc3bfd58c3d626d5968d12c (diff) | |
download | lua-e4830ddce3d477f51ecf1da447dd8e361d74a1a0.tar.gz lua-e4830ddce3d477f51ecf1da447dd8e361d74a1a0.tar.bz2 lua-e4830ddce3d477f51ecf1da447dd8e361d74a1a0.zip |
new option "mode" in "readfrom", "writeto" and "appendto" (for
binary files).
Diffstat (limited to 'liolib.c')
-rw-r--r-- | liolib.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: liolib.c,v 1.24 1998/08/30 20:25:24 roberto Exp roberto $ | 2 | ** $Id: liolib.c,v 1.25 1998/09/07 18:59:59 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 | */ |
@@ -62,6 +62,7 @@ static void pushresult (int i) | |||
62 | else { | 62 | else { |
63 | lua_pushnil(); | 63 | lua_pushnil(); |
64 | lua_pushstring(strerror(errno)); | 64 | lua_pushstring(strerror(errno)); |
65 | lua_pushnumber(errno); | ||
65 | } | 66 | } |
66 | } | 67 | } |
67 | 68 | ||
@@ -102,6 +103,15 @@ static FILE *getfileparam (char *name, int *arg) { | |||
102 | } | 103 | } |
103 | 104 | ||
104 | 105 | ||
106 | static char *getmode (char mode) { | ||
107 | static char m[3]; | ||
108 | m[0] = mode; | ||
109 | m[1] = (*luaL_opt_string(FIRSTARG+1, "text") == 'b') ? 'b' : '\0'; | ||
110 | m[2] = '\0'; | ||
111 | return m; | ||
112 | } | ||
113 | |||
114 | |||
105 | static void closefile (char *name) | 115 | static void closefile (char *name) |
106 | { | 116 | { |
107 | FILE *f = getfilebyname(name); | 117 | FILE *f = getfilebyname(name); |
@@ -140,7 +150,7 @@ static void io_readfrom (void) | |||
140 | current = lua_getuserdata(f); | 150 | current = lua_getuserdata(f); |
141 | else { | 151 | else { |
142 | char *s = luaL_check_string(FIRSTARG); | 152 | char *s = luaL_check_string(FIRSTARG); |
143 | current = (*s == '|') ? popen(s+1, "r") : fopen(s, "r"); | 153 | current = (*s == '|') ? popen(s+1, "r") : fopen(s, getmode('r')); |
144 | if (current == NULL) { | 154 | if (current == NULL) { |
145 | pushresult(0); | 155 | pushresult(0); |
146 | return; | 156 | return; |
@@ -162,7 +172,7 @@ static void io_writeto (void) | |||
162 | current = lua_getuserdata(f); | 172 | current = lua_getuserdata(f); |
163 | else { | 173 | else { |
164 | char *s = luaL_check_string(FIRSTARG); | 174 | char *s = luaL_check_string(FIRSTARG); |
165 | current = (*s == '|') ? popen(s+1,"w") : fopen(s,"w"); | 175 | current = (*s == '|') ? popen(s+1,"w") : fopen(s,getmode('w')); |
166 | if (current == NULL) { | 176 | if (current == NULL) { |
167 | pushresult(0); | 177 | pushresult(0); |
168 | return; | 178 | return; |
@@ -175,7 +185,7 @@ static void io_writeto (void) | |||
175 | static void io_appendto (void) | 185 | static void io_appendto (void) |
176 | { | 186 | { |
177 | char *s = luaL_check_string(FIRSTARG); | 187 | char *s = luaL_check_string(FIRSTARG); |
178 | FILE *fp = fopen (s, "a"); | 188 | FILE *fp = fopen (s, getmode('a')); |
179 | if (fp != NULL) | 189 | if (fp != NULL) |
180 | setreturn(fp, FOUTPUT); | 190 | setreturn(fp, FOUTPUT); |
181 | else | 191 | else |