Skip to content

Commit 003935d

Browse files
committed
Revert "Change Lua library name constants from &str to *const c_char."
This reverts commit 272cfdb.
1 parent fbed171 commit 003935d

File tree

8 files changed

+80
-63
lines changed

8 files changed

+80
-63
lines changed

mlua-sys/src/lua51/lualib.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
//! Contains definitions from `lualib.h`.
22
3-
use std::os::raw::{c_char, c_int};
3+
use std::os::raw::c_int;
44

55
use super::lua::lua_State;
66

7-
pub const LUA_COLIBNAME: *const c_char = cstr!("coroutine");
8-
pub const LUA_TABLIBNAME: *const c_char = cstr!("table");
9-
pub const LUA_IOLIBNAME: *const c_char = cstr!("io");
10-
pub const LUA_OSLIBNAME: *const c_char = cstr!("os");
11-
pub const LUA_STRLIBNAME: *const c_char = cstr!("string");
12-
pub const LUA_MATHLIBNAME: *const c_char = cstr!("math");
13-
pub const LUA_DBLIBNAME: *const c_char = cstr!("debug");
14-
pub const LUA_LOADLIBNAME: *const c_char = cstr!("package");
7+
pub const LUA_COLIBNAME: &str = "coroutine";
8+
pub const LUA_TABLIBNAME: &str = "table";
9+
pub const LUA_IOLIBNAME: &str = "io";
10+
pub const LUA_OSLIBNAME: &str = "os";
11+
pub const LUA_STRLIBNAME: &str = "string";
12+
pub const LUA_MATHLIBNAME: &str = "math";
13+
pub const LUA_DBLIBNAME: &str = "debug";
14+
pub const LUA_LOADLIBNAME: &str = "package";
1515

1616
#[cfg(feature = "luajit")]
17-
pub const LUA_BITLIBNAME: *const c_char = cstr!("bit");
17+
pub const LUA_BITLIBNAME: &str = "bit";
1818
#[cfg(feature = "luajit")]
19-
pub const LUA_JITLIBNAME: *const c_char = cstr!("jit");
19+
pub const LUA_JITLIBNAME: &str = "jit";
2020
#[cfg(feature = "luajit")]
21-
pub const LUA_FFILIBNAME: *const c_char = cstr!("ffi");
21+
pub const LUA_FFILIBNAME: &str = "ffi";
2222

2323
#[cfg_attr(all(windows, raw_dylib), link(name = "lua51", kind = "raw-dylib"))]
2424
extern "C-unwind" {

mlua-sys/src/lua52/lualib.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
//! Contains definitions from `lualib.h`.
22
3-
use std::os::raw::{c_char, c_int};
3+
use std::os::raw::c_int;
44

55
use super::lua::lua_State;
66

7-
pub const LUA_COLIBNAME: *const c_char = cstr!("coroutine");
8-
pub const LUA_TABLIBNAME: *const c_char = cstr!("table");
9-
pub const LUA_IOLIBNAME: *const c_char = cstr!("io");
10-
pub const LUA_OSLIBNAME: *const c_char = cstr!("os");
11-
pub const LUA_STRLIBNAME: *const c_char = cstr!("string");
12-
pub const LUA_BITLIBNAME: *const c_char = cstr!("bit32");
13-
pub const LUA_MATHLIBNAME: *const c_char = cstr!("math");
14-
pub const LUA_DBLIBNAME: *const c_char = cstr!("debug");
15-
pub const LUA_LOADLIBNAME: *const c_char = cstr!("package");
7+
pub const LUA_COLIBNAME: &str = "coroutine";
8+
pub const LUA_TABLIBNAME: &str = "table";
9+
pub const LUA_IOLIBNAME: &str = "io";
10+
pub const LUA_OSLIBNAME: &str = "os";
11+
pub const LUA_STRLIBNAME: &str = "string";
12+
pub const LUA_BITLIBNAME: &str = "bit32";
13+
pub const LUA_MATHLIBNAME: &str = "math";
14+
pub const LUA_DBLIBNAME: &str = "debug";
15+
pub const LUA_LOADLIBNAME: &str = "package";
1616

1717
#[cfg_attr(all(windows, raw_dylib), link(name = "lua52", kind = "raw-dylib"))]
1818
extern "C-unwind" {

mlua-sys/src/lua53/lauxlib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ use super::lua::{self, lua_CFunction, lua_Integer, lua_Number, lua_State};
99
pub const LUA_ERRFILE: c_int = lua::LUA_ERRERR + 1;
1010

1111
// Key, in the registry, for table of loaded modules
12-
pub const LUA_LOADED_TABLE: *const c_char = cstr!("_LOADED");
12+
pub const LUA_LOADED_TABLE: &str = "_LOADED";
1313

1414
// Key, in the registry, for table of preloaded loaders
15-
pub const LUA_PRELOAD_TABLE: *const c_char = cstr!("_PRELOAD");
15+
pub const LUA_PRELOAD_TABLE: &str = "_PRELOAD";
1616

1717
#[repr(C)]
1818
pub struct luaL_Reg {

mlua-sys/src/lua53/lualib.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
//! Contains definitions from `lualib.h`.
22
3-
use std::os::raw::{c_char, c_int};
3+
use std::os::raw::c_int;
44

55
use super::lua::lua_State;
66

7-
pub const LUA_COLIBNAME: *const c_char = cstr!("coroutine");
8-
pub const LUA_TABLIBNAME: *const c_char = cstr!("table");
9-
pub const LUA_IOLIBNAME: *const c_char = cstr!("io");
10-
pub const LUA_OSLIBNAME: *const c_char = cstr!("os");
11-
pub const LUA_STRLIBNAME: *const c_char = cstr!("string");
12-
pub const LUA_UTF8LIBNAME: *const c_char = cstr!("utf8");
13-
pub const LUA_BITLIBNAME: *const c_char = cstr!("bit32");
14-
pub const LUA_MATHLIBNAME: *const c_char = cstr!("math");
15-
pub const LUA_DBLIBNAME: *const c_char = cstr!("debug");
16-
pub const LUA_LOADLIBNAME: *const c_char = cstr!("package");
7+
pub const LUA_COLIBNAME: &str = "coroutine";
8+
pub const LUA_TABLIBNAME: &str = "table";
9+
pub const LUA_IOLIBNAME: &str = "io";
10+
pub const LUA_OSLIBNAME: &str = "os";
11+
pub const LUA_STRLIBNAME: &str = "string";
12+
pub const LUA_UTF8LIBNAME: &str = "utf8";
13+
pub const LUA_BITLIBNAME: &str = "bit32";
14+
pub const LUA_MATHLIBNAME: &str = "math";
15+
pub const LUA_DBLIBNAME: &str = "debug";
16+
pub const LUA_LOADLIBNAME: &str = "package";
1717

1818
#[cfg_attr(all(windows, raw_dylib), link(name = "lua53", kind = "raw-dylib"))]
1919
extern "C-unwind" {

mlua-sys/src/lua54/lauxlib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ use super::lua::{self, lua_CFunction, lua_Integer, lua_Number, lua_State};
99
pub const LUA_ERRFILE: c_int = lua::LUA_ERRERR + 1;
1010

1111
// Key, in the registry, for table of loaded modules
12-
pub const LUA_LOADED_TABLE: *const c_char = cstr!("_LOADED");
12+
pub const LUA_LOADED_TABLE: &str = "_LOADED";
1313

1414
// Key, in the registry, for table of preloaded loaders
15-
pub const LUA_PRELOAD_TABLE: *const c_char = cstr!("_PRELOAD");
15+
pub const LUA_PRELOAD_TABLE: &str = "_PRELOAD";
1616

1717
#[repr(C)]
1818
pub struct luaL_Reg {

mlua-sys/src/lua54/lualib.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
//! Contains definitions from `lualib.h`.
22
3-
use std::os::raw::{c_char, c_int};
3+
use std::os::raw::c_int;
44

55
use super::lua::lua_State;
66

7-
pub const LUA_COLIBNAME: *const c_char = cstr!("coroutine");
8-
pub const LUA_TABLIBNAME: *const c_char = cstr!("table");
9-
pub const LUA_IOLIBNAME: *const c_char = cstr!("io");
10-
pub const LUA_OSLIBNAME: *const c_char = cstr!("os");
11-
pub const LUA_STRLIBNAME: *const c_char = cstr!("string");
12-
pub const LUA_UTF8LIBNAME: *const c_char = cstr!("utf8");
13-
pub const LUA_MATHLIBNAME: *const c_char = cstr!("math");
14-
pub const LUA_DBLIBNAME: *const c_char = cstr!("debug");
15-
pub const LUA_LOADLIBNAME: *const c_char = cstr!("package");
7+
pub const LUA_COLIBNAME: &str = "coroutine";
8+
pub const LUA_TABLIBNAME: &str = "table";
9+
pub const LUA_IOLIBNAME: &str = "io";
10+
pub const LUA_OSLIBNAME: &str = "os";
11+
pub const LUA_STRLIBNAME: &str = "string";
12+
pub const LUA_UTF8LIBNAME: &str = "utf8";
13+
pub const LUA_MATHLIBNAME: &str = "math";
14+
pub const LUA_DBLIBNAME: &str = "debug";
15+
pub const LUA_LOADLIBNAME: &str = "package";
1616

1717
#[cfg_attr(all(windows, raw_dylib), link(name = "lua54", kind = "raw-dylib"))]
1818
extern "C-unwind" {

mlua-sys/src/luau/lualib.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
//! Contains definitions from `lualib.h`.
22
3-
use std::os::raw::{c_char, c_int};
3+
use std::os::raw::c_int;
44

55
use super::lua::lua_State;
66

7-
pub const LUA_COLIBNAME: *const c_char = cstr!("coroutine");
8-
pub const LUA_TABLIBNAME: *const c_char = cstr!("table");
9-
pub const LUA_OSLIBNAME: *const c_char = cstr!("os");
10-
pub const LUA_STRLIBNAME: *const c_char = cstr!("string");
11-
pub const LUA_BITLIBNAME: *const c_char = cstr!("bit32");
12-
pub const LUA_BUFFERLIBNAME: *const c_char = cstr!("buffer");
13-
pub const LUA_UTF8LIBNAME: *const c_char = cstr!("utf8");
14-
pub const LUA_MATHLIBNAME: *const c_char = cstr!("math");
15-
pub const LUA_DBLIBNAME: *const c_char = cstr!("debug");
16-
pub const LUA_VECLIBNAME: *const c_char = cstr!("vector");
7+
pub const LUA_COLIBNAME: &str = "coroutine";
8+
pub const LUA_TABLIBNAME: &str = "table";
9+
pub const LUA_OSLIBNAME: &str = "os";
10+
pub const LUA_STRLIBNAME: &str = "string";
11+
pub const LUA_BITLIBNAME: &str = "bit32";
12+
pub const LUA_BUFFERLIBNAME: &str = "buffer";
13+
pub const LUA_UTF8LIBNAME: &str = "utf8";
14+
pub const LUA_MATHLIBNAME: &str = "math";
15+
pub const LUA_DBLIBNAME: &str = "debug";
16+
pub const LUA_VECLIBNAME: &str = "vector";
1717

1818
extern "C-unwind" {
1919
pub fn luaopen_base(L: *mut lua_State) -> c_int;

src/state/raw.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::any::TypeId;
22
use std::cell::{Cell, UnsafeCell};
3-
use std::ffi::CStr;
3+
use std::ffi::{CStr, CString};
44
use std::mem;
55
use std::os::raw::{c_char, c_int, c_void};
66
use std::panic::resume_unwind;
@@ -1285,14 +1285,16 @@ impl RawLua {
12851285

12861286
// Uses 3 stack spaces
12871287
unsafe fn load_std_libs(state: *mut ffi::lua_State, libs: StdLib) -> Result<()> {
1288-
unsafe fn requiref(
1288+
#[inline(always)]
1289+
pub unsafe fn requiref(
12891290
state: *mut ffi::lua_State,
1290-
modname: *const c_char,
1291+
modname: &str,
12911292
openf: ffi::lua_CFunction,
12921293
glb: c_int,
12931294
) -> Result<()> {
1294-
protect_lua!(state, 0, 0, |state| {
1295-
ffi::luaL_requiref(state, modname, openf, glb)
1295+
let modname = mlua_expect!(CString::new(modname), "modname contains nil byte");
1296+
protect_lua!(state, 0, 1, |state| {
1297+
ffi::luaL_requiref(state, modname.as_ptr() as *const c_char, openf, glb)
12961298
})
12971299
}
12981300

@@ -1323,68 +1325,81 @@ unsafe fn load_std_libs(state: *mut ffi::lua_State, libs: StdLib) -> Result<()>
13231325
{
13241326
if libs.contains(StdLib::COROUTINE) {
13251327
requiref(state, ffi::LUA_COLIBNAME, ffi::luaopen_coroutine, 1)?;
1328+
ffi::lua_pop(state, 1);
13261329
}
13271330
}
13281331

13291332
if libs.contains(StdLib::TABLE) {
13301333
requiref(state, ffi::LUA_TABLIBNAME, ffi::luaopen_table, 1)?;
1334+
ffi::lua_pop(state, 1);
13311335
}
13321336

13331337
#[cfg(not(feature = "luau"))]
13341338
if libs.contains(StdLib::IO) {
13351339
requiref(state, ffi::LUA_IOLIBNAME, ffi::luaopen_io, 1)?;
1340+
ffi::lua_pop(state, 1);
13361341
}
13371342

13381343
if libs.contains(StdLib::OS) {
13391344
requiref(state, ffi::LUA_OSLIBNAME, ffi::luaopen_os, 1)?;
1345+
ffi::lua_pop(state, 1);
13401346
}
13411347

13421348
if libs.contains(StdLib::STRING) {
13431349
requiref(state, ffi::LUA_STRLIBNAME, ffi::luaopen_string, 1)?;
1350+
ffi::lua_pop(state, 1);
13441351
}
13451352

13461353
#[cfg(any(feature = "lua54", feature = "lua53", feature = "luau"))]
13471354
{
13481355
if libs.contains(StdLib::UTF8) {
13491356
requiref(state, ffi::LUA_UTF8LIBNAME, ffi::luaopen_utf8, 1)?;
1357+
ffi::lua_pop(state, 1);
13501358
}
13511359
}
13521360

13531361
#[cfg(any(feature = "lua52", feature = "luau"))]
13541362
{
13551363
if libs.contains(StdLib::BIT) {
13561364
requiref(state, ffi::LUA_BITLIBNAME, ffi::luaopen_bit32, 1)?;
1365+
ffi::lua_pop(state, 1);
13571366
}
13581367
}
13591368

13601369
#[cfg(feature = "luajit")]
13611370
{
13621371
if libs.contains(StdLib::BIT) {
13631372
requiref(state, ffi::LUA_BITLIBNAME, ffi::luaopen_bit, 1)?;
1373+
ffi::lua_pop(state, 1);
13641374
}
13651375
}
13661376

13671377
#[cfg(feature = "luau")]
13681378
if libs.contains(StdLib::BUFFER) {
13691379
requiref(state, ffi::LUA_BUFFERLIBNAME, ffi::luaopen_buffer, 1)?;
1380+
ffi::lua_pop(state, 1);
13701381
}
13711382

13721383
#[cfg(feature = "luau")]
13731384
if libs.contains(StdLib::VECTOR) {
13741385
requiref(state, ffi::LUA_VECLIBNAME, ffi::luaopen_vector, 1)?;
1386+
ffi::lua_pop(state, 1);
13751387
}
13761388

13771389
if libs.contains(StdLib::MATH) {
13781390
requiref(state, ffi::LUA_MATHLIBNAME, ffi::luaopen_math, 1)?;
1391+
ffi::lua_pop(state, 1);
13791392
}
13801393

13811394
if libs.contains(StdLib::DEBUG) {
13821395
requiref(state, ffi::LUA_DBLIBNAME, ffi::luaopen_debug, 1)?;
1396+
ffi::lua_pop(state, 1);
13831397
}
13841398

13851399
#[cfg(not(feature = "luau"))]
13861400
if libs.contains(StdLib::PACKAGE) {
13871401
requiref(state, ffi::LUA_LOADLIBNAME, ffi::luaopen_package, 1)?;
1402+
ffi::lua_pop(state, 1);
13881403
}
13891404
#[cfg(feature = "luau")]
13901405
if libs.contains(StdLib::PACKAGE) {
@@ -1395,11 +1410,13 @@ unsafe fn load_std_libs(state: *mut ffi::lua_State, libs: StdLib) -> Result<()>
13951410
#[cfg(feature = "luajit")]
13961411
if libs.contains(StdLib::JIT) {
13971412
requiref(state, ffi::LUA_JITLIBNAME, ffi::luaopen_jit, 1)?;
1413+
ffi::lua_pop(state, 1);
13981414
}
13991415

14001416
#[cfg(feature = "luajit")]
14011417
if libs.contains(StdLib::FFI) {
14021418
requiref(state, ffi::LUA_FFILIBNAME, ffi::luaopen_ffi, 1)?;
1419+
ffi::lua_pop(state, 1);
14031420
}
14041421

14051422
Ok(())

0 commit comments

Comments
 (0)