@@ -50,77 +50,12 @@ lfile_load(lua_State *L) {
5050 return 1 ;
5151}
5252
53- struct file_buffer {
54- void * ptr ;
55- };
56-
57- static int
58- close_buffer (lua_State * L ) {
59- struct file_buffer * buf = lua_touserdata (L , 1 );
60- free (buf -> ptr );
61- buf -> ptr = NULL ;
62- lua_pushnil (L );
63- lua_setmetatable (L , 1 );
64- return 0 ;
65- }
66-
67- static int
68- loader (lua_State * L ) {
69- const char * filename = lua_tostring (L , lua_upvalueindex (1 ));
70- const char * mode = luaL_optstring (L , 2 , "rb" );
71- FILE * f = fopen_utf8 (filename , mode );
72- if (f == NULL )
73- return luaL_error (L , "Can't open %s" , filename );
74-
75- struct file_buffer * buf = (struct file_buffer * )lua_newuserdatauv (L , sizeof (* buf ), 0 );
76- buf -> ptr = NULL ;
77- if (luaL_newmetatable (L , "SOLUNA_LOADER" )) {
78- luaL_Reg l [] = {
79- { "__close" , close_buffer },
80- { "__gc" , close_buffer },
81- { NULL , NULL },
82- };
83- luaL_setfuncs (L , l , 0 );
84- }
85- lua_setmetatable (L , -2 );
86-
87- fseek (f , 0 , SEEK_END );
88- size_t sz = ftell (f );
89- fseek (f , 0 , SEEK_SET );
90-
91- buf -> ptr = malloc (sz );
92- if (buf -> ptr == NULL ) {
93- fclose (f );
94- return luaL_error (L , "loader : Out of memory" );
95- }
96- size_t rd = fread (buf -> ptr , 1 , sz , f );
97- fclose (f );
98- if (rd != sz ) {
99- free (buf -> ptr );
100- buf -> ptr = NULL ;
101- return luaL_error (L , "Read %s failed" , filename );
102- }
103- lua_pushlightuserdata (L , buf -> ptr );
104- lua_pushinteger (L , sz );
105- lua_pushvalue (L , -3 );
106- return 3 ;
107- }
108-
109- static int
110- lfile_loader (lua_State * L ) {
111- lua_settop (L , 1 );
112- luaL_checkstring (L , 1 );
113- lua_pushcclosure (L , loader , 1 );
114- return 1 ;
115- }
116-
11753int
11854luaopen_soluna_file (lua_State * L ) {
11955 luaL_checkversion (L );
12056 luaL_Reg l [] = {
12157 { "exist" , lfile_exist },
12258 { "load" , lfile_load },
123- { "loader" , lfile_loader },
12459 { NULL , NULL },
12560 };
12661 luaL_newlib (L , l );
0 commit comments