1use std::fs::File;
2use std::fs;
3use std::io::Read;
4use std::io::{Seek,SeekFrom};
5use std::io;
6
7fn check_bom(file_name :&str) -> bool {
8 let mut f = File::open(file_name).unwrap();
9 let mut buf = vec![0;3];
10 f.read(&mut buf).unwrap();
11 if (buf[0] == 0xef) && (buf[1] == 0xbb) && (buf[2] == 0xbf) {
12 return true;
13 }
14 false
15}
16
17fn remove_bom_impl(file_name :&str) -> bool {
18 let tmpname = file_name.to_owned() + ".tmp";
19 {
20 fs::rename(file_name, tmpname.as_str()).unwrap();
21
22 let mut old_file = File::open(tmpname.as_str()).unwrap();
23 let mut file = File::create(file_name).unwrap();
24 old_file.seek(SeekFrom::Start(3)).unwrap();
25 io::copy(&mut old_file, &mut file).unwrap();
26 }
27 fs::remove_file(tmpname.as_str()).unwrap();
28 true
29}
30
31pub fn remove_bom(file_name: &str) ->bool {
32 match check_bom(file_name) {
33 true => remove_bom_impl(file_name),
34 false => true
35 }
36}