From d9ed588c0e5294f780c0348cb6e3a94841b80b4d Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Fri, 22 Nov 2024 20:01:10 -0600 Subject: [PATCH] Add some more extern C code. --- build.rs | 6 ++---- src/main.rs | 16 ++++++++++++++-- src/test.c | 9 ++++++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/build.rs b/build.rs index b7c2e31..7e264b4 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,5 @@ fn main() { // Tell Cargo to rerun if the c file is changed println!("cargo:rerun-if-changed=src/test.c"); - cc::Build::new() - .file("src/test.c") - .compile("test"); -} \ No newline at end of file + cc::Build::new().file("src/test.c").compile("test"); +} diff --git a/src/main.rs b/src/main.rs index 1412a84..6096875 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,18 +13,28 @@ impl Greeter { Greeter { greeting } } - fn greet(&self) { + pub fn greet(&self) { println!("{}", self.greeting); } } extern "C" { fn print_num(num: i32); + fn print_a_string(s: *const u8, len: usize); } fn main() { Greeter::new("Hello, Jesse!").greet(); + // Calling some C + + let original_s = "Hello from C-Rust land!"; + unsafe { + print_a_string(original_s.as_ptr(), original_s.len()); + } + + // Testing out stack + let mut my_stack = Stack::new(); my_stack.push(Greeter::new("Hello")); my_stack.push(Greeter::new("Beautiful")); @@ -49,5 +59,7 @@ fn main() { // calling some C let find_result = bst.find(3).unwrap_or(-1); - unsafe { print_num(find_result); } + unsafe { + print_num(find_result); + } } diff --git a/src/test.c b/src/test.c index 3d7dfda..3a5b6cf 100644 --- a/src/test.c +++ b/src/test.c @@ -1,5 +1,12 @@ #include -void print_num(int num) { +void print_num(const int num) { printf("[from c]: num is %d\n", num); +} + +void print_a_string(const char* s, const size_t length) { + for (int i = 0; i < length; i++) { + printf("%c", s[i]); + } + printf("\n"); } \ No newline at end of file