diff --git a/Cargo.toml b/Cargo.toml index a60b7786e..a8b321804 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,6 @@ fuchsia = [ "nice", "pathchk", "stdbuf", - "touch", "tty", "uname", "unlink", @@ -69,6 +68,7 @@ generic = [ "hostname", "nproc", "sync", + "touch", "whoami", "redox_generic" ] diff --git a/src/touch/touch.rs b/src/touch/touch.rs index 194a9b0be..ed75a7676 100644 --- a/src/touch/touch.rs +++ b/src/touch/touch.rs @@ -18,7 +18,7 @@ extern crate uucore; use filetime::*; use std::fs::{self, File}; -use std::io::{self, Error}; +use std::io::Error; use std::path::Path; static NAME: &str = "touch"; @@ -42,31 +42,6 @@ macro_rules! local_tm_to_filetime( }) ); -macro_rules! to_timeval { - ($ft:expr) => ( - timeval { - tv_sec: $ft.seconds() as time_t, - tv_usec: ($ft.nanoseconds() / 1000) as suseconds_t, - } - ) -} - -#[cfg(unix)] -fn set_symlink_times(p: &str, atime: FileTime, mtime: FileTime) -> io::Result<()> { - use std::ffi::CString; - use uucore::libc::{lutimes, suseconds_t, time_t, timeval}; - - let times = [to_timeval!(atime), to_timeval!(mtime)]; - let p = try!(CString::new(p)); - return unsafe { - if lutimes(p.as_ptr() as *const _, times.as_ptr()) == 0 { - Ok(()) - } else { - Err(io::Error::last_os_error()) - } - }; -} - pub fn uumain(args: Vec) -> i32 { let mut opts = getopts::Options::new(); @@ -204,7 +179,7 @@ pub fn uumain(args: Vec) -> i32 { } if matches.opt_present("h") { - if let Err(e) = set_symlink_times(path, atime, mtime) { + if let Err(e) = set_symlink_file_times(path, atime, mtime) { show_warning!("cannot touch '{}': {}", path, e); } } else { diff --git a/tests/tests.rs b/tests/tests.rs index 942a00ece..f74d8e326 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -26,7 +26,6 @@ unix_only! { "pathchk", test_pathchk; "pinky", test_pinky; "stdbuf", test_stdbuf; - "touch", test_touch; "unlink", test_unlink; "who", test_who; // Be aware of the trailing semicolon after the last item @@ -86,6 +85,7 @@ generic! { "tac", test_tac; "tail", test_tail; "test", test_test; + "touch", test_touch; "tr", test_tr; "true", test_true; "truncate", test_truncate;