|
@@ -235,7 +235,7 @@ fn longest_zero_sequence(pieces: &[u16; 8]) -> (isize, isize) {
|
|
|
(longest, longest + longest_length)
|
|
(longest, longest + longest_length)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+/// https://url.spec.whatwg.org/#ipv4-number-parser
|
|
|
fn parse_ipv4number(mut input: &str) -> Result<u32, ()> {
|
|
fn parse_ipv4number(mut input: &str) -> Result<u32, ()> {
|
|
|
let mut r = 10;
|
|
let mut r = 10;
|
|
|
if input.starts_with("0x") || input.starts_with("0X") {
|
|
if input.starts_with("0x") || input.starts_with("0X") {
|
|
@@ -257,6 +257,7 @@ fn parse_ipv4number(mut input: &str) -> Result<u32, ()> {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/// https://url.spec.whatwg.org/#concept-ipv4-parser
|
|
|
fn parse_ipv4addr(input: &str) -> ParseResult<Option<Ipv4Addr>> {
|
|
fn parse_ipv4addr(input: &str) -> ParseResult<Option<Ipv4Addr>> {
|
|
|
if input.is_empty() {
|
|
if input.is_empty() {
|
|
|
return Ok(None)
|
|
return Ok(None)
|
|
@@ -293,7 +294,7 @@ fn parse_ipv4addr(input: &str) -> ParseResult<Option<Ipv4Addr>> {
|
|
|
Ok(Some(Ipv4Addr::from(ipv4)))
|
|
Ok(Some(Ipv4Addr::from(ipv4)))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+/// https://url.spec.whatwg.org/#concept-ipv6-parser
|
|
|
fn parse_ipv6addr(input: &str) -> ParseResult<Ipv6Addr> {
|
|
fn parse_ipv6addr(input: &str) -> ParseResult<Ipv6Addr> {
|
|
|
let input = input.as_bytes();
|
|
let input = input.as_bytes();
|
|
|
let len = input.len();
|
|
let len = input.len();
|
|
@@ -408,14 +409,14 @@ fn parse_ipv6addr(input: &str) -> ParseResult<Ipv6Addr> {
|
|
|
dots_seen += 1;
|
|
dots_seen += 1;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
match compress_pointer {
|
|
match compress_pointer {
|
|
|
Some(compress_pointer) => {
|
|
Some(compress_pointer) => {
|
|
|
let mut swaps = piece_pointer - compress_pointer;
|
|
let mut swaps = piece_pointer - compress_pointer;
|
|
|
piece_pointer = 7;
|
|
piece_pointer = 7;
|
|
|
while swaps > 0 {
|
|
while swaps > 0 {
|
|
|
|
|
+ let tmp = pieces[piece_pointer];
|
|
|
pieces[piece_pointer] = pieces[compress_pointer + swaps - 1];
|
|
pieces[piece_pointer] = pieces[compress_pointer + swaps - 1];
|
|
|
- pieces[compress_pointer + swaps - 1] = 0;
|
|
|
|
|
|
|
+ pieces[compress_pointer + swaps - 1] = tmp;
|
|
|
swaps -= 1;
|
|
swaps -= 1;
|
|
|
piece_pointer -= 1;
|
|
piece_pointer -= 1;
|
|
|
}
|
|
}
|