@@ -180,6 +180,7 @@ static const lcurl_const_t lcurl_flags[] = {
180180static volatile int LCURL_INIT = 0 ;
181181
182182static const char * LCURL_REGISTRY = "LCURL Registry" ;
183+ static const char * LCURL_USERVAL = "LCURL Uservalues" ;
183184
184185static int luaopen_lcurl_ (lua_State * L , const struct luaL_Reg * func ){
185186 if (!LCURL_INIT ){
@@ -192,16 +193,24 @@ static int luaopen_lcurl_(lua_State *L, const struct luaL_Reg *func){
192193 lua_pop (L , 1 );
193194 lua_newtable (L );
194195 }
196+
197+ lua_rawgetp (L , LUA_REGISTRYINDEX , LCURL_USERVAL );
198+ if (!lua_istable (L , -1 )){ /* usevalues */
199+ lua_pop (L , 1 );
200+ lcurl_util_new_weak_table (L , "k" );
201+ }
202+
195203 lua_newtable (L ); /* library */
196204
197- lua_pushvalue (L , -2 ); luaL_setfuncs (L , func , 1 );
198- lua_pushvalue (L , -2 ); lcurl_error_initlib (L , 1 );
199- lua_pushvalue (L , -2 ); lcurl_hpost_initlib (L , 1 );
200- lua_pushvalue (L , -2 ); lcurl_easy_initlib (L , 1 );
201- lua_pushvalue (L , -2 ); lcurl_multi_initlib (L , 1 );
202- lua_pushvalue (L , -2 ); lcurl_share_initlib (L , 1 );
205+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); luaL_setfuncs (L , func , 2 );
206+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); lcurl_error_initlib (L , 2 );
207+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); lcurl_hpost_initlib (L , 2 );
208+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); lcurl_easy_initlib (L , 2 );
209+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); lcurl_multi_initlib (L , 2 );
210+ lua_pushvalue (L , -3 ); lua_pushvalue ( L , -3 ); lcurl_share_initlib (L , 2 );
203211
204- lua_pushvalue (L , -2 ); lua_rawsetp (L , LUA_REGISTRYINDEX , LCURL_REGISTRY );
212+ lua_pushvalue (L , -3 ); lua_rawsetp (L , LUA_REGISTRYINDEX , LCURL_REGISTRY );
213+ lua_pushvalue (L , -2 ); lua_rawsetp (L , LUA_REGISTRYINDEX , LCURL_USERVAL );
205214
206215 lua_remove (L , -2 ); /* registry */
207216
0 commit comments