diff --git a/dysche-cli/src/main.rs b/dysche-cli/src/main.rs
index 19ea40aa8814bd10fb4856ac65faa1c8533b159b..0910af82059868b2379f6e3a8241e7ae22c30ebc 100644
--- a/dysche-cli/src/main.rs
+++ b/dysche-cli/src/main.rs
@@ -1,9 +1,10 @@
extern crate clap;
use std::fs::File;
use std::io::{self, BufRead};
-use std::path::Path;
+use std::io::Write;
+use std::fs::OpenOptions;
-const _DYSCHE_OP : &str = "/sys/modules/dysche/op";
+const DYSCHE_OP : &str = "/sys/modules/dysche/op";
const DYSCHE_STS : &str = "/sys/modules/dysche/status";
fn main() {
@@ -38,6 +39,9 @@ fn main() {
cpus);
ret = create_partition(cpus, kernel, "console=ttyS0, 115200", "acpi_devs: ");
}
+ } else if let Some(sc) = matches.subcommand_matches("destroy") {
+ let pid = sc.value_of("pid").unwrap_or("-1");
+ ret = destroy_partition(pid);
}
if ret > 0 {
@@ -67,9 +71,53 @@ fn create_partition(cpus: &str, kernel_img: &str, kernel_param: &str, dev_list:
return ret;
}
+fn destroy_partition(pid: &str) -> i32 {
+ let mut _ret = 0;
-fn read_lines
(filename: P) -> io::Result>>
- where P: AsRef, {
- let file = File::open(filename)?;
+ println!("Will force destroy partition {}", pid);
+
+ let cmd = format!("destory {}", pid);
+ _ret = write_line(DYSCHE_OP, &cmd);
+
+ if _ret == 0 {
+ println!("partition {} is destoried.", pid);
+ } else {
+ println!("{} is not present.", DYSCHE_OP);
+ println!(" check if the kernel module is enabled or not.");
+ println!();
+ _ret = 1;
+ }
+
+ return _ret;
+}
+
+fn write_line(filename: &str, line: &str) -> i32 {
+ let mut ret = 0;
+
+ let mut file = OpenOptions::new()
+ .write(true)
+ .append(true)
+ .open(filename)
+ .unwrap();
+
+ match file.write_all(line.as_bytes()) {
+ Err(_e) => {
+ println!("Write error");
+ ret = -1;
+ }
+ Ok(_) => {
+ println!("Write success");
+ //file.sync_all();
+ }
+ }
+
+ return ret;
+}
+
+fn read_lines(filename: &str) -> io::Result>> {
+ let file = match File::open(filename) {
+ Err(why) => panic!("couldn't open {}: {}", &filename, why),
+ Ok(file) => file,
+ };
Ok(io::BufReader::new(file).lines())
}
diff --git a/dysche-cli/src/param.yml b/dysche-cli/src/param.yml
index 3fccb1a6c9179856aaf60aeaa2c59dbac32fb2a1..3fa74b8302b9787846b85c9f8e28de0805016059 100644
--- a/dysche-cli/src/param.yml
+++ b/dysche-cli/src/param.yml
@@ -28,6 +28,15 @@ subcommands:
takes_value: true
short: b
+ - destroy:
+ about: "destroy an app partition"
+ short: d
+ multiple: false
+ args:
+ - pid:
+ help: "specify partition id that will be destoried."
+ takes_value: true
+ short: p
- list:
about: "show available partitions"
args: