| #![allow(dead_code)] // not used on all platforms |
| use crate::io::{self, Error, ErrorKind}; |
| pub(crate) const NOT_FILE_ERROR: Error = Error::new_const( |
| &"the source path is neither a regular file nor a symlink to a regular file", |
| pub fn copy(from: &Path, to: &Path) -> io::Result<u64> { |
| let mut reader = fs::File::open(from)?; |
| let metadata = reader.metadata()?; |
| return Err(NOT_FILE_ERROR); |
| let mut writer = fs::File::create(to)?; |
| let perm = metadata.permissions(); |
| let ret = io::copy(&mut reader, &mut writer)?; |
| writer.set_permissions(perm)?; |
| pub fn remove_dir_all(path: &Path) -> io::Result<()> { |
| let filetype = fs::symlink_metadata(path)?.file_type(); |
| if filetype.is_symlink() { fs::remove_file(path) } else { remove_dir_all_recursive(path) } |
| fn remove_dir_all_recursive(path: &Path) -> io::Result<()> { |
| for child in fs::read_dir(path)? { |
| if child.file_type()?.is_dir() { |
| remove_dir_all_recursive(&child.path())?; |
| fs::remove_file(&child.path())?; |