]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/conf-internal.h
tableprinter: return value of table_set_col_opt changed to int
[libucw.git] / ucw / conf-internal.h
index d8c77d622853fec9fa5191c2381d983642a46c64..7ac490fbed4fd58bfc0804c48a67ad7e6fce8398 100644 (file)
 
 #include <ucw/threads.h>
 
+#ifdef CONFIG_UCW_CLEAN_ABI
+#define cf_add_dirty ucw_cf_add_dirty
+#define cf_commit_all ucw_cf_commit_all
+#define cf_done_stack ucw_cf_done_stack
+#define cf_find_subitem ucw_cf_find_subitem
+#define cf_init_stack ucw_cf_init_stack
+#define cf_interpret_line ucw_cf_interpret_line
+#define cf_journal_delete ucw_cf_journal_delete
+#define cf_journal_swap ucw_cf_journal_swap
+#define cf_load_default ucw_cf_load_default
+#define cf_obtain_context ucw_cf_obtain_context
+#define cf_op_names ucw_cf_op_names
+#define cf_sections ucw_cf_sections
+#define cf_type_names ucw_cf_type_names
+#define cf_type_size ucw_cf_type_size
+#endif
+
+/* Item stack used by conf-intr.c */
+
 #define MAX_STACK_SIZE 16
 
 struct item_stack {            // used by conf-intr.c
@@ -24,33 +43,52 @@ struct item_stack {         // used by conf-intr.c
   struct cf_item *item;                // cf_item of the list
 };
 
+/* List of dirty sections used by conf-section.c */
+
+struct dirty_section {
+  struct cf_section *sec;
+  void *ptr;
+};
+
+#define GBUF_TYPE      struct dirty_section
+#define GBUF_PREFIX(x) dirtsec_##x
+#include <ucw/gbuf.h>
+
+/* Configuration context */
+
 struct cf_context {
   struct mempool *pool;
   int is_active;
-  int need_journal;
-  char *def_file;
-  char *env_file;
-  int def_loaded;
+  int config_loaded;                   // at least one config file was loaded
   struct cf_parser_state *parser;
-  uns everything_committed;            // after the 1st load, this flag is set on
-  uns postpone_commit;                 // used internally by cf_getopt()
-  uns other_options;
-  clist conf_entries;
+  uint everything_committed;           // did we already commit each section?
+  uint postpone_commit;                        // counter of calls to cf_open_group()
+  uint other_options;                  // used internally by cf_getopt()
+  clist conf_entries;                  // files/strings to reload
+  struct cf_journal_item *journal;     // journalling
+  int enable_journal;
   struct old_pools *pools;
-  struct cf_journal_item *journal;
-  struct item_stack stack[MAX_STACK_SIZE];
-  uns stack_level;
-  uns initialized;
+  struct item_stack stack[MAX_STACK_SIZE];     // interpreter stack
+  uint stack_level;
   struct cf_section sections;          // root section
+  uint sections_initialized;
+  dirtsec_t dirty;                     // dirty sections
+  uint dirties;
 };
 
 /* conf-ctxt.c */
-static inline struct cf_context *
-cf_get_context(void)
+static inline struct cf_context *cf_get_context(void)
 {
-  return ucwlib_thread_context()->cf_context;
+  struct cf_context *cc = ucwlib_thread_context()->cf_context;
+  ASSERT(cc->is_active);
+  return cc;
 }
 
+// In fact, this is equivalent to cf_get_context(), but it is not inlined,
+// because we want to force the linker to include conf-context.c, which contains
+// a constructor of the whole context mechanism.
+struct cf_context *cf_obtain_context(void);
+
 /* conf-intr.c */
 #define OP_MASK 0xff           // only get the operation
 #define OP_OPEN 0x100          // here we only get an opening brace instead of parameters
@@ -60,10 +98,10 @@ enum cf_operation;
 extern char *cf_op_names[];
 extern char *cf_type_names[];
 
-uns cf_type_size(enum cf_type type, struct cf_user_type *utype);
+uint cf_type_size(enum cf_type type, struct cf_user_type *utype);
 char *cf_interpret_line(struct cf_context *cc, char *name, enum cf_operation op, int number, char **pars);
 void cf_init_stack(struct cf_context *cc);
-int cf_check_stack(struct cf_context *cc);
+int cf_done_stack(struct cf_context *cc);
 
 /* conf-journal.c */
 void cf_journal_swap(void);
@@ -81,4 +119,7 @@ struct cf_item *cf_find_subitem(struct cf_section *sec, const char *name);
 int cf_commit_all(enum cf_commit_mode cm);
 void cf_add_dirty(struct cf_section *sec, void *ptr);
 
+/* conf-getopt.c */
+void cf_load_default(struct cf_context *cc);
+
 #endif