Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
The Tor Project
Core
Tor
Commits
d4b31cf9
Commit
d4b31cf9
authored
Jul 15, 2009
by
Nick Mathewson
🎨
Browse files
Allow interval and memunit cfg variables to be set to fractions.
parent
72c5a46b
Changes
2
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
d4b31cf9
...
...
@@ -32,6 +32,9 @@ Changes in version 0.2.2.1-alpha - 2009-??-??
connecting clients to disk every 24 hours. To enable this, run
configure with the --enable-entry-stats option, and set
"EntryStatistics 1" in your torrc.
- Time and memory units in the configuration file can now be set to
fractional units. For example, "2.5 MB" is now a valid value for
AccountingMax.
o Minor bugfixes
- Hidden service clients didn't use a cached service descriptor that
...
...
src/or/config.c
View file @
d4b31cf9
...
...
@@ -4791,30 +4791,55 @@ static struct unit_table_t time_units[] = {
static
uint64_t
config_parse_units
(
const
char
*
val
,
struct
unit_table_t
*
u
,
int
*
ok
)
{
uint64_t
v
;
char
*
cp
;
uint64_t
v
=
0
;
double
d
=
0
;
int
use_float
=
0
;
smartlist_t
*
sl
;
tor_assert
(
ok
);
sl
=
smartlist_create
();
smartlist_split_string
(
sl
,
val
,
NULL
,
SPLIT_SKIP_SPACE
|
SPLIT_IGNORE_BLANK
,
3
);
v
=
tor_parse_uint64
(
val
,
10
,
0
,
UINT64_MAX
,
ok
,
&
cp
);
if
(
!*
ok
)
return
0
;
if
(
!
cp
)
{
if
(
smartlist_len
(
sl
)
<
1
||
smartlist_len
(
sl
)
>
2
)
{
*
ok
=
0
;
goto
done
;
}
v
=
tor_parse_uint64
(
smartlist_get
(
sl
,
0
),
10
,
0
,
UINT64_MAX
,
ok
,
NULL
);
if
(
!*
ok
)
{
int
r
=
sscanf
(
smartlist_get
(
sl
,
0
),
"%lf"
,
&
d
);
if
(
r
==
0
||
d
<
0
)
goto
done
;
use_float
=
1
;
}
if
(
smartlist_len
(
sl
)
==
1
)
{
*
ok
=
1
;
return
v
;
v
=
use_float
?
DBL_TO_U64
(
d
)
:
v
;
goto
done
;
}
while
(
TOR_ISSPACE
(
*
cp
))
++
cp
;
for
(
;
u
->
unit
;
++
u
)
{
if
(
!
strcasecmp
(
u
->
unit
,
cp
))
{
v
*=
u
->
multiplier
;
if
(
!
strcasecmp
(
u
->
unit
,
smartlist_get
(
sl
,
1
)))
{
if
(
use_float
)
v
=
u
->
multiplier
*
d
;
else
v
*=
u
->
multiplier
;
*
ok
=
1
;
return
v
;
goto
done
;
}
}
log_warn
(
LD_CONFIG
,
"Unknown unit '%s'."
,
cp
);
log_warn
(
LD_CONFIG
,
"Unknown unit '%s'."
,
(
char
*
)
smartlist_get
(
sl
,
1
)
);
*
ok
=
0
;
return
0
;
done:
SMARTLIST_FOREACH
(
sl
,
char
*
,
cp
,
tor_free
(
cp
));
smartlist_free
(
sl
);
if
(
*
ok
)
return
v
;
else
return
0
;
}
/** Parse a string in the format "number unit", where unit is a unit of
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment