Rollup merge of #100767 - kadiwa4:escape_ascii, r=jackh726
Remove manual <[u8]>::escape_ascii `@rustbot` label: +C-cleanup
This commit is contained in:
commit
93177758fc
@ -163,12 +163,7 @@ impl LitKind {
|
|||||||
}
|
}
|
||||||
LitKind::Str(symbol, ast::StrStyle::Raw(n)) => (token::StrRaw(n), symbol, None),
|
LitKind::Str(symbol, ast::StrStyle::Raw(n)) => (token::StrRaw(n), symbol, None),
|
||||||
LitKind::ByteStr(ref bytes) => {
|
LitKind::ByteStr(ref bytes) => {
|
||||||
let string = bytes
|
let string = bytes.escape_ascii().to_string();
|
||||||
.iter()
|
|
||||||
.cloned()
|
|
||||||
.flat_map(ascii::escape_default)
|
|
||||||
.map(Into::<char>::into)
|
|
||||||
.collect::<String>();
|
|
||||||
(token::ByteStr, Symbol::intern(&string), None)
|
(token::ByteStr, Symbol::intern(&string), None)
|
||||||
}
|
}
|
||||||
LitKind::Byte(byte) => {
|
LitKind::Byte(byte) => {
|
||||||
|
@ -44,7 +44,7 @@ use std::io::{BufWriter, Write};
|
|||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::process::{ExitStatus, Output, Stdio};
|
use std::process::{ExitStatus, Output, Stdio};
|
||||||
use std::{ascii, char, env, fmt, fs, io, mem, str};
|
use std::{env, fmt, fs, io, mem, str};
|
||||||
|
|
||||||
pub fn ensure_removed(diag_handler: &Handler, path: &Path) {
|
pub fn ensure_removed(diag_handler: &Handler, path: &Path) {
|
||||||
if let Err(e) = fs::remove_file(path) {
|
if let Err(e) = fs::remove_file(path) {
|
||||||
@ -552,14 +552,6 @@ fn link_staticlib<'a>(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn escape_stdout_stderr_string(s: &[u8]) -> String {
|
|
||||||
str::from_utf8(s).map(|s| s.to_owned()).unwrap_or_else(|_| {
|
|
||||||
let mut x = "Non-UTF-8 output: ".to_string();
|
|
||||||
x.extend(s.iter().flat_map(|&b| ascii::escape_default(b)).map(char::from));
|
|
||||||
x
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Use `thorin` (rust implementation of a dwarf packaging utility) to link DWARF objects into a
|
/// Use `thorin` (rust implementation of a dwarf packaging utility) to link DWARF objects into a
|
||||||
/// DWARF package.
|
/// DWARF package.
|
||||||
fn link_dwarf_object<'a>(
|
fn link_dwarf_object<'a>(
|
||||||
@ -866,7 +858,7 @@ fn link_natively<'a>(
|
|||||||
if !prog.status.success() {
|
if !prog.status.success() {
|
||||||
let mut output = prog.stderr.clone();
|
let mut output = prog.stderr.clone();
|
||||||
output.extend_from_slice(&prog.stdout);
|
output.extend_from_slice(&prog.stdout);
|
||||||
let escaped_output = escape_stdout_stderr_string(&output);
|
let escaped_output = escape_string(&output);
|
||||||
let mut err = sess.struct_err(&format!(
|
let mut err = sess.struct_err(&format!(
|
||||||
"linking with `{}` failed: {}",
|
"linking with `{}` failed: {}",
|
||||||
linker_path.display(),
|
linker_path.display(),
|
||||||
@ -934,8 +926,8 @@ fn link_natively<'a>(
|
|||||||
|
|
||||||
sess.abort_if_errors();
|
sess.abort_if_errors();
|
||||||
}
|
}
|
||||||
info!("linker stderr:\n{}", escape_stdout_stderr_string(&prog.stderr));
|
info!("linker stderr:\n{}", escape_string(&prog.stderr));
|
||||||
info!("linker stdout:\n{}", escape_stdout_stderr_string(&prog.stdout));
|
info!("linker stdout:\n{}", escape_string(&prog.stdout));
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let linker_not_found = e.kind() == io::ErrorKind::NotFound;
|
let linker_not_found = e.kind() == io::ErrorKind::NotFound;
|
||||||
@ -1065,11 +1057,10 @@ fn strip_symbols_in_osx<'a>(sess: &'a Session, out_filename: &Path, option: Opti
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn escape_string(s: &[u8]) -> String {
|
fn escape_string(s: &[u8]) -> String {
|
||||||
str::from_utf8(s).map(|s| s.to_owned()).unwrap_or_else(|_| {
|
match str::from_utf8(s) {
|
||||||
let mut x = "Non-UTF-8 output: ".to_string();
|
Ok(s) => s.to_owned(),
|
||||||
x.extend(s.iter().flat_map(|&b| ascii::escape_default(b)).map(char::from));
|
Err(_) => format!("Non-UTF-8 output: {}", s.escape_ascii()),
|
||||||
x
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_sanitizer_libraries(sess: &Session, crate_type: CrateType, linker: &mut dyn Linker) {
|
fn add_sanitizer_libraries(sess: &Session, crate_type: CrateType, linker: &mut dyn Linker) {
|
||||||
|
@ -2633,15 +2633,7 @@ fn pretty_print_const<'tcx>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn pretty_print_byte_str(fmt: &mut Formatter<'_>, byte_str: &[u8]) -> fmt::Result {
|
fn pretty_print_byte_str(fmt: &mut Formatter<'_>, byte_str: &[u8]) -> fmt::Result {
|
||||||
fmt.write_str("b\"")?;
|
write!(fmt, "b\"{}\"", byte_str.escape_ascii())
|
||||||
for &c in byte_str {
|
|
||||||
for e in std::ascii::escape_default(c) {
|
|
||||||
fmt.write_char(e as char)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.write_str("\"")?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn comma_sep<'tcx>(fmt: &mut Formatter<'_>, elems: Vec<ConstantKind<'tcx>>) -> fmt::Result {
|
fn comma_sep<'tcx>(fmt: &mut Formatter<'_>, elems: Vec<ConstantKind<'tcx>>) -> fmt::Result {
|
||||||
|
@ -1405,14 +1405,7 @@ pub trait PrettyPrinter<'tcx>:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn pretty_print_byte_str(mut self, byte_str: &'tcx [u8]) -> Result<Self::Const, Self::Error> {
|
fn pretty_print_byte_str(mut self, byte_str: &'tcx [u8]) -> Result<Self::Const, Self::Error> {
|
||||||
define_scoped_cx!(self);
|
write!(self, "b\"{}\"", byte_str.escape_ascii())?;
|
||||||
p!("b\"");
|
|
||||||
for &c in byte_str {
|
|
||||||
for e in std::ascii::escape_default(c) {
|
|
||||||
self.write_char(e as char)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p!("\"");
|
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use crate::ascii;
|
|
||||||
use crate::cmp::Ordering;
|
use crate::cmp::Ordering;
|
||||||
use crate::ffi::c_char;
|
use crate::ffi::c_char;
|
||||||
use crate::fmt::{self, Write};
|
use crate::fmt;
|
||||||
use crate::intrinsics;
|
use crate::intrinsics;
|
||||||
use crate::ops;
|
use crate::ops;
|
||||||
use crate::slice;
|
use crate::slice;
|
||||||
@ -161,11 +160,7 @@ impl fmt::Display for FromBytesUntilNulError {
|
|||||||
#[stable(feature = "cstr_debug", since = "1.3.0")]
|
#[stable(feature = "cstr_debug", since = "1.3.0")]
|
||||||
impl fmt::Debug for CStr {
|
impl fmt::Debug for CStr {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
write!(f, "\"")?;
|
write!(f, "\"{}\"", self.to_bytes().escape_ascii())
|
||||||
for byte in self.to_bytes().iter().flat_map(|&b| ascii::escape_default(b)) {
|
|
||||||
f.write_char(byte as char)?;
|
|
||||||
}
|
|
||||||
write!(f, "\"")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1353,12 +1353,7 @@ impl Literal {
|
|||||||
/// Byte string literal.
|
/// Byte string literal.
|
||||||
#[stable(feature = "proc_macro_lib2", since = "1.29.0")]
|
#[stable(feature = "proc_macro_lib2", since = "1.29.0")]
|
||||||
pub fn byte_string(bytes: &[u8]) -> Literal {
|
pub fn byte_string(bytes: &[u8]) -> Literal {
|
||||||
let string = bytes
|
let string = bytes.escape_ascii().to_string();
|
||||||
.iter()
|
|
||||||
.cloned()
|
|
||||||
.flat_map(std::ascii::escape_default)
|
|
||||||
.map(Into::<char>::into)
|
|
||||||
.collect::<String>();
|
|
||||||
Literal::new(bridge::LitKind::ByteStr, &string, None)
|
Literal::new(bridge::LitKind::ByteStr, &string, None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ use crate::ffi::OsStr;
|
|||||||
use crate::os::unix::ffi::OsStrExt;
|
use crate::os::unix::ffi::OsStrExt;
|
||||||
use crate::path::Path;
|
use crate::path::Path;
|
||||||
use crate::sys::cvt;
|
use crate::sys::cvt;
|
||||||
use crate::{ascii, fmt, io, mem, ptr};
|
use crate::{fmt, io, mem, ptr};
|
||||||
|
|
||||||
// FIXME(#43348): Make libc adapt #[doc(cfg(...))] so we don't need these fake definitions here?
|
// FIXME(#43348): Make libc adapt #[doc(cfg(...))] so we don't need these fake definitions here?
|
||||||
#[cfg(not(unix))]
|
#[cfg(not(unix))]
|
||||||
@ -64,18 +64,6 @@ enum AddressKind<'a> {
|
|||||||
Abstract(&'a [u8]),
|
Abstract(&'a [u8]),
|
||||||
}
|
}
|
||||||
|
|
||||||
struct AsciiEscaped<'a>(&'a [u8]);
|
|
||||||
|
|
||||||
impl<'a> fmt::Display for AsciiEscaped<'a> {
|
|
||||||
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
write!(fmt, "\"")?;
|
|
||||||
for byte in self.0.iter().cloned().flat_map(ascii::escape_default) {
|
|
||||||
write!(fmt, "{}", byte as char)?;
|
|
||||||
}
|
|
||||||
write!(fmt, "\"")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// An address associated with a Unix socket.
|
/// An address associated with a Unix socket.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
@ -343,7 +331,7 @@ impl fmt::Debug for SocketAddr {
|
|||||||
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self.address() {
|
match self.address() {
|
||||||
AddressKind::Unnamed => write!(fmt, "(unnamed)"),
|
AddressKind::Unnamed => write!(fmt, "(unnamed)"),
|
||||||
AddressKind::Abstract(name) => write!(fmt, "{} (abstract)", AsciiEscaped(name)),
|
AddressKind::Abstract(name) => write!(fmt, "\"{}\" (abstract)", name.escape_ascii()),
|
||||||
AddressKind::Pathname(path) => write!(fmt, "{path:?} (pathname)"),
|
AddressKind::Pathname(path) => write!(fmt, "{path:?} (pathname)"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user