mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-30 04:27:45 +00:00
Merge pull request #796 from ebfe/unexpand-stable
expand, unexpand: fix build on stable
This commit is contained in:
commit
a88fdf6afe
5 changed files with 33 additions and 10 deletions
|
@ -40,7 +40,7 @@ generic = [
|
||||||
"dirname",
|
"dirname",
|
||||||
"echo",
|
"echo",
|
||||||
"env",
|
"env",
|
||||||
"expand", # skip_on_beta
|
"expand",
|
||||||
"expr",
|
"expr",
|
||||||
"factor",
|
"factor",
|
||||||
"false",
|
"false",
|
||||||
|
@ -79,7 +79,7 @@ generic = [
|
||||||
"true",
|
"true",
|
||||||
"truncate",
|
"truncate",
|
||||||
"tsort",
|
"tsort",
|
||||||
"unexpand", # skip_on_beta
|
"unexpand",
|
||||||
"uniq",
|
"uniq",
|
||||||
"wc",
|
"wc",
|
||||||
"whoami",
|
"whoami",
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#![crate_name = "uu_expand"]
|
#![crate_name = "uu_expand"]
|
||||||
#![feature(unicode)]
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the uutils coreutils package.
|
* This file is part of the uutils coreutils package.
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
|
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
extern crate rustc_unicode;
|
|
||||||
extern crate unicode_width;
|
extern crate unicode_width;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
@ -24,7 +22,6 @@ use std::fs::File;
|
||||||
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
|
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
|
||||||
use std::iter::repeat;
|
use std::iter::repeat;
|
||||||
use std::str::from_utf8;
|
use std::str::from_utf8;
|
||||||
use rustc_unicode::str::utf8_char_width;
|
|
||||||
use unicode_width::UnicodeWidthChar;
|
use unicode_width::UnicodeWidthChar;
|
||||||
|
|
||||||
static NAME: &'static str = "expand";
|
static NAME: &'static str = "expand";
|
||||||
|
@ -175,7 +172,7 @@ fn expand(options: Options) {
|
||||||
|
|
||||||
while byte < buf.len() {
|
while byte < buf.len() {
|
||||||
let (ctype, cwidth, nbytes) = if options.uflag {
|
let (ctype, cwidth, nbytes) = if options.uflag {
|
||||||
let nbytes = utf8_char_width(buf[byte]);
|
let nbytes = uucore::utf8::utf8_char_width(buf[byte]);
|
||||||
|
|
||||||
if byte + nbytes > buf.len() {
|
if byte + nbytes > buf.len() {
|
||||||
// don't overrun buffer because of invalid UTF-8
|
// don't overrun buffer because of invalid UTF-8
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#![crate_name = "uu_unexpand"]
|
#![crate_name = "uu_unexpand"]
|
||||||
#![feature(unicode)]
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the uutils coreutils package.
|
* This file is part of the uutils coreutils package.
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
|
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
extern crate rustc_unicode;
|
|
||||||
extern crate unicode_width;
|
extern crate unicode_width;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
@ -23,7 +21,6 @@ extern crate uucore;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Stdout, Write};
|
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Stdout, Write};
|
||||||
use std::str::from_utf8;
|
use std::str::from_utf8;
|
||||||
use rustc_unicode::str::utf8_char_width;
|
|
||||||
use unicode_width::UnicodeWidthChar;
|
use unicode_width::UnicodeWidthChar;
|
||||||
|
|
||||||
static NAME: &'static str = "unexpand";
|
static NAME: &'static str = "unexpand";
|
||||||
|
@ -208,7 +205,7 @@ fn unexpand(options: Options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let (ctype, cwidth, nbytes) = if options.uflag {
|
let (ctype, cwidth, nbytes) = if options.uflag {
|
||||||
let nbytes = utf8_char_width(buf[byte]);
|
let nbytes = uucore::utf8::utf8_char_width(buf[byte]);
|
||||||
|
|
||||||
// figure out how big the next char is, if it's UTF-8
|
// figure out how big the next char is, if it's UTF-8
|
||||||
if byte + nbytes > buf.len() {
|
if byte + nbytes > buf.len() {
|
||||||
|
|
|
@ -7,6 +7,7 @@ mod macros;
|
||||||
|
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
pub mod parse_time;
|
pub mod parse_time;
|
||||||
|
pub mod utf8;
|
||||||
|
|
||||||
#[cfg(unix)] pub mod c_types;
|
#[cfg(unix)] pub mod c_types;
|
||||||
#[cfg(unix)] pub mod process;
|
#[cfg(unix)] pub mod process;
|
||||||
|
|
28
src/uucore/utf8.rs
Normal file
28
src/uucore/utf8.rs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* This is taken from the rust_unicode crate. Remove once 'unicode' becomes stable */
|
||||||
|
|
||||||
|
// https://tools.ietf.org/html/rfc3629
|
||||||
|
static UTF8_CHAR_WIDTH: [u8; 256] = [
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x1F
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x3F
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x5F
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||||
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x7F
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x9F
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xBF
|
||||||
|
0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||||
|
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 0xDF
|
||||||
|
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 0xEF
|
||||||
|
4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0, // 0xFF
|
||||||
|
];
|
||||||
|
|
||||||
|
/// Given a first byte, determine how many bytes are in this UTF-8 character
|
||||||
|
#[inline]
|
||||||
|
pub fn utf8_char_width(b: u8) -> usize {
|
||||||
|
return UTF8_CHAR_WIDTH[b as usize] as usize;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue