mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-31 04:57:45 +00:00
Merge pull request #454 from wikol/master
tail: added size suffixes handling
This commit is contained in:
commit
23a4bc2d08
2 changed files with 55 additions and 4 deletions
|
@ -3,8 +3,6 @@ Rudimentary tail implementation.
|
||||||
##Missing features:
|
##Missing features:
|
||||||
|
|
||||||
### Flags with features
|
### Flags with features
|
||||||
* `--bytes` : does not handle size suffixes
|
|
||||||
* `--lines` : does not handle size suffixes
|
|
||||||
* `--max-unchanged-stats` : with `--follow=name`, reopen a FILE which has not changed size after N (default 5) iterations to see if it has been unlinked or renamed (this is the usual case of rotated log files). With inotify, this option is rarely useful.
|
* `--max-unchanged-stats` : with `--follow=name`, reopen a FILE which has not changed size after N (default 5) iterations to see if it has been unlinked or renamed (this is the usual case of rotated log files). With inotify, this option is rarely useful.
|
||||||
* `--pid` : with `-f`, terminate after process ID, PID dies
|
* `--pid` : with `-f`, terminate after process ID, PID dies
|
||||||
* `--quiet` : never output headers giving file names
|
* `--quiet` : never output headers giving file names
|
||||||
|
|
|
@ -89,7 +89,7 @@ pub fn uumain(args: Vec<String>) -> int {
|
||||||
beginning = true;
|
beginning = true;
|
||||||
slice = slice.slice_from(1);
|
slice = slice.slice_from(1);
|
||||||
}
|
}
|
||||||
line_count = match from_str(slice) {
|
line_count = match parse_size(slice) {
|
||||||
Some(m) => m,
|
Some(m) => m,
|
||||||
None => {
|
None => {
|
||||||
show_error!("invalid number of lines ({})", slice);
|
show_error!("invalid number of lines ({})", slice);
|
||||||
|
@ -104,7 +104,7 @@ pub fn uumain(args: Vec<String>) -> int {
|
||||||
beginning = true;
|
beginning = true;
|
||||||
slice = slice.slice_from(1);
|
slice = slice.slice_from(1);
|
||||||
}
|
}
|
||||||
byte_count = match from_str(slice) {
|
byte_count = match parse_size(slice) {
|
||||||
Some(m) => m,
|
Some(m) => m,
|
||||||
None => {
|
None => {
|
||||||
show_error!("invalid number of bytes ({})", slice);
|
show_error!("invalid number of bytes ({})", slice);
|
||||||
|
@ -148,6 +148,59 @@ pub fn uumain(args: Vec<String>) -> int {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_size(mut size_slice: &str) -> Option<uint> {
|
||||||
|
let mut base =
|
||||||
|
if size_slice.len() > 0 && size_slice.char_at(size_slice.len() - 1) == 'B' {
|
||||||
|
size_slice = size_slice.slice_to(size_slice.len() - 1);
|
||||||
|
1000u
|
||||||
|
} else {
|
||||||
|
1024u
|
||||||
|
};
|
||||||
|
let exponent =
|
||||||
|
if size_slice.len() > 0 {
|
||||||
|
let mut has_suffix = true;
|
||||||
|
let exp = match size_slice.char_at(size_slice.len() - 1) {
|
||||||
|
'K' => 1u,
|
||||||
|
'M' => 2u,
|
||||||
|
'G' => 3u,
|
||||||
|
'T' => 4u,
|
||||||
|
'P' => 5u,
|
||||||
|
'E' => 6u,
|
||||||
|
'Z' => 7u,
|
||||||
|
'Y' => 8u,
|
||||||
|
'b' => {
|
||||||
|
base = 512u;
|
||||||
|
1u
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
has_suffix = false;
|
||||||
|
0u
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if has_suffix {
|
||||||
|
size_slice = size_slice.slice_to(size_slice.len() - 1);
|
||||||
|
}
|
||||||
|
exp
|
||||||
|
} else {
|
||||||
|
0u
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut multiplier = 1u;
|
||||||
|
for _ in range(0u, exponent) {
|
||||||
|
multiplier *= base;
|
||||||
|
}
|
||||||
|
if base == 1000u && exponent == 0u {
|
||||||
|
// sole B is not a valid suffix
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
let value = from_str(size_slice);
|
||||||
|
match value {
|
||||||
|
Some(v) => Some(multiplier * v),
|
||||||
|
None => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// It searches for an option in the form of -123123
|
// It searches for an option in the form of -123123
|
||||||
//
|
//
|
||||||
// In case is found, the options vector will get rid of that object so that
|
// In case is found, the options vector will get rid of that object so that
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue