From: Hiroyuki_Katsura <hiroyuki.katsura.0513(a)gmail.com>
---
generator/rust.ml | 13 ++++++++---
run.in | 9 ++++++++
rust/Cargo.lock | 6 +++++
rust/Cargo.toml | 4 +---
rust/tests/010_load.rs | 24 +++++++++++++++++++
rust/tests/020_create.rs | 24 +++++++++++++++++++
rust/tests/030_create_flags.rs | 30 ++++++++++++++++++++++++
rust/tests/040_create_multiple.rs | 38 +++++++++++++++++++++++++++++++
8 files changed, 142 insertions(+), 6 deletions(-)
create mode 100644 rust/Cargo.lock
create mode 100644 rust/tests/010_load.rs
create mode 100644 rust/tests/020_create.rs
create mode 100644 rust/tests/030_create_flags.rs
create mode 100644 rust/tests/040_create_multiple.rs
diff --git a/generator/rust.ml b/generator/rust.ml
index dbe9db010..251eb1594 100644
--- a/generator/rust.ml
+++ b/generator/rust.ml
@@ -37,14 +37,16 @@ let generate_rust () =
#[allow(non_camel_case_types)]
enum guestfs_h {}
+#[link(name = \"guestfs\")]
extern \"C\" {
fn guestfs_create() -> *mut guestfs_h;
fn guestfs_create_flags(flags: i64) -> *mut guestfs_h;
fn guestfs_close(g: *mut guestfs_h);
- static GUESTFS_CREATE_NO_ENVIRONMENT: i64;
- static GUESTFS_CREATE_NO_CLOSE_ON_EXIT: i64;
}
+const GUESTFS_CREATE_NO_ENVIRONMENT: i64 = 1;
+const GUESTFS_CREATE_NO_CLOSE_ON_EXIT: i64 = 2;
+
pub struct Handle {
g: *mut guestfs_h,
}
@@ -61,13 +63,17 @@ pub struct CreateFlags {
}
impl CreateFlags {
- pub fn new() -> CreateFlags {
+ pub fn none() -> CreateFlags {
CreateFlags {
create_no_environment_flag: false,
create_no_close_on_exit_flag: false,
}
}
+ pub fn new() -> CreateFlags {
+ CreateFlags::none()
+ }
+
pub fn create_no_environment(mut self, flag: bool) -> CreateFlags {
self.create_no_environment_flag = flag;
self
@@ -97,6 +103,7 @@ impl CreateFlags {
impl Handle {
pub fn create() -> Result<Handle, &'static str> {
let g = unsafe { guestfs_create() };
+ println!(\"hoge\");
if g.is_null() {
Err(\"failed to create guestfs handle\")
} else {
diff --git a/run.in b/run.in
index 488e1b937..301b02664 100755
--- a/run.in
+++ b/run.in
@@ -201,6 +201,15 @@ else
fi
export CGO_LDFLAGS
+# For rust
+export RUST="@RUST@"
+if [ -z "$RUSTFLAGS" ]; then
+ RUSTFLAGS="-C link-args=-L$b/lib/.libs"
+else
+ RUSTFLAGS="$RUSTFLAGS -C link-args=-L$b/lib/.libs"
+fi
+export RUSTFLAGS
+
# For GObject, Javascript and friends.
export GJS="@GJS@"
prepend GI_TYPELIB_PATH "$b/gobject"
diff --git a/rust/Cargo.lock b/rust/Cargo.lock
new file mode 100644
index 000000000..c03586e3f
--- /dev/null
+++ b/rust/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guestfs"
+version = "0.1.0"
+
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index 6cd94ce6a..4ea7c299b 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -1,8 +1,6 @@
[package]
-name = "rust"
+name = "guestfs"
version = "0.1.0"
edition = "2018"
[dependencies]
-libc = "0.2"
-
diff --git a/rust/tests/010_load.rs b/rust/tests/010_load.rs
new file mode 100644
index 000000000..eadd78896
--- /dev/null
+++ b/rust/tests/010_load.rs
@@ -0,0 +1,24 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+#[test]
+fn load() {
+ // nop
+}
diff --git a/rust/tests/020_create.rs b/rust/tests/020_create.rs
new file mode 100644
index 000000000..0b57b19d7
--- /dev/null
+++ b/rust/tests/020_create.rs
@@ -0,0 +1,24 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+#[test]
+fn create() {
+ assert!(!guestfs::Handle::create().is_err(), "create fail");
+}
diff --git a/rust/tests/030_create_flags.rs b/rust/tests/030_create_flags.rs
new file mode 100644
index 000000000..5de0589c1
--- /dev/null
+++ b/rust/tests/030_create_flags.rs
@@ -0,0 +1,30 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+use guestfs::*;
+
+#[test]
+fn create_flags() {
+ let _h = Handle::create_flags(CreateFlags::none()).expect("create_flags
fail");
+ // TODO: Add parse_environment to check the flag is created correctly
+ let flags = CreateFlags::new()
+ .create_no_environment(true);
+ let _h = Handle::create_flags(flags).expect("create_flags fail");
+ // TODO: Add parse_environment to check the flag is created correctly
+}
diff --git a/rust/tests/040_create_multiple.rs b/rust/tests/040_create_multiple.rs
new file mode 100644
index 000000000..ee481c278
--- /dev/null
+++ b/rust/tests/040_create_multiple.rs
@@ -0,0 +1,38 @@
+/* libguestfs Python bindings
+ Copyright (C) 2009-2019 Red Hat Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+extern crate guestfs;
+
+fn create() -> guestfs::Handle {
+ match guestfs::Handle::create() {
+ Ok(g) => g,
+ Err(e) => panic!("fail: {}", e),
+ }
+}
+
+fn ignore(_x: guestfs::Handle, _y: guestfs::Handle, _z: guestfs::Handle) {
+ // drop
+}
+
+#[test]
+fn create_multiple() {
+ let x = create();
+ let y = create();
+ let z = create();
+ ignore(x, y, z)
+}
--
2.20.1 (Apple Git-117)