diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 41db59725..a99f60c99 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -331,11 +331,22 @@ int w_newFileData(lua_State *L) } size_t length = 0; - const char *str = luaL_checklstring(L, 1, &length); + const void *ptr = nullptr; + if (luax_istype(L, 1, Data::type)) + { + Data *data = data::luax_checkdata(L, 1); + ptr = data->getData(); + length = data->getSize(); + } + else if (lua_isstring(L, 1)) + ptr = luaL_checklstring(L, 1, &length); + else + return luaL_argerror(L, 1, "string or Data expected"); + const char *filename = luaL_checkstring(L, 2); FileData *t = nullptr; - luax_catchexcept(L, [&](){ t = instance()->newFileData(str, length, filename); }); + luax_catchexcept(L, [&](){ t = instance()->newFileData(ptr, length, filename); }); luax_pushtype(L, t); t->release();