1
0
mirror of https://github.com/shimunn/aria2xspf.git synced 2023-11-17 09:27:54 +01:00

prevent user from overrriding source file

This commit is contained in:
Shimun 2019-06-08 20:04:24 +02:00
parent 61dc6b7d8e
commit 8a1b718709

View File

@ -11,13 +11,13 @@ mod conf;
mod opts; mod opts;
use conf::*; use conf::*;
use dirs;
use opts::*; use opts::*;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
use std::io::{self, Read, Write}; use std::io::{self, Read, Stdin, Write};
use std::io::{BufRead, BufReader}; use std::io::{BufRead, BufReader};
use std::process::exit;
use dirs;
use xml::writer::{EmitterConfig, EventWriter, Result as XResult, XmlEvent}; use xml::writer::{EmitterConfig, EventWriter, Result as XResult, XmlEvent};
#[derive(Builder, Debug)] #[derive(Builder, Debug)]
@ -82,6 +82,14 @@ fn config() -> Option<Config> {
fn main() { fn main() {
let opts = Opts::from_args(); let opts = Opts::from_args();
if opts.input == opts.output {
eprintln!("Input and output are the same file! {:?}\nContinue(y/n): ", opts.input);
match io::stdin().bytes().next() {
Some(Ok(r)) if r as char == 'y' => (),
Some(Ok(_)) => exit(1),
_ => (), //Stdin closed, assume in == out is intentional
}
}
let file = File::open(opts.input).expect("Failed to open file!"); let file = File::open(opts.input).expect("Failed to open file!");
let mut out = File::create(opts.output).expect("Failed to open OUTPUT file!"); let mut out = File::create(opts.output).expect("Failed to open OUTPUT file!");
let mut writer = EmitterConfig::new().perform_indent(true).create_writer(&mut out); let mut writer = EmitterConfig::new().perform_indent(true).create_writer(&mut out);
@ -108,8 +116,8 @@ fn convert<I: Iterator<Item = Track>, W: Write>(html: bool, tracks: I, w: &mut E
.attr("type", "text/javascript") .attr("type", "text/javascript")
.attr("src", url), .attr("src", url),
)?; )?;
w.write(XmlEvent::characters(""))?; w.write(XmlEvent::characters(""))?;
w.write(XmlEvent::end_element())?; w.write(XmlEvent::end_element())?;
} }
for url in CONFIG.include.css.iter() { for url in CONFIG.include.css.iter() {
w.write( w.write(
@ -118,7 +126,7 @@ fn convert<I: Iterator<Item = Track>, W: Write>(html: bool, tracks: I, w: &mut E
.attr("href", url), .attr("href", url),
)?; )?;
w.write(XmlEvent::characters(""))?; w.write(XmlEvent::characters(""))?;
w.write(XmlEvent::end_element())?; w.write(XmlEvent::end_element())?;
} }
w.write(XmlEvent::end_element())?; w.write(XmlEvent::end_element())?;
} }