Rework ARRAYs, replacing label string with typed key, declaring KEY and VALUE
independently.
Implement dna.helper.argv array using key of type unsigned short.
Implement mdp.iftype.<interfacetype>.tick_ms using key of type short for the
interface type code.
The dna.helper.argv validation function now sorts the array in numerical order
of labels using qsort(3).
Add LABELLEN argument to ARRAY schema macros, to control the size of the
label[] string (was fixed at 41 chars before).
Add optional validator functions for STRUCT and ARRAY parsing. Tighten up
logic for parsing STRUCTs and ARRAYs and the result flags. Improve
documentation in block comments. Add CFUNSUPPORTED result flag.
Refactor ARRAY_xxx() schema declaration macros to fix problem in ARRAY_STRING().
Add dna.helper.executable, dna.helper.argv and server.chdir to config schema.
Replace ARRAY() macro with ARRAY_ATOM(), ARRAY_STRING(), ARRAY_NODE() and
ARRAY_STRUCT().
Change parse function return value to flag bits, add CFEMPTY, rename CFMISSING
to CFINCOMPLETE, improve logic around mandatory struct items.
Renamed struct config_node to struct cf_om_node.
Refactor to make opt_parsing() functions simpler for ATOM -- no need to check
for missing text or unsupported child nodes, or log parse failures.
Introduce NODE option which passes whole config_node struct to parsing
function.
Add str.h to list of Serval header files. Make the NaCl objects not dependent
on Serval header files, so that the entire NaCl source does not get re-built
when editing serval.h or str.h etc.
Move alloca_tohex() from serval.h into str.h so it can be used stand-alone.
Rename str_to_ll_scaled() to str_to_int64_scaled(). Add str_to_uint64_scaled()
and scale_factor().
Add a few more URI parsing functions. Move some functions out of str.c and
into str.h as inline functions.
Add strn_startswith() and strncase_startswith().
Make all str*_startswith() functions take const char * arguments, to make it
possible to do safe programming with consts.
Was not fetching payload of remote bundle, just manifest. The problem was
caused by a change of logic recently to not activate any queued fetch
candidates immediately, but wait until the next fd_poll(), so that parsing a
single packetful of rhizome advertisments would start fetching the most
important one first, instead of the first one parsed.
Add __whence args to fd_func_enter() and fd_func_exit() so that their log
messages get reported from the location of the IN() or OUT() macro, not a line
in performance_timing.c.
Removed diagnostic information from the FATAL() message in fd_func_exit(), and
a comment explaining why (causes SEGV).