Adding the basic c_types as their own file section.
Also, added the to_c_string and from_c_string functions. Their location needs to be determined.
This commit is contained in:
parent
ca780e71ef
commit
26097e8403
@ -9,5 +9,10 @@ documentation = ""
|
|||||||
keywords = ["binding", "c types", "c enums", "c flags", "c strings"]
|
keywords = ["binding", "c types", "c enums", "c flags", "c strings"]
|
||||||
|
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = []
|
||||||
|
use_std = []
|
||||||
|
|
||||||
|
|
||||||
[dependencies.scribe]
|
[dependencies.scribe]
|
||||||
git = "https://gitlab.com/CyberMages/scribe.git"
|
git = "https://gitlab.com/CyberMages/scribe.git"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use std::ffi::{CStr, CString};
|
//use std::ffi::{CStr, CString};
|
||||||
use std::os::raw::c_char;
|
//use super::c_types::CChar;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -8,12 +8,16 @@ pub const EMPTY_STRING: &'static str = "";
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO: from_c_string should be moved to wherever our String class will
|
||||||
|
reside.
|
||||||
|
|
||||||
/// Creates a new String from the data in the pointer.
|
/// Creates a new String from the data in the pointer.
|
||||||
///
|
///
|
||||||
/// Any conversion errors will result in an Empty
|
/// Any conversion errors will result in an Empty
|
||||||
/// String being returned. Option is not used here for
|
/// String being returned. Option is not used here for
|
||||||
/// simplicities sake.
|
/// simplicities sake.
|
||||||
pub fn from_c_string(c_string: *const c_char) -> String
|
pub fn from_c_string(c_string: *const CChar) -> String
|
||||||
{
|
{
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
@ -21,6 +25,12 @@ pub fn from_c_string(c_string: *const c_char) -> String
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
TODO: Determine if a CString class can be created at this level if
|
||||||
|
there is no allocation available. The answer is probably not,
|
||||||
|
but it needs to be investigated.
|
||||||
|
|
||||||
/// Creates a CString from a given str.
|
/// Creates a CString from a given str.
|
||||||
///
|
///
|
||||||
/// This may be "" if there is an UTF8 conversion error.
|
/// This may be "" if there is an UTF8 conversion error.
|
||||||
@ -59,3 +69,5 @@ pub fn to_c_string<P>(string: P) -> CString
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
70
src/c_types.rs
Normal file
70
src/c_types.rs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
//! This defines the primitive types that may be seen
|
||||||
|
//! when creating 'C' bindings.
|
||||||
|
//!
|
||||||
|
//! There are several places where the target architecture and the OS
|
||||||
|
//! require special consideration. These are handled
|
||||||
|
//! with configuration statements.
|
||||||
|
|
||||||
|
// Character types.
|
||||||
|
#[cfg(any(target_os="android", target_os="emscripten",
|
||||||
|
all(target_os="linux",
|
||||||
|
any(target_arch="aarch64", target_arch="arm",
|
||||||
|
target_arch="powerpc", target_arch="powerpc64"))))]
|
||||||
|
pub type CChar = u8;
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os="android", target_os="emscripten",
|
||||||
|
all(target_os="linux",
|
||||||
|
any(target_arch="aarch64", target_arch="arm",
|
||||||
|
target_arch="powerpc", target_arch="powerpc64")))))]
|
||||||
|
pub type CChar = i8;
|
||||||
|
|
||||||
|
|
||||||
|
pub type CIChar = i8;
|
||||||
|
pub type CUChar = u8;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Integer types.
|
||||||
|
#[cfg(any(target_pointer_width="32", target_os="windows"))]
|
||||||
|
pub type CLong = i32;
|
||||||
|
|
||||||
|
#[cfg(any(target_pointer_width="32", target_os="windows"))]
|
||||||
|
pub type CULong = u32;
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(all(target_pointer_width="64", not(target_os="windows")))]
|
||||||
|
pub type CLong = i32;
|
||||||
|
|
||||||
|
#[cfg(all(target_pointer_width="64", not(target_os="windows")))]
|
||||||
|
pub type CULong = u32;
|
||||||
|
|
||||||
|
|
||||||
|
pub type CShort = i16;
|
||||||
|
pub type CUShort = u16;
|
||||||
|
pub type CInt = i32;
|
||||||
|
pub type CUInt = u32;
|
||||||
|
pub type CLongLong = u64;
|
||||||
|
pub type CULongLong = u64;
|
||||||
|
pub type CFloat = f32;
|
||||||
|
pub type CDouble = f64;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Void types.
|
||||||
|
/// To return void from a 'C' function it should return an empty tuple ().
|
||||||
|
/// This type is just a descriptive version of that. **DO NOT** use this
|
||||||
|
/// as an argument to a function. Use the c_void type for that.
|
||||||
|
pub type CReturnVoid = ();
|
||||||
|
|
||||||
|
/// This acts as a 'C' void pointer to pass to functions. **DO NOT**
|
||||||
|
/// use this as a return type from a 'C' function. If a 'C' function
|
||||||
|
/// returns void, then use the c_return_void type for that.
|
||||||
|
#[repr(u8)]
|
||||||
|
pub enum CVoid
|
||||||
|
{
|
||||||
|
#[doc(hidden)]
|
||||||
|
_Variant,
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
_Variant2
|
||||||
|
}
|
21
src/lib.rs
21
src/lib.rs
@ -1,6 +1,19 @@
|
|||||||
//! The Binding library is a place where common macros and functions
|
//! The Binding library is a place where common macros and functions
|
||||||
//! that are used when interfacing with C libraries can be stored
|
//! that are used when interfacing with C libraries can be stored
|
||||||
//! for use amoungst all of CyberMages LLC's projects.
|
//! for use amoungst all of CyberMages LLC's projects.
|
||||||
|
|
||||||
|
// Handle using the core or the std of Rust depending on the chosen feature.
|
||||||
|
#![cfg_attr(not(feature="use_std"), no_std)]
|
||||||
|
|
||||||
|
// This crate can only use parts of Rust that are in both the core
|
||||||
|
// and the standard library. This way the logging system will work for
|
||||||
|
// libraries that use either.
|
||||||
|
//
|
||||||
|
// This is handled by coding using the std library and referencing the core
|
||||||
|
// library as the std library if the core library is desired.
|
||||||
|
#[cfg(not(feature="use_std"))]
|
||||||
|
extern crate core as std;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate scribe;
|
extern crate scribe;
|
||||||
|
|
||||||
@ -10,11 +23,17 @@ extern crate scribe;
|
|||||||
mod c_enum;
|
mod c_enum;
|
||||||
mod c_flags;
|
mod c_flags;
|
||||||
mod c_string;
|
mod c_string;
|
||||||
|
mod c_types;
|
||||||
|
|
||||||
// Raw platform data retrieval.
|
// Raw platform data retrieval.
|
||||||
mod raw;
|
mod raw;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub use self::c_string::{EMPTY_STRING, from_c_string, to_c_string};
|
pub use self::c_string::EMPTY_STRING;
|
||||||
|
//pub use self::c_string::{from_c_string, to_c_string};
|
||||||
|
pub use self::c_types::{CChar, CIChar, CUChar};
|
||||||
|
pub use self::c_types::{CShort, CUShort, CInt, CUInt, CLong, CULong};
|
||||||
|
pub use self::c_types::{CLongLong, CULongLong, CFloat, CDouble};
|
||||||
|
pub use self::c_types::{CVoid, CReturnVoid};
|
||||||
pub use self::raw::{AsRaw, AsRawMut, AsRawPtr, AsRawMutPtr, FromRaw, IntoRaw};
|
pub use self::raw::{AsRaw, AsRawMut, AsRawPtr, AsRawMutPtr, FromRaw, IntoRaw};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user