#define CTYPE_HACK(func, ch) (func((unsigned char)(ch)))
#define ISSPACE(ch) CTYPE_HACK(isspace, ch)
#define ISALNUM(ch) CTYPE_HACK(isalnum, ch)
+#define ISXDIGIT(ch) CTYPE_HACK(isxdigit, ch)
#define TOLOWER(ch) CTYPE_HACK(tolower, ch)
#define TOUPPER(ch) CTYPE_HACK(toupper, ch)
/* We can't allocate nodes ourselves, because only the caller knows how.
* Instead, insertion is split into two operations: `treap_probe' looks to
* see whether a matching node is already in the treap, and returns it if so;
- * otherwise, it flls in this `treap_path' structure, which is passed back to
- * `treap_insert' to help it add the fresh node into the treap. (See the
+ * otherwise, it fills in this `treap_path' structure, which is passed back
+ * to `treap_insert' to help it add the fresh node into the treap. (See the
* commentary in `treap_probe' and `treap_insert' for the details.)
*/
#define TREAP_PATHMAX 64
* the NAME rather than null-termination.
*/
-extern void config_set_var(struct config */*conf*/,
- struct config_section */*sect*/, unsigned /*f*/,
- const char */*name*/, const char */*value*/);
+extern struct config_var *config_set_var(struct config */*conf*/,
+ struct config_section */*sect*/,
+ unsigned /*f*/,
+ const char */*name*/,
+ const char */*value*/);
/* Set variable NAME to VALUE in SECT, with associated flags F.
*
* The names are null-terminated. The flags are variable flags: see
- * `struct config_var' for details.
+ * `struct config_var' for details. Returns the variable.
*
* If the variable is already set and has the `CF_OVERRIDE' flag,
* then this function does nothing unless `CF_OVERRIDE' is /also/ set
* in F.
*/
-extern void config_set_var_n(struct config */*conf*/,
- struct config_section */*sect*/, unsigned /*f*/,
- const char */*name*/, size_t /*namelen*/,
- const char */*value*/, size_t /*valuelen*/);
+extern struct config_var *config_set_var_n(struct config */*conf*/,
+ struct config_section */*sect*/,
+ unsigned /*f*/,
+ const char */*name*/,
+ size_t /*namelen*/,
+ const char */*value*/,
+ size_t /*valuelen*/);
/* As `config_set_var', except that the variable NAME and VALUE have
* explicit lengths (NAMELEN and VALUELEN, respectively) rather than
- * being null- terminated.
+ * being null-terminated.
*/
extern void config_start_var_iter(struct config */*conf*/,