]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/opt-conf.c
Opt: Generalization of hooks
[libucw.git] / ucw / opt-conf.c
index d306db98dc4dab6322e7e96b5200c58ef7b39d04..f34b8b82ae3f3fcd658bb9a97e0c702f4c1c1d16 100644 (file)
@@ -49,12 +49,20 @@ void opt_handle_dumpconfig(struct opt_item * opt UNUSED, const char * value UNUS
   exit(0);
 }
 
-void opt_conf_hook_internal(struct opt_item * opt, const char * value UNUSED, void * data UNUSED) {
+void opt_conf_hook_internal(struct opt_item * opt, uns event, const char * value UNUSED, void * data UNUSED) {
   static enum {
     OPT_CONF_HOOK_BEGIN,
     OPT_CONF_HOOK_CONFIG,
     OPT_CONF_HOOK_OTHERS
   } state = OPT_CONF_HOOK_BEGIN;
+  struct cf_context *cc = cf_get_context();
+
+  if (event == OPT_HOOK_FINAL) {
+      opt_conf_end_of_options(cc);
+      return;
+  }
+
+  ASSERT(event == OPT_HOOK_BEFORE_VALUE);
 
   bool confopt = opt->flags & OPT_BEFORE_CONFIG;
 
@@ -63,13 +71,13 @@ void opt_conf_hook_internal(struct opt_item * opt, const char * value UNUSED, vo
       if (confopt)
        state = OPT_CONF_HOOK_CONFIG;
       else {
-       opt_conf_end_of_options(cf_get_context());
+       opt_conf_end_of_options(cc);
        state = OPT_CONF_HOOK_OTHERS;
       }
       break;
     case OPT_CONF_HOOK_CONFIG:
       if (!confopt) {
-       opt_conf_end_of_options(cf_get_context());
+       opt_conf_end_of_options(cc);
        state = OPT_CONF_HOOK_OTHERS;
       }
       break;