mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
fix wc due from_utf8 changes and resolve warnings
This commit is contained in:
parent
3e2c58a562
commit
5581cd079b
1 changed files with 18 additions and 15 deletions
33
wc/wc.rs
33
wc/wc.rs
|
@ -13,7 +13,7 @@ extern mod extra;
|
||||||
|
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::io::{print, stdin, stderr, File, result, BufferedReader};
|
use std::io::{print, stdin, stderr, File, result, BufferedReader};
|
||||||
use std::str::from_utf8_opt;
|
use std::str::from_utf8;
|
||||||
use extra::getopts::{groups, Matches};
|
use extra::getopts::{groups, Matches};
|
||||||
|
|
||||||
struct Result {
|
struct Result {
|
||||||
|
@ -58,7 +58,7 @@ fn main() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matches.opt_present("version")) {
|
if matches.opt_present("version") {
|
||||||
println!("wc 1.0.0");
|
println!("wc 1.0.0");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -111,14 +111,14 @@ pub fn wc(files: ~[~str], matches: &Matches) {
|
||||||
match result(| | reader.read_until(LF)) {
|
match result(| | reader.read_until(LF)) {
|
||||||
Ok(Some(raw_line)) => {
|
Ok(Some(raw_line)) => {
|
||||||
// GNU 'wc' only counts lines that end in LF as lines
|
// GNU 'wc' only counts lines that end in LF as lines
|
||||||
if (raw_line.iter().last().unwrap() == &LF) {
|
if raw_line.iter().last().unwrap() == &LF {
|
||||||
line_count += 1;
|
line_count += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte_count += raw_line.iter().len();
|
byte_count += raw_line.iter().len();
|
||||||
|
|
||||||
// try and convert the bytes to UTF-8 first
|
// try and convert the bytes to UTF-8 first
|
||||||
match from_utf8_opt(raw_line) {
|
match from_utf8(raw_line) {
|
||||||
Some(line) => {
|
Some(line) => {
|
||||||
word_count += line.words().len();
|
word_count += line.words().len();
|
||||||
current_char_count = line.chars().len();
|
current_char_count = line.chars().len();
|
||||||
|
@ -138,7 +138,7 @@ pub fn wc(files: ~[~str], matches: &Matches) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current_char_count > longest_line_length) {
|
if current_char_count > longest_line_length {
|
||||||
// we subtract one here because `line.iter().len()` includes the LF
|
// we subtract one here because `line.iter().len()` includes the LF
|
||||||
// matches GNU 'wc' behaviour
|
// matches GNU 'wc' behaviour
|
||||||
longest_line_length = current_char_count - 1;
|
longest_line_length = current_char_count - 1;
|
||||||
|
@ -163,7 +163,7 @@ pub fn wc(files: ~[~str], matches: &Matches) {
|
||||||
total_char_count += char_count;
|
total_char_count += char_count;
|
||||||
total_byte_count += byte_count;
|
total_byte_count += byte_count;
|
||||||
|
|
||||||
if (longest_line_length > total_longest_line_length) {
|
if longest_line_length > total_longest_line_length {
|
||||||
total_longest_line_length = longest_line_length;
|
total_longest_line_length = longest_line_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,38 +175,41 @@ pub fn wc(files: ~[~str], matches: &Matches) {
|
||||||
print_stats(&result.filename, result.lines, result.words, result.chars, result.bytes, result.max_line_length, matches, max_str_len);
|
print_stats(&result.filename, result.lines, result.words, result.chars, result.bytes, result.max_line_length, matches, max_str_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (files.len() > 1) {
|
if files.len() > 1 {
|
||||||
print_stats(&~"total", total_line_count, total_word_count, total_char_count, total_byte_count, total_longest_line_length, matches, max_str_len);
|
print_stats(&~"total", total_line_count, total_word_count, total_char_count, total_byte_count, total_longest_line_length, matches, max_str_len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_stats(filename: &~str, line_count: uint, word_count: uint, char_count: uint,
|
fn print_stats(filename: &~str, line_count: uint, word_count: uint, char_count: uint,
|
||||||
byte_count: uint, longest_line_length: uint, matches: &Matches, max_str_len: uint) {
|
byte_count: uint, longest_line_length: uint, matches: &Matches, max_str_len: uint) {
|
||||||
if (matches.opt_present("lines")) {
|
if matches.opt_present("lines") {
|
||||||
print!("{:1$}", line_count, max_str_len);
|
print!("{:1$}", line_count, max_str_len);
|
||||||
}
|
}
|
||||||
if (matches.opt_present("words")) {
|
if matches.opt_present("words") {
|
||||||
print!("{:1$}", word_count, max_str_len);
|
print!("{:1$}", word_count, max_str_len);
|
||||||
}
|
}
|
||||||
if (matches.opt_present("bytes")) {
|
if matches.opt_present("bytes") {
|
||||||
print!("{:1$}", byte_count, max_str_len + 1);
|
print!("{:1$}", byte_count, max_str_len + 1);
|
||||||
}
|
}
|
||||||
if (matches.opt_present("chars")) {
|
if matches.opt_present("chars") {
|
||||||
print!("{:1$}", char_count, max_str_len);
|
print!("{:1$}", char_count, max_str_len);
|
||||||
}
|
}
|
||||||
if (matches.opt_present("max-line-length")) {
|
if matches.opt_present("max-line-length") {
|
||||||
print!("{:1$}", longest_line_length, max_str_len);
|
print!("{:1$}", longest_line_length, max_str_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
// defaults
|
// defaults
|
||||||
if (!matches.opt_present("bytes") && !matches.opt_present("chars") && !matches.opt_present("lines")
|
if !matches.opt_present("bytes")
|
||||||
&& !matches.opt_present("words") && !matches.opt_present("max-line-length")) {
|
&& !matches.opt_present("chars")
|
||||||
|
&& !matches.opt_present("lines")
|
||||||
|
&& !matches.opt_present("words")
|
||||||
|
&& !matches.opt_present("max-line-length") {
|
||||||
print!("{:1$}", line_count, max_str_len);
|
print!("{:1$}", line_count, max_str_len);
|
||||||
print!("{:1$}", word_count, max_str_len + 1);
|
print!("{:1$}", word_count, max_str_len + 1);
|
||||||
print!("{:1$}", byte_count, max_str_len + 1);
|
print!("{:1$}", byte_count, max_str_len + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*filename != ~"-") {
|
if *filename != ~"-" {
|
||||||
println!(" {}", *filename);
|
println!(" {}", *filename);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue