Config parsing (4/4): Proposed starting interface
Aidan Cully
aidan at panix.com
Fri May 11 00:25:41 UTC 2001
On Thu, May 10, 2001 at 09:46:21AM, Russ Allbery said:
>
> (Note that this doesn't yet deal with writing configuration files, only
> reading them. Writing hasn't been forgotten, though.)
How does one verify syntax using this API? E.g., make sure that the
user didn't stick some garbage parameter name into the file?
--aidan
> /* $Id$
> **
> ** Configuration file parsing interface.
> */
>
> #ifndef INN_CONFPARSE_H
> #define INN_CONFPARSE_H 1
>
> #include <inn/defines.h>
>
> /* Avoid including <inn/vector.h> unless the client needs it. */
> struct vector;
>
> /* The opaque data type representing a configuration tree. */
> struct config_group_s;
> typedef struct config_group_s *config_group;
>
> BEGIN_DECLS
>
> /* Parse the given file and build a configuration tree. This does purely
> syntactic parsing; no semantic checking is done. After the file name, a
> NULL-terminated list of const char * pointers should be given, naming the
> top-level group types that the caller is interested in. If none are given
> (if the second argument is NULL), the entire file is parsed. (This is
> purely for efficiency reasons; if one doesn't care about speed, everything
> will work the same if no types are given.)
>
> Returns a config_group for the top-level group representing the entire
> file. Generally one never wants to query parameters in this group;
> instead, the client should then call config_find_group for the group type
> of interest. Returns NULL on failure to read the file or on a parse
> failure; errors are reported via warn. */
> config_group config_parse_file(const char *file, /* types */ ...);
>
> /* config_find_group returns the first group of the given type found in the
> tree rooted at its argument. config_next_group returns the next group in
> the tree of the same type as the given group (or NULL if none is found).
> This can be used to do such things as enumerate all "peer" groups in a
> configuration file. */
> config_group config_find_group(config_group, const char *type);
> config_group config_next_group(config_group);
>
> /* Accessor functions for group information. */
> const char *config_group_type(config_group);
> const char *config_group_tag(config_group);
>
> /* Look up a parameter in a given config tree. The second argument is the
> name of the parameter, and the result will be stored in the third argument
> if the function returns true. If it returns false, the third argument is
> unchanged and that parameter wasn't set (or was set to an invalid value for
> the expected type). */
> bool config_param_boolean(config_group, const char *, bool *);
> bool config_param_integer(config_group, const char *, long *);
> bool config_param_real(config_group, const char *, double *);
> bool config_param_string(config_group, const char *, const char **);
> bool config_param_list(config_group, const char *, struct vector *);
>
> /* Free all space allocated by the tree rooted at config_group. One normally
> never wants to do this. WARNING: This includes the storage allocated for
> all strings returned by config_param_string and config_param_list for any
> configuration groups in this tree. */
> void config_free(config_group);
>
> END_DECLS
>
> #endif /* INN_CONFPARSE_H */
>
> --
> Russ Allbery (rra at stanford.edu) <http://www.eyrie.org/~eagle/>
--
Aidan Cully "Hooray!!!"
Not Panix Staff -- Pokey the Penguin
aidan at panix.com
More information about the inn-workers
mailing list