#include <stddef.h>
#include <freeradius-devel/token.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* Export the minimum amount of information about these structs
*/
/* This preprocessor trick will be useful in initializing CONF_PARSER struct */
#define XStringify(x) #x
#define Stringify(x) XStringify(x)
-/* And this pointer trick too */
-#ifndef offsetof
-# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
void cf_pair_free(CONF_PAIR **cp);
+int cf_pair_replace(CONF_SECTION *cs, CONF_PAIR *cp,
+ const char *value);
void cf_section_free(CONF_SECTION **cp);
int cf_item_parse(CONF_SECTION *cs, const char *name,
int type, void *data, const char *dflt);
int cf_section_parse(CONF_SECTION *, void *base,
const CONF_PARSER *variables);
+void cf_section_parse_free(CONF_SECTION *cs, void *base);
+const CONF_PARSER *cf_section_parse_table(CONF_SECTION *cs);
CONF_SECTION *cf_file_read(const char *file);
int cf_file_include(const char *file, CONF_SECTION *cs);
CONF_PAIR *cf_pair_find(const CONF_SECTION *, const char *name);
-CONF_PAIR *cf_pair_find_next(const CONF_SECTION *, const CONF_PAIR *, const char *name);
+CONF_PAIR *cf_pair_find_next(const CONF_SECTION *, CONF_PAIR *, const char *name);
CONF_SECTION *cf_section_find(const char *name);
CONF_SECTION *cf_section_sub_find(const CONF_SECTION *, const char *name);
CONF_SECTION *cf_section_sub_find_name2(const CONF_SECTION *, const char *name1, const char *name2);
-char *cf_section_value_find(const CONF_SECTION *, const char *attr);
-CONF_SECTION *cf_top_section(const CONF_SECTION *cs);
+const char *cf_section_value_find(const CONF_SECTION *, const char *attr);
+CONF_SECTION *cf_top_section(CONF_SECTION *cs);
void *cf_data_find(CONF_SECTION *, const char *);
int cf_data_add(CONF_SECTION *, const char *, void *, void (*)(void *));
-char *cf_pair_attr(CONF_PAIR *pair);
-char *cf_pair_value(CONF_PAIR *pair);
+const char *cf_pair_attr(CONF_PAIR *pair);
+const char *cf_pair_value(CONF_PAIR *pair);
VALUE_PAIR *cf_pairtovp(CONF_PAIR *pair);
const char *cf_section_name1(const CONF_SECTION *);
const char *cf_section_name2(const CONF_SECTION *);
CONF_ITEM *cf_pairtoitem(CONF_PAIR *cp);
CONF_ITEM *cf_sectiontoitem(CONF_SECTION *cs);
int cf_section_template(CONF_SECTION *cs, CONF_SECTION *template);
-void cf_log_err(CONF_ITEM *ci, const char *fmt, ...);
+void cf_log_err(CONF_ITEM *ci, const char *fmt, ...)
+#ifdef __GNUC__
+ __attribute__ ((format (printf, 2, 3)))
+#endif
+;
+void cf_log_info(CONF_SECTION *cs, const char *fmt, ...)
+#ifdef __GNUC__
+ __attribute__ ((format (printf, 2, 3)))
+#endif
+;
+void cf_log_module(CONF_SECTION *cs, const char *fmt, ...)
+#ifdef __GNUC__
+ __attribute__ ((format (printf, 2, 3)))
+#endif
+;
+CONF_ITEM *cf_reference_item(const CONF_SECTION *parentcs,
+ CONF_SECTION *outercs,
+ const char *ptr);
+extern int cf_log_config;
+extern int cf_log_modules;
+
+extern int cf_pair2xml(FILE *fp, const CONF_PAIR *cp);
+extern int cf_section2xml(FILE *fp, const CONF_SECTION *cs);
+extern int cf_pair2file(FILE *fp, const CONF_PAIR *cp);
+extern int cf_section2file(FILE *fp, const CONF_SECTION *cs);
/*
* Big magic.
*/
int cf_section_migrate(CONF_SECTION *dst, CONF_SECTION *src);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _CONFFILE_H */