diff --git a/Cargo.lock b/Cargo.lock index 2abc1b68c..cc8b06d86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1960,9 +1960,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] diff --git a/src/uucore/src/lib/features/fs.rs b/src/uucore/src/lib/features/fs.rs index c7fb1f2fc..f43c18ebd 100644 --- a/src/uucore/src/lib/features/fs.rs +++ b/src/uucore/src/lib/features/fs.rs @@ -111,6 +111,7 @@ impl FileInformation { #[cfg(all( unix, not(target_vendor = "apple"), + not(target_os = "aix"), not(target_os = "android"), not(target_os = "freebsd"), not(target_os = "netbsd"), @@ -142,6 +143,8 @@ impl FileInformation { ) ))] return self.0.st_nlink.into(); + #[cfg(target_os = "aix")] + return self.0.st_nlink.try_into().unwrap(); #[cfg(windows)] return self.0.number_of_links(); } diff --git a/src/uucore/src/lib/features/fsext.rs b/src/uucore/src/lib/features/fsext.rs index 0acedb4e1..7f29a2dc6 100644 --- a/src/uucore/src/lib/features/fsext.rs +++ b/src/uucore/src/lib/features/fsext.rs @@ -11,7 +11,7 @@ const LINUX_MTAB: &str = "/etc/mtab"; #[cfg(any(target_os = "linux", target_os = "android"))] const LINUX_MOUNTINFO: &str = "/proc/self/mountinfo"; -#[cfg(all(unix, not(target_os = "redox")))] +#[cfg(all(unix, not(any(target_os = "aix", target_os = "redox"))))] static MOUNT_OPT_BIND: &str = "bind"; #[cfg(windows)] const MAX_PATH: usize = 266; @@ -83,6 +83,7 @@ use std::time::UNIX_EPOCH; ))] pub use libc::statfs as StatFs; #[cfg(any( + target_os = "aix", target_os = "netbsd", target_os = "bitrig", target_os = "dragonfly", @@ -101,6 +102,7 @@ pub use libc::statvfs as StatFs; ))] pub use libc::statfs as statfs_fn; #[cfg(any( + target_os = "aix", target_os = "netbsd", target_os = "bitrig", target_os = "illumos", @@ -304,7 +306,7 @@ impl From for MountInfo { } } -#[cfg(all(unix, not(target_os = "redox")))] +#[cfg(all(unix, not(any(target_os = "aix", target_os = "redox"))))] fn is_dummy_filesystem(fs_type: &str, mount_option: &str) -> bool { // spell-checker:disable match fs_type { @@ -323,14 +325,14 @@ fn is_dummy_filesystem(fs_type: &str, mount_option: &str) -> bool { // spell-checker:enable } -#[cfg(all(unix, not(target_os = "redox")))] +#[cfg(all(unix, not(any(target_os = "aix", target_os = "redox"))))] fn is_remote_filesystem(dev_name: &str, fs_type: &str) -> bool { dev_name.find(':').is_some() || (dev_name.starts_with("//") && fs_type == "smbfs" || fs_type == "cifs") || dev_name == "-hosts" } -#[cfg(all(unix, not(target_os = "redox")))] +#[cfg(all(unix, not(any(target_os = "aix", target_os = "redox"))))] fn mount_dev_id(mount_dir: &str) -> String { use std::os::unix::fs::MetadataExt; @@ -472,7 +474,12 @@ pub fn read_fs_list() -> Result, std::io::Error> { } Ok(mounts) } - #[cfg(any(target_os = "redox", target_os = "illumos", target_os = "solaris"))] + #[cfg(any( + target_os = "aix", + target_os = "redox", + target_os = "illumos", + target_os = "solaris" + ))] { // No method to read mounts, yet Ok(Vec::new()) @@ -633,6 +640,7 @@ impl FsMeta for StatFs { #[cfg(all( not(target_env = "musl"), not(target_vendor = "apple"), + not(target_os = "aix"), not(target_os = "android"), not(target_os = "freebsd"), not(target_os = "openbsd"), @@ -658,6 +666,7 @@ impl FsMeta for StatFs { return self.f_bsize.into(); #[cfg(any( target_env = "musl", + target_os = "aix", target_os = "freebsd", target_os = "illumos", target_os = "solaris", diff --git a/src/uucore/src/lib/features/signals.rs b/src/uucore/src/lib/features/signals.rs index 0c3f968d9..8c9ca6195 100644 --- a/src/uucore/src/lib/features/signals.rs +++ b/src/uucore/src/lib/features/signals.rs @@ -4,7 +4,7 @@ // file that was distributed with this source code. // spell-checker:ignore (vars/api) fcntl setrlimit setitimer rubout pollable sysconf -// spell-checker:ignore (vars/signals) ABRT ALRM CHLD SEGV SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGEMT SIGFPE SIGHUP SIGILL SIGINFO SIGINT SIGIO SIGIOT SIGKILL SIGPIPE SIGPROF SIGPWR SIGQUIT SIGSEGV SIGSTOP SIGSYS SIGTERM SIGTRAP SIGTSTP SIGTHR SIGTTIN SIGTTOU SIGURG SIGUSR SIGVTALRM SIGWINCH SIGXCPU SIGXFSZ STKFLT PWR THR TSTP TTIN TTOU VTALRM XCPU XFSZ SIGCLD SIGPOLL SIGWAITING SIGAIOCANCEL SIGLWP SIGFREEZE SIGTHAW SIGCANCEL SIGLOST SIGXRES SIGJVM SIGRTMIN SIGRT SIGRTMAX AIOCANCEL XRES RTMIN RTMAX +// spell-checker:ignore (vars/signals) ABRT ALRM CHLD SEGV SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGDANGER SIGEMT SIGFPE SIGHUP SIGILL SIGINFO SIGINT SIGIO SIGIOT SIGKILL SIGMIGRATE SIGMSG SIGPIPE SIGPRE SIGPROF SIGPWR SIGQUIT SIGSEGV SIGSTOP SIGSYS SIGTALRM SIGTERM SIGTRAP SIGTSTP SIGTHR SIGTTIN SIGTTOU SIGURG SIGUSR SIGVIRT SIGVTALRM SIGWINCH SIGXCPU SIGXFSZ STKFLT PWR THR TSTP TTIN TTOU VIRT VTALRM XCPU XFSZ SIGCLD SIGPOLL SIGWAITING SIGAIOCANCEL SIGLWP SIGFREEZE SIGTHAW SIGCANCEL SIGLOST SIGXRES SIGJVM SIGRTMIN SIGRT SIGRTMAX TALRM AIOCANCEL XRES RTMIN RTMAX #[cfg(unix)] use nix::errno::Errno; #[cfg(unix)] @@ -290,6 +290,55 @@ static ALL_SIGNALS: [&str; SIGNALS_SIZE] = [ "RTMAX", ]; +/* + The following signals are defined in AIX: + + SIGHUP hangup, generated when terminal disconnects + SIGINT interrupt, generated from terminal special char + SIGQUIT quit, generated from terminal special char + SIGILL illegal instruction (not reset when caught) + SIGTRAP trace trap (not reset when caught) + SIGABRT abort process + SIGEMT EMT instruction + SIGFPE floating point exception + SIGKILL kill (cannot be caught or ignored) + SIGBUS bus error (specification exception) + SIGSEGV segmentation violation + SIGSYS bad argument to system call + SIGPIPE write on a pipe with no one to read it + SIGALRM alarm clock timeout + SIGTERM software termination signal + SIGURG urgent condition on I/O channel + SIGSTOP stop (cannot be caught or ignored) + SIGTSTP interactive stop + SIGCONT continue (cannot be caught or ignored) + SIGCHLD sent to parent on child stop or exit + SIGTTIN background read attempted from control terminal + SIGTTOU background write attempted to control terminal + SIGIO I/O possible, or completed + SIGXCPU cpu time limit exceeded (see setrlimit()) + SIGXFSZ file size limit exceeded (see setrlimit()) + SIGMSG input data is in the ring buffer + SIGWINCH window size changed + SIGPWR power-fail restart + SIGUSR1 user defined signal 1 + SIGUSR2 user defined signal 2 + SIGPROF profiling time alarm (see setitimer) + SIGDANGER system crash imminent; free up some page space + SIGVTALRM virtual time alarm (see setitimer) + SIGMIGRATE migrate process + SIGPRE programming exception + SIGVIRT AIX virtual time alarm + SIGTALRM per-thread alarm clock +*/ +#[cfg(target_os = "aix")] +pub static ALL_SIGNALS: [&str; 37] = [ + "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", + "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "IO", "XCPU", + "XFSZ", "MSG", "WINCH", "PWR", "USR1", "USR2", "PROF", "DANGER", "VTALRM", "MIGRATE", "PRE", + "VIRT", "TALRM", +]; + pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option { if let Ok(value) = signal_name_or_value.parse() { if is_signal(value) {