rust: lua wrapper

Rust wrapper for working with lua state.
pull/2746/head
Jason Ish 9 years ago
parent 73388042b2
commit 9d687025e2

@ -1791,6 +1791,8 @@
fi
fi
AM_CONDITIONAL([HAVE_LUA], [test "x$enable_lua" != "xno"])
# libgeoip
AC_ARG_ENABLE(geoip,
AS_HELP_STRING([--enable-geoip],[Enable GeoIP support]),

@ -8,6 +8,9 @@ crate-type = ["staticlib"]
[profile.release]
debug = true
[features]
lua = []
[dependencies]
nom = "2.1.0"
libc = "0.2.0"

@ -25,14 +25,21 @@ else
endif
if HAVE_RUST
FEATURES =
if HAVE_LUA
FEATURES += lua
endif
all-local:
if HAVE_PYTHON
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \
python ./gen-c-headers.py && \
cargo build $(RELEASE) $(FROZEN)
cargo build $(RELEASE) $(FROZEN) --features "$(FEATURES)"
else
cd $(top_srcdir)/rust && CARGO_TARGET_DIR=$(abs_builddir)/target \
cargo build $(RELEASE) $(FROZEN)
cargo build $(RELEASE) $(FROZEN) --features "$(FEATURES)"
endif
clean-local:

@ -24,4 +24,8 @@ pub mod log;
pub mod core;
pub mod conf;
pub mod json;
#[cfg(feature = "lua")]
pub mod lua;
pub mod dns;

@ -0,0 +1,62 @@
/* Copyright (C) 2017 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
use std::ffi::CString;
use std::os::raw::c_char;
use std::os::raw::c_int;
use std::os::raw::c_long;
/// The Rust place holder for lua_State.
pub enum CLuaState {}
extern {
fn lua_createtable(lua: *mut CLuaState, narr: c_int, nrec: c_int);
fn lua_settable(lua: *mut CLuaState, idx: c_long);
fn lua_pushstring(lua: *mut CLuaState, s: *const c_char);
fn lua_pushinteger(lua: *mut CLuaState, n: c_long);
}
pub struct LuaState {
pub lua: *mut CLuaState,
}
impl LuaState {
pub fn newtable(&self) {
unsafe {
lua_createtable(self.lua, 0, 0);
}
}
pub fn settable(&self, idx: i64) {
unsafe {
lua_settable(self.lua, idx);
}
}
pub fn pushstring(&self, val: &str) {
unsafe {
lua_pushstring(self.lua, CString::new(val).unwrap().as_ptr());
}
}
pub fn pushinteger(&self, val: i64) {
unsafe {
lua_pushinteger(self.lua, val);
}
}
}
Loading…
Cancel
Save