コード例 #1
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static int io_readline(lua_State *L) {
	LStream *p = (LStream *)lua_touserdata(L, lua_upvalueindex(1));
	int i;
	int n = (int)lua_tointeger(L, lua_upvalueindex(2));
	if (isclosed(p))  /* file is already closed? */
		return luaL_error(L, "file is already closed");
	lua_settop(L, 1);
	for (i = 1; i <= n; i++)  /* push arguments to 'g_read' */
		lua_pushvalue(L, lua_upvalueindex(3 + i));
	n = g_read(L, p->f, 2);  /* 'n' is number of results */
	lua_assert(n > 0);  /* should return at least a nil */
	if (!lua_isnil(L, -n))  /* read at least one value? */
		return n;  /* return them */
	else {  /* first result is nil: EOF or error */
		if (n > 1) {  /* is there error information? */
			/* 2nd result is error message */
			return luaL_error(L, "%s", lua_tostring(L, -n + 1));
		}
		if (lua_toboolean(L, lua_upvalueindex(3))) {  /* generator created file? */
			lua_settop(L, 0);
			lua_pushvalue(L, lua_upvalueindex(1));
			aux_close(L);  /* close it */
		}
		return 0;
	}
}
コード例 #2
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static FILE *tofile(lua_State *L) {
	LStream *p = tolstream(L);
	if (isclosed(p))
		luaL_error(L, "attempt to use a closed file");
	lua_assert(p->f);
	return p->f;
}
コード例 #3
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static FILE *getiofile(lua_State *L, const char *findex) {
	LStream *p;
	lua_getfield(L, LUA_REGISTRYINDEX, findex);
	p = (LStream *)lua_touserdata(L, -1);
	if (isclosed(p))
		luaL_error(L, "standard %s file is closed", findex + strlen(IO_PREFIX));
	return p->f;
}
コード例 #4
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static int f_tostring(lua_State *L) {
	LStream *p = tolstream(L);
	if (isclosed(p))
		lua_pushliteral(L, "file (closed)");
	else
		lua_pushfstring(L, "file (%p)", p->f);
	return 1;
}
コード例 #5
0
ファイル: liolib.c プロジェクト: RonDePrez/opentx
static int f_gc (lua_State *L) {
#if !defined(USE_FATFS)
  LStream *p = tolstream(L);
  if (!isclosed(p) && p->f != NULL)
    aux_close(L);  /* ignore closed and incompletely open files */
#endif
  return 0;
}
コード例 #6
0
ファイル: liolib.c プロジェクト: RonDePrez/opentx
static FILE *tofile (lua_State *L) {
  LStream *p = tolstream(L);
#if defined(USE_FATFS)
  return &p->f;
#else
  if (isclosed(p))
    luaL_error(L, "attempt to use a closed file");
  lua_assert(p->f);
  return p->f;
#endif
}
コード例 #7
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static int io_type(lua_State *L) {
	LStream *p;
	luaL_checkany(L, 1);
	p = (LStream *)luaL_testudata(L, 1, LUA_FILEHANDLE);
	if (p == NULL)
		lua_pushnil(L);  /* not a file */
	else if (isclosed(p))
		lua_pushliteral(L, "closed file");
	else
		lua_pushliteral(L, "file");
	return 1;
}
コード例 #8
0
ファイル: liolib.c プロジェクト: Allowed/Protheus
static int f_gc(lua_State *L) {
	LStream *p = tolstream(L);
	if (!isclosed(p) && p->f != NULL)
		aux_close(L);  /* ignore closed and incompletely open files */
	return 0;
}