Path: blob/main/libexec/flua/libfreebsd/sys/linker/linker.c
34885 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>1617int luaopen_freebsd_sys_linker(lua_State *L);1819static int20lua_kldload(lua_State *L)21{22const char *name;23int ret;2425name = luaL_checkstring(L, 1);26ret = kldload(name);27if (ret == -1) {28lua_pushnil(L);29lua_pushstring(L, strerror(errno));30lua_pushinteger(L, errno);31return (3);32}33lua_pushinteger(L, ret);34return (1);35}3637static int38lua_kldunload(lua_State *L)39{40const char *name;41int ret, fileid;4243if (lua_isinteger(L, 1)) {44fileid = lua_tointeger(L, 1);45} else {46name = luaL_checkstring(L, 1);47fileid = kldfind(name);48}49if (fileid == -1) {50lua_pushnil(L);51lua_pushstring(L, strerror(errno));52lua_pushinteger(L, errno);53return (3);54}55ret = kldunload(fileid);56lua_pushinteger(L, ret);57if (ret == -1) {58lua_pushnil(L);59lua_pushstring(L, strerror(errno));60lua_pushinteger(L, errno);61return (3);62}63lua_pushinteger(L, 0);64return (1);65}6667#define REG_SIMPLE(n) { #n, lua_ ## n }68static const struct luaL_Reg freebsd_sys_linker[] = {69REG_SIMPLE(kldload),70REG_SIMPLE(kldunload),71{ NULL, NULL },72};73#undef REG_SIMPLE7475int76luaopen_freebsd_sys_linker(lua_State *L)77{78luaL_newlib(L, freebsd_sys_linker);7980return (1);81}828384