Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
z
Classes
Class List
Class Hierarchy
Class Members
All
:
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Properties
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
z
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
grpc
third_party
boringssl-with-bazel
src
tool
args.cc
Go to the documentation of this file.
1
/* Copyright (c) 2014, Google Inc.
2
*
3
* Permission to use, copy, modify, and/or distribute this software for any
4
* purpose with or without fee is hereby granted, provided that the above
5
* copyright notice and this permission notice appear in all copies.
6
*
7
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
15
#include <string>
16
#include <vector>
17
18
#include <
errno.h
>
19
#include <limits.h>
20
#include <stdio.h>
21
#include <stdlib.h>
22
#include <
string.h
>
23
24
#include "
internal.h
"
25
26
27
bool
ParseKeyValueArguments
(std::map<std::string, std::string> *out_args,
28
const
std::vector<std::string> &
args
,
29
const
struct
argument
*templates) {
30
out_args->clear();
31
32
for
(
size_t
i
= 0;
i
<
args
.size();
i
++) {
33
const
std::string
&
arg
=
args
[
i
];
34
const
struct
argument
*templ =
nullptr
;
35
for
(
size_t
j = 0; templates[j].
name
[0] != 0; j++) {
36
if
(strcmp(
arg
.c_str(), templates[j].
name
) == 0) {
37
templ = &templates[j];
38
break
;
39
}
40
}
41
42
if
(templ ==
nullptr
) {
43
fprintf(
stderr
,
"Unknown argument: %s\n"
,
arg
.c_str());
44
return
false
;
45
}
46
47
if
(out_args->find(
arg
) != out_args->end()) {
48
fprintf(
stderr
,
"Duplicate argument: %s\n"
,
arg
.c_str());
49
return
false
;
50
}
51
52
if
(templ->
type
==
kBooleanArgument
) {
53
(*out_args)[
arg
] =
""
;
54
}
else
{
55
if
(
i
+ 1 >=
args
.size()) {
56
fprintf(
stderr
,
"Missing argument for option: %s\n"
,
arg
.c_str());
57
return
false
;
58
}
59
(*out_args)[
arg
] =
args
[++
i
];
60
}
61
}
62
63
for
(
size_t
j = 0; templates[j].
name
[0] != 0; j++) {
64
const
struct
argument
*templ = &templates[j];
65
if
(templ->
type
==
kRequiredArgument
&&
66
out_args->find(templ->
name
) == out_args->end()) {
67
fprintf(
stderr
,
"Missing value for required argument: %s\n"
, templ->
name
);
68
return
false
;
69
}
70
}
71
72
return
true
;
73
}
74
75
void
PrintUsage
(
const
struct
argument
*templates) {
76
for
(
size_t
i
= 0; templates[
i
].
name
[0] != 0;
i
++) {
77
const
struct
argument
*templ = &templates[
i
];
78
fprintf(
stderr
,
"%s\t%s\n"
, templ->
name
, templ->
description
);
79
}
80
}
81
82
bool
GetUnsigned
(
unsigned
*
out
,
const
std::string
&arg_name,
83
unsigned
default_value,
84
const
std::map<std::string, std::string> &
args
) {
85
const
auto
&
it
=
args
.find(arg_name);
86
if
(
it
==
args
.end()) {
87
*
out
= default_value;
88
return
true
;
89
}
90
91
const
std::string
&
value
=
it
->second;
92
if
(
value
.empty()) {
93
return
false
;
94
}
95
96
errno = 0;
97
char
*endptr;
98
unsigned
long
int
num
= strtoul(
value
.c_str(), &endptr, 10);
99
if
(
num
== ULONG_MAX && errno == ERANGE) {
100
return
false
;
101
}
102
if
(*endptr != 0 ||
num
> UINT_MAX) {
103
return
false
;
104
}
105
*
out
=
static_cast<
unsigned
>
(
num
);
106
107
return
true
;
108
}
ParseKeyValueArguments
bool ParseKeyValueArguments(std::map< std::string, std::string > *out_args, const std::vector< std::string > &args, const struct argument *templates)
Definition:
args.cc:27
gen_build_yaml.out
dictionary out
Definition:
src/benchmark/gen_build_yaml.py:24
internal.h
regen-readme.it
it
Definition:
regen-readme.py:15
argument::type
ArgumentType type
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:110
kRequiredArgument
@ kRequiredArgument
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:103
string.h
testing::internal::string
::std::string string
Definition:
bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
python_utils.port_server.stderr
stderr
Definition:
port_server.py:51
argument::name
const char * name
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:109
asyncio_get_stats.args
args
Definition:
asyncio_get_stats.py:40
argument
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:108
arg
Definition:
cmdline.cc:40
kBooleanArgument
@ kBooleanArgument
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:105
PrintUsage
void PrintUsage(const struct argument *templates)
Definition:
args.cc:75
GetUnsigned
bool GetUnsigned(unsigned *out, const std::string &arg_name, unsigned default_value, const std::map< std::string, std::string > &args)
Definition:
args.cc:82
value
const char * value
Definition:
hpack_parser_table.cc:165
xds_manager.num
num
Definition:
xds_manager.py:56
arg
struct arg arg
argument::description
const char * description
Definition:
third_party/boringssl-with-bazel/src/tool/internal.h:111
errno.h
i
uint64_t i
Definition:
abseil-cpp/absl/container/btree_benchmark.cc:230
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:33