aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-06 15:45:57 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-06 15:45:57 +0100
commit190948b0a442437acd7510c601f506ca007d193f (patch)
treeaf6852d587ae79227850ffcdd01bc672f8404c07
parent4bbdd0e194da6d15913535dce5e36a18ff76260d (diff)
truncate config output file on address update
Fixes trailing characters not being removed, resulting in an unreadable file.
-rw-r--r--src/main.rs25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/main.rs b/src/main.rs
index 4ec567d..1a993c2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,4 @@
use std::fs::{File, OpenOptions};
-use std::io::Seek;
use tokio::sync::mpsc;
@@ -21,14 +20,16 @@ async fn main() -> Result<()> {
let mut config_file = File::open("/data/pppoe.conf")?;
let config: Config = serde_json::from_reader(&mut config_file)?;
- let mut ds_config_file = OpenOptions::new()
- .read(true)
- .write(true)
- .create(true)
- .truncate(false)
- .open(rsdsl_ip_config::LOCATION)?;
- let mut ds_config: DsConfig =
- serde_json::from_reader(&mut ds_config_file).unwrap_or(DsConfig::default());
+ let mut ds_config: DsConfig = {
+ let mut ds_config_file = OpenOptions::new()
+ .read(true)
+ .write(true)
+ .create(true)
+ .truncate(false)
+ .open(rsdsl_ip_config::LOCATION)?;
+
+ serde_json::from_reader(&mut ds_config_file).unwrap_or(DsConfig::default())
+ };
let (v4_tx, mut v4_rx) = mpsc::unbounded_channel();
let (v6_tx, mut v6_rx) = mpsc::unbounded_channel();
@@ -50,9 +51,8 @@ async fn main() -> Result<()> {
result = v4_rx.recv() => {
ds_config.v4 = result.ok_or(Error::V4ChannelClosed)?;
- ds_config_file.rewind()?;
+ let mut ds_config_file = File::create(rsdsl_ip_config::LOCATION)?;
serde_json::to_writer_pretty(&mut ds_config_file, &ds_config)?;
- ds_config_file.sync_all()?;
inform();
@@ -65,9 +65,8 @@ async fn main() -> Result<()> {
result = v6_rx.recv() => {
ds_config.v6 = result.ok_or(Error::V6ChannelClosed)?;
- ds_config_file.rewind()?;
+ let mut ds_config_file = File::create(rsdsl_ip_config::LOCATION)?;
serde_json::to_writer_pretty(&mut ds_config_file, &ds_config)?;
- ds_config_file.sync_all()?;
inform();