Parcourir la source

fix io error when loading config file

ghassmo il y a 5 ans
Parent
commit
618eb7fd2c
3 fichiers modifiés avec 28 ajouts et 33 suppressions
  1. 1 1
      src/bin/darkfid.rs
  2. 26 31
      src/cli/client_cli/cli_config.rs
  3. 1 1
      src/cli/client_cli/wallet_cli.rs

+ 1 - 1
src/bin/darkfid.rs

@@ -231,7 +231,7 @@ fn main() -> Result<()> {
     let (signal, shutdown) = async_channel::unbounded::<()>();
     let (signal, shutdown) = async_channel::unbounded::<()>();
 
 
     let options = Arc::new(WalletCli::load()?);
     let options = Arc::new(WalletCli::load()?);
-    let config = Arc::new(cli_config::Config::default());
+    let config = Arc::new(cli_config::Config::load(PathBuf::from("darkfid_config_file"))?);
 
 
     let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build();
     let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build();
 
 

+ 26 - 31
src/cli/client_cli/cli_config.rs

@@ -1,9 +1,9 @@
-use crate::serial::{Encodable, Decodable, serialize, deserialize};
-use crate::Result;
+use crate::serial::{deserialize, serialize, Decodable, Encodable};
 use crate::util::join_config_path;
 use crate::util::join_config_path;
+use crate::Result;
 
 
 use std::{
 use std::{
-    fs::{create_dir_all, File},
+    fs::OpenOptions,
     io::prelude::*,
     io::prelude::*,
     path::PathBuf,
     path::PathBuf,
 };
 };
@@ -18,61 +18,56 @@ pub struct Config {
 
 
 impl Default for Config {
 impl Default for Config {
     fn default() -> Self {
     fn default() -> Self {
-        let connect_url= String::from("127.0.0.1:3333");
-        let subscriber_url= String::from("127.0.0.1:4444");
-        let rpc_url= String::from("127.0.0.1:8000");
-        let database_path = String::from("database_client.db"); 
+        let connect_url = String::from("127.0.0.1:3333");
+        let subscriber_url = String::from("127.0.0.1:4444");
+        let rpc_url = String::from("127.0.0.1:8000");
+        let database_path = String::from("database_client.db");
         let log_path = String::from("/tmp/darkfid_service_daemon.log");
         let log_path = String::from("/tmp/darkfid_service_daemon.log");
         Self {
         Self {
             connect_url,
             connect_url,
             subscriber_url,
             subscriber_url,
             rpc_url,
             rpc_url,
             database_path,
             database_path,
-            log_path
+            log_path,
         }
         }
     }
     }
 }
 }
 
 
 impl Config {
 impl Config {
     pub fn load(path: PathBuf) -> Result<Config> {
     pub fn load(path: PathBuf) -> Result<Config> {
-        let path = join_config_path(&path)?; 
+        let path = join_config_path(&path)?;
         load_config_file(path)
         load_config_file(path)
     }
     }
-    pub fn save(&self, path: PathBuf) -> Result <()> {
-        let path = join_config_path(&path)?; 
+    pub fn save(&self, path: PathBuf) -> Result<()> {
+        let path = join_config_path(&path)?;
         save_config_file(self, path)
         save_config_file(self, path)
     }
     }
 }
 }
 
 
+pub fn load_config_file(config_file: PathBuf) -> Result<Config> {
+    let mut file = OpenOptions::new()
+        .read(true)
+        .write(true)
+        .create(true)
+        .open(config_file)?;
 
 
-
-pub fn load_config_file(config_file: PathBuf) -> Result<Config>
-{
-    
-    let mut file = File::open(config_file)?;
     let mut buffer: Vec<u8> = vec![];
     let mut buffer: Vec<u8> = vec![];
     file.read_to_end(&mut buffer)?;
     file.read_to_end(&mut buffer)?;
-    let config: Config = deserialize(&buffer)?;
-
-    Ok(config)
+    if !buffer.is_empty() {
+        let config: Config = deserialize(&buffer)?;
+        Ok(config)
+    } else {
+        Ok(Config::default())
+    }
 }
 }
 
 
-pub fn save_config_file(config: &Config, config_file: PathBuf) -> Result<()>
-{
+pub fn save_config_file(config: &Config, config_file: PathBuf) -> Result<()> {
+    let mut file = OpenOptions::new().write(true).create(true).open(&config_file)?;
     let serialized = serialize(config);
     let serialized = serialize(config);
-
-    if let Some(outdir) = config_file.parent() {
-        create_dir_all(outdir)?;
-    }
-
-    let mut file = File::create(config_file)?;
     file.write_all(&serialized)?;
     file.write_all(&serialized)?;
-
     Ok(())
     Ok(())
 }
 }
 
 
-
-
 impl Encodable for Config {
 impl Encodable for Config {
     fn encode<S: std::io::Write>(&self, mut s: S) -> Result<usize> {
     fn encode<S: std::io::Write>(&self, mut s: S) -> Result<usize> {
         let mut len = 0;
         let mut len = 0;
@@ -92,7 +87,7 @@ impl Decodable for Config {
             subscriber_url: Decodable::decode(&mut d)?,
             subscriber_url: Decodable::decode(&mut d)?,
             rpc_url: Decodable::decode(&mut d)?,
             rpc_url: Decodable::decode(&mut d)?,
             database_path: Decodable::decode(&mut d)?,
             database_path: Decodable::decode(&mut d)?,
-            log_path: Decodable::decode(&mut d)?
+            log_path: Decodable::decode(&mut d)?,
         })
         })
     }
     }
 }
 }

+ 1 - 1
src/cli/client_cli/wallet_cli.rs

@@ -20,7 +20,7 @@ impl WalletCli {
                     .takes_value(false)
                     .takes_value(false)
             ).get_matches();
             ).get_matches();
 
 
-        let verbose = app.is_present("VERBOSE");
+        let verbose = app.is_present("verbose");
 
 
         Ok(Self {
         Ok(Self {
             verbose,
             verbose,