mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
Merge pull request #142 from alan-andrade/master-fix
Fix master by using Vec and adjusting
This commit is contained in:
commit
ce6b80001f
18 changed files with 38 additions and 38 deletions
|
@ -76,10 +76,10 @@ fn main() {
|
||||||
},
|
},
|
||||||
None => 76
|
None => 76
|
||||||
};
|
};
|
||||||
let mut input = if matches.free.is_empty() || matches.free[0] == ~"-" {
|
let mut input = if matches.free.is_empty() || matches.free.get(0).as_slice() == "-" {
|
||||||
~stdin() as ~Reader
|
~stdin() as ~Reader
|
||||||
} else {
|
} else {
|
||||||
let path = Path::new(matches.free[0]);
|
let path = Path::new(matches.free.get(0).clone());
|
||||||
~File::open(&path) as ~Reader
|
~File::open(&path) as ~Reader
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ extern crate getopts;
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::io::{print, File};
|
use std::io::{print, File};
|
||||||
use std::io::stdio::{stdout_raw, stdin_raw};
|
use std::io::stdio::{stdout_raw, stdin_raw};
|
||||||
use std::io::{BufferedReader, BufferedWriter};
|
use std::io::{BufferedWriter};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args = os::args();
|
let args = os::args();
|
||||||
|
@ -68,7 +68,7 @@ fn main() {
|
||||||
let squeeze_blank = matches.opt_present("squeeze-blank");
|
let squeeze_blank = matches.opt_present("squeeze-blank");
|
||||||
let mut files = matches.free;
|
let mut files = matches.free;
|
||||||
if files.is_empty() {
|
if files.is_empty() {
|
||||||
files = ~[~"-"];
|
files = vec!(~"-");
|
||||||
}
|
}
|
||||||
|
|
||||||
exec(files, number_mode, show_nonprint, show_ends, show_tabs, squeeze_blank);
|
exec(files, number_mode, show_nonprint, show_ends, show_tabs, squeeze_blank);
|
||||||
|
@ -96,7 +96,7 @@ fn is_newline_char(byte: u8) -> bool {
|
||||||
byte == LF
|
byte == LF
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exec(files: ~[~str], number: NumberingMode, show_nonprint: bool, show_ends: bool, show_tabs: bool, squeeze_blank: bool) {
|
pub fn exec(files: Vec<~str>, number: NumberingMode, show_nonprint: bool, show_ends: bool, show_tabs: bool, squeeze_blank: bool) {
|
||||||
|
|
||||||
if NumberNone != number || show_nonprint || show_ends || show_tabs || squeeze_blank {
|
if NumberNone != number || show_nonprint || show_ends || show_tabs || squeeze_blank {
|
||||||
let mut counter: uint = 1;
|
let mut counter: uint = 1;
|
||||||
|
|
|
@ -10,7 +10,7 @@ use std::libc::{
|
||||||
getgroups
|
getgroups
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::vec;
|
use std::vec::Vec;
|
||||||
|
|
||||||
use std::ptr::read;
|
use std::ptr::read;
|
||||||
use std::str::raw::from_c_str;
|
use std::str::raw::from_c_str;
|
||||||
|
@ -54,9 +54,9 @@ extern {
|
||||||
pub fn getgrgid(gid: uid_t) -> *c_group;
|
pub fn getgrgid(gid: uid_t) -> *c_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_pw_from_args(free: &~[~str]) -> Option<c_passwd> {
|
pub fn get_pw_from_args(free: &Vec<~str>) -> Option<c_passwd> {
|
||||||
if free.len() == 1 {
|
if free.len() == 1 {
|
||||||
let username = free[0].clone();
|
let username = free.get(0).clone();
|
||||||
|
|
||||||
// Passed user as id
|
// Passed user as id
|
||||||
if username.chars().all(|c| c.is_digit()) {
|
if username.chars().all(|c| c.is_digit()) {
|
||||||
|
@ -88,7 +88,7 @@ pub fn get_pw_from_args(free: &~[~str]) -> Option<c_passwd> {
|
||||||
static NGROUPS: i32 = 20;
|
static NGROUPS: i32 = 20;
|
||||||
|
|
||||||
pub fn group(possible_pw: Option<c_passwd>, nflag: bool) {
|
pub fn group(possible_pw: Option<c_passwd>, nflag: bool) {
|
||||||
let mut groups = vec::with_capacity(NGROUPS as uint);
|
let mut groups = Vec::with_capacity(NGROUPS as uint);
|
||||||
let mut ngroups;
|
let mut ngroups;
|
||||||
|
|
||||||
if possible_pw.is_some() {
|
if possible_pw.is_some() {
|
||||||
|
|
2
du/du.rs
2
du/du.rs
|
@ -213,7 +213,7 @@ ers of 1000).",
|
||||||
separate_dirs: matches.opt_present("S"),
|
separate_dirs: matches.opt_present("S"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let strs = if matches.free.is_empty() {~[~"./"]} else {matches.free.clone()};
|
let strs = if matches.free.is_empty() {vec!(~"./")} else {matches.free.clone()};
|
||||||
|
|
||||||
let options_arc = Arc::new(options);
|
let options_arc = Arc::new(options);
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
|
|
||||||
use std::{os,libc,vec,str};
|
use std::{os,libc,str};
|
||||||
use getopts::{optflag, getopts, usage};
|
use getopts::{optflag, getopts, usage};
|
||||||
|
|
||||||
extern {
|
extern {
|
||||||
|
@ -78,7 +78,7 @@ fn help_menu(program: &str, options: &[getopts::OptGroup]) {
|
||||||
|
|
||||||
fn xgethostname() -> ~str {
|
fn xgethostname() -> ~str {
|
||||||
let namelen = 256u;
|
let namelen = 256u;
|
||||||
let mut name = vec::from_elem(namelen, 0u8);
|
let mut name = Vec::from_elem(namelen, 0u8);
|
||||||
|
|
||||||
let err = unsafe {
|
let err = unsafe {
|
||||||
gethostname (name.as_mut_ptr() as *libc::c_char,
|
gethostname (name.as_mut_ptr() as *libc::c_char,
|
||||||
|
|
4
id/id.rs
4
id/id.rs
|
@ -17,7 +17,7 @@
|
||||||
#[feature(macro_rules)];
|
#[feature(macro_rules)];
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
|
|
||||||
use std::{libc, os, vec};
|
use std::{libc, os};
|
||||||
use std::ptr::read;
|
use std::ptr::read;
|
||||||
use std::libc::{
|
use std::libc::{
|
||||||
c_char,
|
c_char,
|
||||||
|
@ -318,7 +318,7 @@ fn id_print(possible_pw: Option<c_passwd>,
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut ngroups;
|
let mut ngroups;
|
||||||
let mut groups = vec::with_capacity(NGROUPS as uint);
|
let mut groups = Vec::with_capacity(NGROUPS as uint);
|
||||||
|
|
||||||
if use_ggl && possible_pw.is_some() {
|
if use_ggl && possible_pw.is_some() {
|
||||||
ngroups = NGROUPS;
|
ngroups = NGROUPS;
|
||||||
|
|
|
@ -28,7 +28,7 @@ static VERSION: &'static str = "1.0.0";
|
||||||
*/
|
*/
|
||||||
fn main() {
|
fn main() {
|
||||||
let args = os::args();
|
let args = os::args();
|
||||||
|
|
||||||
let opts = ~[
|
let opts = ~[
|
||||||
// Linux-specific options, not implemented
|
// Linux-specific options, not implemented
|
||||||
// getopts::optflag("Z", "context", "set SELinux secutiry context" +
|
// getopts::optflag("Z", "context", "set SELinux secutiry context" +
|
||||||
|
@ -91,8 +91,8 @@ fn print_help(opts: &[getopts::OptGroup]) {
|
||||||
/**
|
/**
|
||||||
* Create the list of new directories
|
* Create the list of new directories
|
||||||
*/
|
*/
|
||||||
fn exec(dirs: ~[~str], mk_parents: bool, mode: u32, verbose: bool) {
|
fn exec(dirs: Vec<~str>, mk_parents: bool, mode: u32, verbose: bool) {
|
||||||
let mut parent_dirs: ~[~str] = ~[];
|
let mut parent_dirs = Vec::new();
|
||||||
if mk_parents {
|
if mk_parents {
|
||||||
for dir in dirs.iter() {
|
for dir in dirs.iter() {
|
||||||
let path = Path::new((*dir).clone());
|
let path = Path::new((*dir).clone());
|
||||||
|
|
|
@ -55,7 +55,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn paste(filenames: ~[~str], serial: bool, delimiters: ~str) {
|
fn paste(filenames: Vec<~str>, serial: bool, delimiters: ~str) {
|
||||||
let mut files: ~[io::BufferedReader<io::File>] = filenames.move_iter().map(|name|
|
let mut files: ~[io::BufferedReader<io::File>] = filenames.move_iter().map(|name|
|
||||||
io::BufferedReader::new(crash_if_err!(1, io::File::open(&Path::new(name))))
|
io::BufferedReader::new(crash_if_err!(1, io::File::open(&Path::new(name))))
|
||||||
).collect();
|
).collect();
|
||||||
|
@ -79,18 +79,18 @@ fn paste(filenames: ~[~str], serial: bool, delimiters: ~str) {
|
||||||
println!("{}", output);
|
println!("{}", output);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let mut eof = std::vec::from_elem(files.len(), false);
|
let mut eof = Vec::from_elem(files.len(), false);
|
||||||
loop {
|
loop {
|
||||||
let mut output = ~"";
|
let mut output = ~"";
|
||||||
let mut eof_count = 0;
|
let mut eof_count = 0;
|
||||||
for (i, file) in files.mut_iter().enumerate() {
|
for (i, file) in files.mut_iter().enumerate() {
|
||||||
if eof[i] {
|
if *eof.get(i) {
|
||||||
eof_count += 1;
|
eof_count += 1;
|
||||||
} else {
|
} else {
|
||||||
match file.read_line() {
|
match file.read_line() {
|
||||||
Ok(line) => output = output + line.slice_to(line.len() - 1),
|
Ok(line) => output = output + line.slice_to(line.len() - 1),
|
||||||
Err(f) => if f.kind == io::EndOfFile {
|
Err(f) => if f.kind == io::EndOfFile {
|
||||||
eof[i] = true;
|
*eof.get_mut(i) = true;
|
||||||
eof_count += 1;
|
eof_count += 1;
|
||||||
} else {
|
} else {
|
||||||
crash!(1, "{}", f.to_str());
|
crash!(1, "{}", f.to_str());
|
||||||
|
|
|
@ -58,7 +58,7 @@ fn main() {
|
||||||
exec(matches.free, separator);
|
exec(matches.free, separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exec(args: ~[~str], separator: &str) {
|
pub fn exec(args: Vec<~str>, separator: &str) {
|
||||||
if args.is_empty() {
|
if args.is_empty() {
|
||||||
let vars = os::env();
|
let vars = os::env();
|
||||||
for (env_var, value) in vars.move_iter() {
|
for (env_var, value) in vars.move_iter() {
|
||||||
|
|
4
rm/rm.rs
4
rm/rm.rs
|
@ -119,7 +119,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: implement one-file-system
|
// TODO: implement one-file-system
|
||||||
fn remove(files: &[~str], force: bool, interactive: InteractiveMode, one_fs: bool, preserve_root: bool, recursive: bool, dir: bool, verbose: bool) {
|
fn remove(files: Vec<~str>, force: bool, interactive: InteractiveMode, one_fs: bool, preserve_root: bool, recursive: bool, dir: bool, verbose: bool) {
|
||||||
for filename in files.iter() {
|
for filename in files.iter() {
|
||||||
let file = Path::new(filename.to_owned());
|
let file = Path::new(filename.to_owned());
|
||||||
if file.exists() {
|
if file.exists() {
|
||||||
|
@ -131,7 +131,7 @@ fn remove(files: &[~str], force: bool, interactive: InteractiveMode, one_fs: boo
|
||||||
crash!(1, "{}", f.to_str());
|
crash!(1, "{}", f.to_str());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
remove(walk_dir.map(|x| x.as_str().unwrap().to_owned()).to_owned_vec(), force, interactive, one_fs, preserve_root, recursive, dir, verbose);
|
remove(walk_dir.map(|x| x.as_str().unwrap().to_owned()).collect(), force, interactive, one_fs, preserve_root, recursive, dir, verbose);
|
||||||
remove_dir(&file, *filename, interactive, verbose);
|
remove_dir(&file, *filename, interactive, verbose);
|
||||||
} else if dir && (*filename != ~"/" || !preserve_root) {
|
} else if dir && (*filename != ~"/" || !preserve_root) {
|
||||||
remove_dir(&file, *filename, interactive, verbose);
|
remove_dir(&file, *filename, interactive, verbose);
|
||||||
|
|
|
@ -60,7 +60,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove(dirs: &[~str], ignore: bool, parents: bool, verbose: bool) {
|
fn remove(dirs: Vec<~str>, ignore: bool, parents: bool, verbose: bool) {
|
||||||
for dir in dirs.iter() {
|
for dir in dirs.iter() {
|
||||||
let path = Path::new(dir.to_owned());
|
let path = Path::new(dir.to_owned());
|
||||||
if path.exists() {
|
if path.exists() {
|
||||||
|
|
|
@ -63,7 +63,7 @@ fn main() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let first = if matches.free.len() > 1 {
|
let first = if matches.free.len() > 1 {
|
||||||
match parse_float(matches.free[0]) {
|
match parse_float(matches.free.get(0).as_slice()) {
|
||||||
Ok(n) => n,
|
Ok(n) => n,
|
||||||
Err(s) => { show_error!(1, "{:s}", s); return; }
|
Err(s) => { show_error!(1, "{:s}", s); return; }
|
||||||
}
|
}
|
||||||
|
@ -71,14 +71,14 @@ fn main() {
|
||||||
1.0
|
1.0
|
||||||
};
|
};
|
||||||
let step = if matches.free.len() > 2 {
|
let step = if matches.free.len() > 2 {
|
||||||
match parse_float(matches.free[1]) {
|
match parse_float(matches.free.get(1).as_slice()) {
|
||||||
Ok(n) => n,
|
Ok(n) => n,
|
||||||
Err(s) => { show_error!(1, "{:s}", s); return; }
|
Err(s) => { show_error!(1, "{:s}", s); return; }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
1.0
|
1.0
|
||||||
};
|
};
|
||||||
let last = match parse_float(matches.free[matches.free.len()-1]) {
|
let last = match parse_float(matches.free.get(matches.free.len()-1).as_slice()) {
|
||||||
Ok(n) => n,
|
Ok(n) => n,
|
||||||
Err(s) => { show_error!(1, "{:s}", s); return; }
|
Err(s) => { show_error!(1, "{:s}", s); return; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,7 +62,7 @@ specified by the sum of their values.", opts));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sleep(args: &[~str]) {
|
fn sleep(args: Vec<~str>) {
|
||||||
let sleep_time = args.iter().fold(0.0, |result, arg| {
|
let sleep_time = args.iter().fold(0.0, |result, arg| {
|
||||||
let suffix_time = match match_suffix(unsafe { cast::transmute(arg) }) {
|
let suffix_time = match match_suffix(unsafe { cast::transmute(arg) }) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
|
|
|
@ -63,7 +63,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tac(filenames: ~[~str], before: bool, _: bool, separator: ~str) {
|
fn tac(filenames: Vec<~str>, before: bool, _: bool, separator: ~str) {
|
||||||
for filename in filenames.move_iter() {
|
for filename in filenames.move_iter() {
|
||||||
let mut file = io::BufferedReader::new(
|
let mut file = io::BufferedReader::new(
|
||||||
crash_if_err!(1, io::File::open(&Path::new(filename))));
|
crash_if_err!(1, io::File::open(&Path::new(filename))));
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct Options {
|
||||||
append: bool,
|
append: bool,
|
||||||
ignore_interrupts: bool,
|
ignore_interrupts: bool,
|
||||||
print_and_exit: Option<~str>,
|
print_and_exit: Option<~str>,
|
||||||
files: ~[Path]
|
files: ~Vec<Path>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn options(args: &[~str]) -> Result<Options, ()> {
|
fn options(args: &[~str]) -> Result<Options, ()> {
|
||||||
|
@ -57,7 +57,7 @@ fn options(args: &[~str]) -> Result<Options, ()> {
|
||||||
let help = format!("{}\n\nUsage:\n {} {}\n\n{}\n{}",
|
let help = format!("{}\n\nUsage:\n {} {}\n\n{}\n{}",
|
||||||
version, program, arguments, usage(brief, opts),
|
version, program, arguments, usage(brief, opts),
|
||||||
comment);
|
comment);
|
||||||
let names = m.free + ~[~"-"];
|
let names = std::vec::append_one(m.free.clone(), ~"-");
|
||||||
let to_print = if m.opt_present("help") { Some(help) }
|
let to_print = if m.opt_present("help") { Some(help) }
|
||||||
else if m.opt_present("version") { Some(version) }
|
else if m.opt_present("version") { Some(version) }
|
||||||
else { None };
|
else { None };
|
||||||
|
@ -66,7 +66,7 @@ fn options(args: &[~str]) -> Result<Options, ()> {
|
||||||
append: m.opt_present("append"),
|
append: m.opt_present("append"),
|
||||||
ignore_interrupts: m.opt_present("ignore-interrupts"),
|
ignore_interrupts: m.opt_present("ignore-interrupts"),
|
||||||
print_and_exit: to_print,
|
print_and_exit: to_print,
|
||||||
files: names.map(|name| Path::new(name.clone()))
|
files: ~names.iter().map(|name| Path::new(name.clone())).collect()
|
||||||
})
|
})
|
||||||
}).map_err(|message| warn(message))
|
}).map_err(|message| warn(message))
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ fn exec(options: Options) -> Result<(), ()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tee(options: Options) -> Result<(), ()> {
|
fn tee(options: Options) -> Result<(), ()> {
|
||||||
let writers = options.files.map(|path| open(path, options.append));
|
let writers = options.files.iter().map(|path| open(path, options.append)).collect();
|
||||||
let output = &mut MultiWriter::new(writers);
|
let output = &mut MultiWriter::new(writers);
|
||||||
let input = &mut NamedReader { inner: ~stdin() as ~Reader };
|
let input = &mut NamedReader { inner: ~stdin() as ~Reader };
|
||||||
if copy(input, output).is_err() || output.flush().is_err() {
|
if copy(input, output).is_err() || output.flush().is_err() {
|
||||||
|
|
|
@ -107,7 +107,7 @@ file based on its current size:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn truncate(no_create: bool, _: bool, reference: Option<~str>, size: Option<~str>, filenames: ~[~str]) {
|
fn truncate(no_create: bool, _: bool, reference: Option<~str>, size: Option<~str>, filenames: Vec<~str>) {
|
||||||
let (refsize, mode) = match reference {
|
let (refsize, mode) = match reference {
|
||||||
Some(rfilename) => {
|
Some(rfilename) => {
|
||||||
let rfile = match File::open(&Path::new(rfilename.clone())) {
|
let rfile = match File::open(&Path::new(rfilename.clone())) {
|
||||||
|
|
|
@ -77,7 +77,7 @@ fn main() {
|
||||||
|
|
||||||
let mut filename = DEFAULT_FILE;
|
let mut filename = DEFAULT_FILE;
|
||||||
if matches.free.len() > 0 {
|
if matches.free.len() > 0 {
|
||||||
filename = matches.free[0].as_slice();
|
filename = matches.free.get(0).as_slice();
|
||||||
}
|
}
|
||||||
|
|
||||||
exec(filename);
|
exec(filename);
|
||||||
|
|
4
wc/wc.rs
4
wc/wc.rs
|
@ -69,7 +69,7 @@ fn main() {
|
||||||
|
|
||||||
let mut files = matches.free.clone();
|
let mut files = matches.free.clone();
|
||||||
if files.is_empty() {
|
if files.is_empty() {
|
||||||
files = ~[~"-"];
|
files = vec!(~"-");
|
||||||
}
|
}
|
||||||
|
|
||||||
wc(files, &matches);
|
wc(files, &matches);
|
||||||
|
@ -86,7 +86,7 @@ fn is_word_seperator(byte: u8) -> bool {
|
||||||
byte == SPACE || byte == TAB || byte == CR || byte == SYN || byte == FF
|
byte == SPACE || byte == TAB || byte == CR || byte == SYN || byte == FF
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wc(files: ~[~str], matches: &Matches) {
|
pub fn wc(files: Vec<~str>, matches: &Matches) {
|
||||||
let mut total_line_count: uint = 0;
|
let mut total_line_count: uint = 0;
|
||||||
let mut total_word_count: uint = 0;
|
let mut total_word_count: uint = 0;
|
||||||
let mut total_char_count: uint = 0;
|
let mut total_char_count: uint = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue