mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +01:00
Merge branch 'tor-github/pr/1269'
This commit is contained in:
commit
7fa624537c
@ -466,6 +466,13 @@ routerset_free_(routerset_t *routerset)
|
|||||||
tor_free(routerset);
|
tor_free(routerset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* config helper: parse a routerset-typed variable.
|
||||||
|
*
|
||||||
|
* Takes as input as a single line in <b>line</b>; writes its results into a
|
||||||
|
* routerset_t** passed as <b>target</b>. On success return 0; on failure
|
||||||
|
* return -1 and store an error message into *<b>errmsg</b>.
|
||||||
|
**/
|
||||||
static int
|
static int
|
||||||
routerset_kv_parse(void *target, const config_line_t *line, char **errmsg,
|
routerset_kv_parse(void *target, const config_line_t *line, char **errmsg,
|
||||||
const void *params)
|
const void *params)
|
||||||
@ -479,11 +486,21 @@ routerset_kv_parse(void *target, const config_line_t *line, char **errmsg,
|
|||||||
*errmsg = tor_strdup("Invalid router list.");
|
*errmsg = tor_strdup("Invalid router list.");
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
if (routerset_is_empty(rs)) {
|
||||||
|
/* Represent empty sets as NULL. */
|
||||||
|
routerset_free(rs);
|
||||||
|
}
|
||||||
*p = rs;
|
*p = rs;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* config helper: encode a routerset-typed variable.
|
||||||
|
*
|
||||||
|
* Return a newly allocated string containing the value of the
|
||||||
|
* routerset_t** passed as <b>value</b>.
|
||||||
|
*/
|
||||||
static char *
|
static char *
|
||||||
routerset_encode(const void *value, const void *params)
|
routerset_encode(const void *value, const void *params)
|
||||||
{
|
{
|
||||||
@ -492,6 +509,11 @@ routerset_encode(const void *value, const void *params)
|
|||||||
return routerset_to_string(*p);
|
return routerset_to_string(*p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* config helper: free and clear a routerset-typed variable.
|
||||||
|
*
|
||||||
|
* Clear the routerset_t** passed as <b>value</b>.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
routerset_clear(void *value, const void *params)
|
routerset_clear(void *value, const void *params)
|
||||||
{
|
{
|
||||||
@ -500,6 +522,13 @@ routerset_clear(void *value, const void *params)
|
|||||||
routerset_free(*p); // sets *p to NULL.
|
routerset_free(*p); // sets *p to NULL.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* config helper: copy a routerset-typed variable.
|
||||||
|
*
|
||||||
|
* Takes it input from a routerset_t** in <b>src</b>; writes its output to a
|
||||||
|
* routerset_t** in <b>dest</b>. Returns 0 on success, -1 on (impossible)
|
||||||
|
* failure.
|
||||||
|
**/
|
||||||
static int
|
static int
|
||||||
routerset_copy(void *dest, const void *src, const void *params)
|
routerset_copy(void *dest, const void *src, const void *params)
|
||||||
{
|
{
|
||||||
@ -507,11 +536,16 @@ routerset_copy(void *dest, const void *src, const void *params)
|
|||||||
routerset_t **output = (routerset_t**)dest;
|
routerset_t **output = (routerset_t**)dest;
|
||||||
const routerset_t *input = *(routerset_t**)src;
|
const routerset_t *input = *(routerset_t**)src;
|
||||||
routerset_free(*output); // sets *output to NULL
|
routerset_free(*output); // sets *output to NULL
|
||||||
*output = routerset_new();
|
if (! routerset_is_empty(input)) {
|
||||||
routerset_union(*output, input);
|
*output = routerset_new();
|
||||||
|
routerset_union(*output, input);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function table to implement a routerset_t-based configuration type.
|
||||||
|
**/
|
||||||
static const var_type_fns_t routerset_type_fns = {
|
static const var_type_fns_t routerset_type_fns = {
|
||||||
.kv_parse = routerset_kv_parse,
|
.kv_parse = routerset_kv_parse,
|
||||||
.encode = routerset_encode,
|
.encode = routerset_encode,
|
||||||
@ -519,6 +553,15 @@ static const var_type_fns_t routerset_type_fns = {
|
|||||||
.copy = routerset_copy
|
.copy = routerset_copy
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Definition of a routerset_t-based configuration type.
|
||||||
|
*
|
||||||
|
* Values are mapped to and from strings using the format defined in
|
||||||
|
* routerset_parse(): nicknames, IP address patterns, and fingerprints--with
|
||||||
|
* optional space, separated by commas.
|
||||||
|
*
|
||||||
|
* Empty sets are represented as NULL.
|
||||||
|
**/
|
||||||
const var_type_def_t ROUTERSET_type_defn = {
|
const var_type_def_t ROUTERSET_type_defn = {
|
||||||
.name = "RouterList",
|
.name = "RouterList",
|
||||||
.fns = &routerset_type_fns
|
.fns = &routerset_type_fns
|
||||||
|
@ -592,6 +592,10 @@ test_confparse_reset(void *arg)
|
|||||||
config_reset_line(&test_fmt, tst, "interval", 1);
|
config_reset_line(&test_fmt, tst, "interval", 1);
|
||||||
tt_int_op(tst->interval, OP_EQ, 10);
|
tt_int_op(tst->interval, OP_EQ, 10);
|
||||||
|
|
||||||
|
tt_ptr_op(tst->routerset, OP_NE, NULL);
|
||||||
|
config_reset_line(&test_fmt, tst, "routerset", 0);
|
||||||
|
tt_ptr_op(tst->routerset, OP_EQ, NULL);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
config_free(&test_fmt, tst);
|
config_free(&test_fmt, tst);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user