GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/detail/ip_literal_rule.cpp
Date: 2024-08-20 16:05:55
Exec Total Coverage
Lines: 34 37 91.9%
Functions: 1 1 100.0%
Branches: 9 12 75.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // Official repository: https://github.com/boostorg/url
9 //
10
11
12 #include <boost/url/detail/config.hpp>
13 #include <boost/url/rfc/ipv6_address_rule.hpp>
14 #include "ip_literal_rule.hpp"
15 #include "ipv6_addrz_rule.hpp"
16 #include <boost/url/grammar/delim_rule.hpp>
17 #include <boost/url/grammar/parse.hpp>
18 #include <boost/url/grammar/tuple_rule.hpp>
19 #include "ipvfuture_rule.hpp"
20
21 namespace boost {
22 namespace urls {
23 namespace detail {
24
25 auto
26 61 ip_literal_rule_t::
27 parse(
28 char const*& it,
29 char const* const end
30 ) const noexcept ->
31 system::result<value_type>
32 {
33 61 value_type t;
34
35 // '['
36 {
37 61 auto rv = grammar::parse(
38 61 it, end, grammar::delim_rule('['));
39
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 61 times.
61 if(! rv)
40 return rv.error();
41 }
42
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 61 times.
61 if(it == end)
43 {
44 // end
45 BOOST_URL_RETURN_EC(
46 grammar::error::invalid);
47 }
48
2/2
✓ Branch 0 taken 56 times.
✓ Branch 1 taken 5 times.
61 if(*it != 'v')
49 {
50 // IPv6address
51 56 auto it0 = it;
52 56 auto rv = grammar::parse(
53 it, end,
54 56 grammar::tuple_rule(
55 ipv6_address_rule,
56 56 grammar::squelch(
57 56 grammar::delim_rule(']'))));
58
2/2
✓ Branch 1 taken 27 times.
✓ Branch 2 taken 29 times.
56 if(! rv)
59 {
60 // IPv6addrz
61 27 it = it0;
62 27 auto rv2 = grammar::parse(
63 it, end,
64 27 grammar::tuple_rule(
65 ipv6_addrz_rule,
66 27 grammar::squelch(
67 27 grammar::delim_rule(']'))));
68
2/2
✓ Branch 1 taken 24 times.
✓ Branch 2 taken 3 times.
27 if(! rv2)
69 24 return rv2.error();
70 3 t.ipv6 = rv2->ipv6;
71 3 t.is_ipv6 = true;
72 3 return t;
73 }
74 29 t.ipv6 = *rv;
75 29 t.is_ipv6 = true;
76 29 return t;
77 }
78 {
79 // IPvFuture
80 5 auto rv = grammar::parse(
81 it, end,
82 5 grammar::tuple_rule(
83 ipvfuture_rule,
84 5 grammar::squelch(
85 5 grammar::delim_rule(']'))));
86
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
5 if(! rv)
87 return rv.error();
88 5 t.is_ipv6 = false;
89 5 t.ipvfuture = rv->str;
90 5 return t;
91 }
92 }
93
94 } // detail
95 } // urls
96 } // boost
97
98