Path: blob/main/libexec/flua/libfreebsd/sys/linker/linker.c
105547 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2024, Baptiste Daroussin <[email protected]>4*/56#include <sys/param.h>7#include <sys/linker.h>89#include <errno.h>10#include <stdio.h>11#include <string.h>1213#include <lua.h>14#include <lualib.h>15#include <lauxlib.h>1617#include "bootstrap.h"1819int luaopen_freebsd_sys_linker(lua_State *L);2021static int22lua_kldload(lua_State *L)23{24const char *name;25int ret;2627name = luaL_checkstring(L, 1);28ret = kldload(name);29if (ret == -1) {30lua_pushnil(L);31lua_pushstring(L, strerror(errno));32lua_pushinteger(L, errno);33return (3);34}35lua_pushinteger(L, ret);36return (1);37}3839static int40lua_kldunload(lua_State *L)41{42const char *name;43int ret, fileid;4445if (lua_isinteger(L, 1)) {46fileid = lua_tointeger(L, 1);47} else {48name = luaL_checkstring(L, 1);49fileid = kldfind(name);50}51if (fileid == -1) {52lua_pushnil(L);53lua_pushstring(L, strerror(errno));54lua_pushinteger(L, errno);55return (3);56}57ret = kldunload(fileid);58lua_pushinteger(L, ret);59if (ret == -1) {60lua_pushnil(L);61lua_pushstring(L, strerror(errno));62lua_pushinteger(L, errno);63return (3);64}65lua_pushinteger(L, 0);66return (1);67}6869#define REG_SIMPLE(n) { #n, lua_ ## n }70static const struct luaL_Reg freebsd_sys_linker[] = {71REG_SIMPLE(kldload),72REG_SIMPLE(kldunload),73{ NULL, NULL },74};75#undef REG_SIMPLE7677int78luaopen_freebsd_sys_linker(lua_State *L)79{80luaL_newlib(L, freebsd_sys_linker);8182return (1);83}8485FLUA_MODULE_NAMED(freebsd_sys_linker, "freebsd.sys.linker");868788