1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-08-05 15:37:47 +00:00

change ~ reorganize code layout/structure

This commit is contained in:
Roy Ivy III 2020-04-24 17:18:23 -05:00
parent 6a8a677e8b
commit b0d02e7f43
22 changed files with 141 additions and 53 deletions

View file

@ -15,6 +15,9 @@ license = "MIT"
appveyor = { repository = "uutils/uucore" } appveyor = { repository = "uutils/uucore" }
travis-ci = { repository = "uutils/uucore" } travis-ci = { repository = "uutils/uucore" }
[lib]
path="src/lib/lib.rs"
[dependencies] [dependencies]
dunce = "1.0.0" dunce = "1.0.0"
getopts = "<= 0.2.21" getopts = "<= 0.2.21"
@ -34,7 +37,6 @@ data-encoding = { version = "~2.1", optional = true }
# * libc: initial utmp support added in 0.2.15, but 0.2.68 break the build for MinSRV 1.31.0 # * libc: initial utmp support added in 0.2.15, but 0.2.68 break the build for MinSRV 1.31.0
libc = { version = "0.2.15, <= 0.2.66", optional = true } libc = { version = "0.2.15, <= 0.2.66", optional = true }
[target.'cfg(target_os = "redox")'.dependencies] [target.'cfg(target_os = "redox")'.dependencies]
termion = "1.5" termion = "1.5"

View file

@ -1,33 +1,6 @@
extern crate wild; // features ~ feature-gated modules (core/bundler file)
pub fn args() -> impl Iterator<Item = String> { // spell-checker:ignore (uucore/uutils) coreopts libc musl utmpx uucore uutils winapi
wild::args()
}
#[cfg(feature = "failure")]
extern crate failure;
#[cfg(feature = "libc")]
pub extern crate libc;
#[cfg(feature = "winapi")]
pub extern crate winapi;
#[cfg(feature = "failure_derive")]
#[macro_use]
extern crate failure_derive;
#[cfg(feature = "nix")]
extern crate nix;
#[cfg(all(feature = "lazy_static", target_os = "linux"))]
#[macro_use]
extern crate lazy_static;
#[cfg(feature = "platform-info")]
extern crate platform_info;
#[macro_use]
mod macros;
#[macro_use]
pub mod coreopts;
pub mod panic;
#[cfg(feature = "encoding")] #[cfg(feature = "encoding")]
pub mod encoding; pub mod encoding;
@ -35,11 +8,16 @@ pub mod encoding;
pub mod fs; pub mod fs;
#[cfg(feature = "parse_time")] #[cfg(feature = "parse_time")]
pub mod parse_time; pub mod parse_time;
#[cfg(feature = "zero-copy")]
pub mod zero_copy;
#[cfg(all(unix, feature = "entries"))] // * (platform-specific) feature-gated modules
pub mod entries; // ** non-windows
#[cfg(all(not(windows), feature = "mode"))] #[cfg(all(not(windows), feature = "mode"))]
pub mod mode; pub mod mode;
// ** unix-only
#[cfg(all(unix, feature = "entries"))]
pub mod entries;
#[cfg(all(unix, feature = "process"))] #[cfg(all(unix, feature = "process"))]
pub mod process; pub mod process;
#[cfg(all(unix, not(target_os = "fuchsia"), feature = "signals"))] #[cfg(all(unix, not(target_os = "fuchsia"), feature = "signals"))]
@ -51,9 +29,6 @@ pub mod signals;
feature = "utmpx" feature = "utmpx"
))] ))]
pub mod utmpx; pub mod utmpx;
// ** windows-only
#[cfg(feature = "zero-copy")]
pub mod zero_copy;
#[cfg(all(windows, feature = "wide"))] #[cfg(all(windows, feature = "wide"))]
pub mod wide; pub mod wide;

View file

@ -7,7 +7,11 @@
// //
extern crate data_encoding; extern crate data_encoding;
extern crate failure;
use self::data_encoding::{DecodeError, BASE32, BASE64}; use self::data_encoding::{DecodeError, BASE32, BASE64};
use failure::Fail;
use std::io::{self, Read, Write}; use std::io::{self, Read, Write};
#[derive(Fail, Debug)] #[derive(Fail, Debug)]

View file

@ -12,9 +12,7 @@ extern crate dunce;
extern crate termion; extern crate termion;
#[cfg(unix)] #[cfg(unix)]
use super::libc; use libc::{
#[cfg(unix)]
use super::libc::{
mode_t, S_IRGRP, S_IROTH, S_IRUSR, S_ISGID, S_ISUID, S_ISVTX, S_IWGRP, S_IWOTH, S_IWUSR, mode_t, S_IRGRP, S_IROTH, S_IRUSR, S_ISGID, S_ISUID, S_ISVTX, S_IWGRP, S_IWOTH, S_IWUSR,
S_IXGRP, S_IXOTH, S_IXUSR, S_IXGRP, S_IXOTH, S_IXUSR,
}; };

View file

@ -6,8 +6,6 @@
// file that was distributed with this source code. // file that was distributed with this source code.
// //
use std::error::Error;
pub fn parse_numeric(fperm: u32, mut mode: &str) -> Result<u32, String> { pub fn parse_numeric(fperm: u32, mut mode: &str) -> Result<u32, String> {
let (op, pos) = parse_op(mode, Some('='))?; let (op, pos) = parse_op(mode, Some('='))?;
mode = mode[pos..].trim_start_matches('0'); mode = mode[pos..].trim_start_matches('0');
@ -21,7 +19,7 @@ pub fn parse_numeric(fperm: u32, mut mode: &str) -> Result<u32, String> {
'=' => change, '=' => change,
_ => unreachable!(), _ => unreachable!(),
}), }),
Err(err) => Err(err.description().to_owned()), Err(err) => Err(err.to_string()),
} }
} }
} }

View file

@ -7,7 +7,6 @@
// that was distributed with this source code. // that was distributed with this source code.
// //
use super::libc;
use libc::{c_int, gid_t, pid_t, uid_t}; use libc::{c_int, gid_t, pid_t, uid_t};
use std::fmt; use std::fmt;
use std::io; use std::io;

View file

@ -31,7 +31,6 @@
//! } //! }
//! ``` //! ```
use super::libc;
pub extern crate time; pub extern crate time;
use self::time::{Timespec, Tm}; use self::time::{Timespec, Tm};
@ -111,8 +110,6 @@ mod ut {
#[cfg(target_os = "freebsd")] #[cfg(target_os = "freebsd")]
mod ut { mod ut {
use super::libc;
pub static DEFAULT_FILE: &str = ""; pub static DEFAULT_FILE: &str = "";
pub const UT_LINESIZE: usize = 16; pub const UT_LINESIZE: usize = 16;

View file

@ -1,4 +1,4 @@
use crate::zero_copy::RawObject; use crate::features::zero_copy::RawObject;
use std::io::{self, Write}; use std::io::{self, Write};

View file

@ -9,9 +9,9 @@ use nix::sys::uio::IoVec;
use nix::unistd::pipe; use nix::unistd::pipe;
use platform_info::{PlatformInfo, Uname}; use platform_info::{PlatformInfo, Uname};
use crate::zero_copy::{FromRawObject, RawObject}; use crate::features::zero_copy::{FromRawObject, RawObject};
lazy_static! { lazy_static::lazy_static! {
static ref IN_WSL: bool = { static ref IN_WSL: bool = {
let info = PlatformInfo::new().unwrap(); let info = PlatformInfo::new().unwrap();
info.release().contains("Microsoft") info.release().contains("Microsoft")

View file

@ -1,6 +1,6 @@
use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
use crate::zero_copy::{AsRawObject, FromRawObject}; use crate::features::zero_copy::{AsRawObject, FromRawObject};
pub type RawObject = RawFd; pub type RawObject = RawFd;

View file

@ -1,6 +1,6 @@
use std::os::windows::io::{AsRawHandle, FromRawHandle, RawHandle}; use std::os::windows::io::{AsRawHandle, FromRawHandle, RawHandle};
use crate::zero_copy::{AsRawObject, FromRawObject}; use crate::features::zero_copy::{AsRawObject, FromRawObject};
pub type RawObject = RawHandle; pub type RawObject = RawHandle;

75
src/uucore/src/lib/lib.rs Normal file
View file

@ -0,0 +1,75 @@
// library ~ (core/bundler file)
// spell-checker:ignore (uucore/uutils) coreopts libc musl utmpx uucore uutils winapi
//## external crates
extern crate wild;
// * feature-gated external crates
#[cfg(feature = "failure")]
extern crate failure;
#[cfg(feature = "failure_derive")]
extern crate failure_derive;
#[cfg(all(feature = "lazy_static", target_os = "linux"))]
extern crate lazy_static;
#[cfg(feature = "nix")]
extern crate nix;
#[cfg(feature = "platform-info")]
extern crate platform_info;
// * feature-gated external crates (re-shared as public internal modules)
#[cfg(feature = "libc")]
pub extern crate libc;
#[cfg(feature = "winapi")]
pub extern crate winapi;
//## internal modules
mod macros; // crate macros (macro_rules-type; exported to `crate::...`)
mod features; // feature-gated code modules
mod mods; // core cross-platform modules
// * cross-platform modules
pub use mods::coreopts;
pub use mods::panic;
// * feature-gated modules
#[cfg(feature = "encoding")]
pub use features::encoding;
#[cfg(feature = "fs")]
pub use features::fs;
#[cfg(feature = "parse_time")]
pub use features::parse_time;
#[cfg(feature = "zero-copy")]
pub use features::zero_copy;
// * (platform-specific) feature-gated modules
// ** non-windows
#[cfg(all(not(windows), feature = "mode"))]
pub use features::mode;
// ** unix-only
#[cfg(all(unix, feature = "entries"))]
pub use features::entries;
#[cfg(all(unix, feature = "process"))]
pub use features::process;
#[cfg(all(unix, not(target_os = "fuchsia"), feature = "signals"))]
pub use features::signals;
#[cfg(all(
unix,
not(target_os = "fuchsia"),
not(target_env = "musl"),
feature = "utmpx"
))]
pub use features::utmpx;
// ** windows-only
#[cfg(all(windows, feature = "wide"))]
pub use features::wide;
//## core functions
// args() ...
pub fn args() -> impl Iterator<Item = String> {
wild::args()
}

View file

@ -7,6 +7,40 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
// #[macro_export]
// macro_rules! main { ($($arg:tt)+) => ({
// extern crate uu_arch;
// use std::io::Write;
// use uu_arch::uumain;
// fn main() {
// uucore::panic::install_sigpipe_hook();
// let code = uumain(uucore::args().collect());
// // Since stdout is line-buffered by default, we need to ensure any pending
// // writes are flushed before exiting. Ideally, this should be enforced by
// // each utility.
// //
// // See: https://github.com/rust-lang/rust/issues/23818
// //
// std::io::stdout().flush().expect("could not flush stdout");
// std::process::exit(code);
// }
// })}
// extern crate proc_macro;
// use proc_macro::TokenStream;
// #[proc_macro_attribute]
// pub fn hello(attr: TokenStream, item: TokenStream) -> TokenStream {
// let result = quote! {
// fn main() {
// uucore::panic::install_sigpipe_hook();
// std::io::stdout().flush().expect("could not flush stdout");
// std::process::exit(code);
// }
// };
// }
#[macro_export] #[macro_export]
macro_rules! executable( macro_rules! executable(
() => ({ () => ({

View file

@ -0,0 +1,6 @@
// mods ~ cross-platforms modules (core/bundler file)
// spell-checker:ignore (uucore/uutils) coreopts libc musl utmpx uucore uutils winapi
pub mod coreopts;
pub mod panic;

View file

@ -109,10 +109,10 @@ impl<'a> CoreOptions<'a> {
usage_str, usage_str,
self.help_text.long_help self.help_text.long_help
); );
exit!(0); crate::exit!(0);
} else if matches.opt_present("version") { } else if matches.opt_present("version") {
println!("{} {}", self.help_text.name, self.help_text.version); println!("{} {}", self.help_text.name, self.help_text.version);
exit!(0); crate::exit!(0);
} }
matches matches
} }