|
|
@ -1,5 +1,5 @@ |
|
|
|
/*
|
|
|
|
** $Id: liolib.c,v 2.55 2004/07/09 16:01:38 roberto Exp roberto $ |
|
|
|
** $Id: liolib.c,v 2.56 2004/08/09 14:35:59 roberto Exp roberto $ |
|
|
|
** Standard I/O (and system) library |
|
|
|
** See Copyright Notice in lua.h |
|
|
|
*/ |
|
|
@ -96,7 +96,7 @@ static int aux_close (lua_State *L) { |
|
|
|
if (f == stdin || f == stdout || f == stderr) |
|
|
|
return 0; /* file cannot be closed */ |
|
|
|
else { |
|
|
|
int ok = (pclose(f) != -1) || (fclose(f) == 0); |
|
|
|
int ok = (fclose(f) == 0); |
|
|
|
if (ok) |
|
|
|
*(FILE **)lua_touserdata(L, 1) = NULL; /* mark file as closed */ |
|
|
|
return ok; |
|
|
@ -293,6 +293,7 @@ static int g_read (lua_State *L, FILE *f, int first) { |
|
|
|
int nargs = lua_gettop(L) - 1; |
|
|
|
int success; |
|
|
|
int n; |
|
|
|
clearerr(f); |
|
|
|
if (nargs == 0) { /* no arguments? */ |
|
|
|
success = read_line(L, f); |
|
|
|
n = first+1; /* to return 1 result */ |
|
|
@ -327,6 +328,8 @@ static int g_read (lua_State *L, FILE *f, int first) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (ferror(f)) |
|
|
|
return pushresult(L, 0, NULL); |
|
|
|
if (!success) { |
|
|
|
lua_pop(L, 1); /* remove last result */ |
|
|
|
lua_pushnil(L); /* push nil instead */ |
|
|
@ -347,9 +350,13 @@ static int f_read (lua_State *L) { |
|
|
|
|
|
|
|
static int io_readline (lua_State *L) { |
|
|
|
FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(2)); |
|
|
|
int sucess; |
|
|
|
if (f == NULL) /* file is already closed? */ |
|
|
|
luaL_error(L, "file is already closed"); |
|
|
|
if (read_line(L, f)) return 1; |
|
|
|
sucess = read_line(L, f); |
|
|
|
if (ferror(f)) |
|
|
|
luaL_error(L, "%s", strerror(errno)); |
|
|
|
if (sucess) return 1; |
|
|
|
else { /* EOF */ |
|
|
|
if (lua_toboolean(L, lua_upvalueindex(3))) { /* generator created file? */ |
|
|
|
lua_settop(L, 0); |
|
|
|