int luv_fs_write(lua_State* L) { uv_file file = luaL_checkint(L, 1); off_t offset = luaL_checkint(L, 2); size_t length; uv_fs_t* req; void* chunk = (void*)luaL_checklstring(L, 3, &length); luv_fs_ref_t* ref = luv_fs_ref_alloc(L); luv_io_ctx_init(&ref->cbs); luv_io_ctx_add(L, &ref->cbs, 3); luv_io_ctx_callback_add(L, &ref->cbs, 4); req = &ref->fs_req; FS_CALL(write, 4, NULL, file, chunk, length, offset); }
/* Utility for storing the callback in the fs_req token */ uv_fs_t* luv_fs_store_callback(lua_State* L, int index) { luv_fs_ref_t* ref = luv_fs_ref_alloc(L); luv_io_ctx_init(&ref->cbs); luv_io_ctx_callback_add(L, &ref->cbs, index); return &ref->fs_req; }
void luv_io_ctx_unref(lua_State* L, luv_io_ctx_t *cbs) { luaL_unref(L, LUA_REGISTRYINDEX, cbs->rdata); luaL_unref(L, LUA_REGISTRYINDEX, cbs->rcb); luv_io_ctx_init(cbs); }