Add "extern C {...} to header files for C++ builds.
[freeradius.git] / src / include / conffile.h
index dd2548c..55d4177 100644 (file)
@@ -8,8 +8,15 @@
  *
  */
 
+#include <freeradius-devel/ident.h>
+RCSIDH(conffile_h, "$Id$")
+
 #include <stddef.h>
-#include "token.h"
+#include <freeradius-devel/token.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /*
  * Export the minimum amount of information about these structs
@@ -17,6 +24,7 @@
 typedef struct conf_item CONF_ITEM;
 typedef struct conf_pair CONF_PAIR;
 typedef struct conf_part CONF_SECTION;
+typedef struct conf_data CONF_DATA;
 
 /*
  *  Instead of putting the information into a configuration structure,
@@ -26,6 +34,7 @@ typedef struct conf_part CONF_SECTION;
 #define PW_TYPE_STRING_PTR     100
 #define PW_TYPE_BOOLEAN                101
 #define PW_TYPE_SUBSECTION     102
+#define PW_TYPE_FILENAME       103
 
 typedef struct CONF_PARSER {
   const char *name;
@@ -38,39 +47,88 @@ typedef struct CONF_PARSER {
 /* 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_section_parse(CONF_SECTION *cs, void *base, const CONF_PARSER *variables);
+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_SECTION *conf_read(const char *fromfile, int fromline,
-                       const char *conffile, CONF_SECTION *parent);
+CONF_PAIR      *cf_pair_find(const CONF_SECTION *, 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);
+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 *));
 
-CONF_PAIR      *cf_pair_find(CONF_SECTION *section, const char *name);
-CONF_PAIR      *cf_pair_find_next(CONF_SECTION *section, CONF_PAIR *pair, const char *name);
-CONF_SECTION   *cf_section_find(const char *name);
-CONF_SECTION   *cf_section_sub_find(CONF_SECTION *section, const char *name);
-char           *cf_section_value_find(CONF_SECTION *section, const char *attr);
-
-char *cf_pair_attr(CONF_PAIR *pair);
-char *cf_pair_value(CONF_PAIR *pair);
-char *cf_section_name1(CONF_SECTION *section);
-char *cf_section_name2(CONF_SECTION *section);
-int dump_config(void);
+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 *);
+int dump_config(CONF_SECTION *cs);
 CONF_SECTION *cf_subsection_find_next(CONF_SECTION *section,
                                      CONF_SECTION *subsection,
                                      const char *name1);
+CONF_SECTION *cf_section_find_next(CONF_SECTION *section,
+                                  CONF_SECTION *subsection,
+                                  const char *name1);
 int cf_section_lineno(CONF_SECTION *section);
 int cf_pair_lineno(CONF_PAIR *pair);
+const char *cf_pair_filename(CONF_PAIR *pair);
+const char *cf_section_filename(CONF_SECTION *section);
 CONF_ITEM *cf_item_find_next(CONF_SECTION *section, CONF_ITEM *item);
 int cf_item_is_section(CONF_ITEM *item);
+int cf_item_is_pair(CONF_ITEM *item);
 CONF_PAIR *cf_itemtopair(CONF_ITEM *item);
 CONF_SECTION *cf_itemtosection(CONF_ITEM *item);
 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, ...)
+#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 */