refactor(h1): un-split record_header_indicies for ARM
This commit is contained in:
@@ -948,44 +948,17 @@ fn record_header_indices(
|
|||||||
) -> Result<(), crate::error::Parse> {
|
) -> Result<(), crate::error::Parse> {
|
||||||
let bytes_ptr = bytes.as_ptr() as usize;
|
let bytes_ptr = bytes.as_ptr() as usize;
|
||||||
|
|
||||||
// FIXME: This should be a single plain `for` loop.
|
for (header, indices) in headers.iter().zip(indices.iter_mut()) {
|
||||||
// Splitting it is a work-around for https://github.com/rust-lang/rust/issues/55105
|
if header.name.len() >= (1 << 16) {
|
||||||
macro_rules! split_loops_if {
|
debug!("header name larger than 64kb: {:?}", header.name);
|
||||||
(
|
return Err(crate::error::Parse::TooLarge);
|
||||||
cfg($($cfg: tt)+)
|
|
||||||
for $i: pat in ($iter: expr) {
|
|
||||||
$body1: block
|
|
||||||
$body2: block
|
|
||||||
}
|
|
||||||
) => {
|
|
||||||
for $i in $iter {
|
|
||||||
$body1
|
|
||||||
#[cfg(not($($cfg)+))] $body2
|
|
||||||
}
|
|
||||||
#[cfg($($cfg)+)]
|
|
||||||
for $i in $iter {
|
|
||||||
$body2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
split_loops_if! {
|
|
||||||
cfg(all(target_arch = "arm", target_feature = "v7", target_feature = "neon"))
|
|
||||||
for (header, indices) in (headers.iter().zip(indices.iter_mut())) {
|
|
||||||
{
|
|
||||||
if header.name.len() >= (1 << 16) {
|
|
||||||
debug!("header name larger than 64kb: {:?}", header.name);
|
|
||||||
return Err(crate::error::Parse::TooLarge);
|
|
||||||
}
|
|
||||||
let name_start = header.name.as_ptr() as usize - bytes_ptr;
|
|
||||||
let name_end = name_start + header.name.len();
|
|
||||||
indices.name = (name_start, name_end);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
let value_start = header.value.as_ptr() as usize - bytes_ptr;
|
|
||||||
let value_end = value_start + header.value.len();
|
|
||||||
indices.value = (value_start, value_end);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
let name_start = header.name.as_ptr() as usize - bytes_ptr;
|
||||||
|
let name_end = name_start + header.name.len();
|
||||||
|
indices.name = (name_start, name_end);
|
||||||
|
let value_start = header.value.as_ptr() as usize - bytes_ptr;
|
||||||
|
let value_end = value_start + header.value.len();
|
||||||
|
indices.value = (value_start, value_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user