forked from Hyperion/HyperionOS
43 lines
1.3 KiB
Plaintext
43 lines
1.3 KiB
Plaintext
--:Minify:--
|
|
local kernel = ...
|
|
local cache = {}
|
|
local searchpaths = {
|
|
"/lib/?.lua",
|
|
"/lib/?",
|
|
"/usr/lib/?.lua",
|
|
"/usr/lib/?",
|
|
"/usr/local/lib/?.lua",
|
|
"/usr/local/lib/?",
|
|
"?.lua",
|
|
"?"
|
|
}
|
|
|
|
function require(module,...)
|
|
if cache[module] then
|
|
return cache[module]
|
|
end
|
|
local modpath = module:gsub("%.", "/")
|
|
local failed = {}
|
|
for _, path in ipairs(searchpaths) do
|
|
local full_path = string.gsub(path, "%?", modpath)
|
|
if full_path:sub(1,1)~="/" then
|
|
full_path=kernel.currentTask.cwd..full_path
|
|
end
|
|
if kernel.vfs.exists(full_path) then
|
|
if kernel.vfs.type(full_path)=="directory" then
|
|
full_path = full_path .. "/init"
|
|
end
|
|
if kernel.vfs.exists(full_path) then
|
|
local handle = kernel.vfs.open(full_path, "r")
|
|
local file_content = kernel.vfs.read(handle, 1024 * 1024 * 4)
|
|
kernel.vfs.close(handle)
|
|
return assert(load(file_content, full_path, "t", kernel._U))(...)
|
|
else
|
|
table.insert(failed, full_path)
|
|
end
|
|
else
|
|
table.insert(failed, full_path)
|
|
end
|
|
end
|
|
error("Module not found: " .. module .. " (searched paths: " .. table.concat(failed, ", ") .. ")")
|
|
end |