]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] cfgparse: add support for warnings in external functions
authorWilly Tarreau <w@1wt.eu>
Wed, 9 Jul 2008 18:22:56 +0000 (20:22 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 9 Jul 2008 18:23:15 +0000 (20:23 +0200)
Some parsers will need to report warnings in some cases. Let's
use positive values for that.

include/common/cfgparse.h
src/cfgparse.c

index c5777f98b630a24d62ae69fac009290836993aa1..35e5614e947cd5aee81552c2e617a69b4837dba6 100644 (file)
@@ -36,7 +36,8 @@
 struct cfg_keyword {
        int section;                            /* section type for this keyword */
        const char *kw;                         /* the keyword itself */
-       int (*parse)(char **args,               /* command line and arguments */
+       int (*parse)(                           /* 0=OK, <0=Alert, >0=Warning */
+                    char **args,               /* command line and arguments */
                     int section_type,          /* current section CFG_{GLOBAL|LISTEN} */
                     struct proxy *curpx,       /* current proxy (NULL in GLOBAL) */
                     struct proxy *defpx,       /* default proxy (NULL in GLOBAL) */
index af29a47986f7c54968ac9edb9d76ab49da8998df..91e6c558c1e631db55800eddbcc39d573c6e0805 100644 (file)
@@ -501,6 +501,7 @@ int cfg_parse_global(const char *file, int linenum, char **args, int inv)
        else {
                struct cfg_kw_list *kwl;
                int index;
+               int rc;
 
                list_for_each_entry(kwl, &cfg_keywords.list, list) {
                        for (index = 0; kwl->kw[index].kw != NULL; index++) {
@@ -510,10 +511,15 @@ int cfg_parse_global(const char *file, int linenum, char **args, int inv)
                                        /* prepare error message just in case */
                                        snprintf(trash, sizeof(trash),
                                                 "error near '%s' in '%s' section", args[0], "global");
-                                       if (kwl->kw[index].parse(args, CFG_GLOBAL, NULL, NULL, trash, sizeof(trash)) < 0) {
+                                       rc = kwl->kw[index].parse(args, CFG_GLOBAL, NULL, NULL, trash, sizeof(trash));
+                                       if (rc < 0) {
                                                Alert("parsing [%s:%d] : %s\n", file, linenum, trash);
                                                return -1;
                                        }
+                                       else if (rc > 0) {
+                                               Warning("parsing [%s:%d] : %s\n", file, linenum, trash);
+                                               return 0;
+                                       }
                                        return 0;
                                }
                        }
@@ -2680,10 +2686,15 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv)
                                        /* prepare error message just in case */
                                        snprintf(trash, sizeof(trash),
                                                 "error near '%s' in %s section", args[0], cursection);
-                                       if (kwl->kw[index].parse(args, CFG_LISTEN, curproxy, &defproxy, trash, sizeof(trash)) < 0) {
+                                       rc = kwl->kw[index].parse(args, CFG_LISTEN, curproxy, &defproxy, trash, sizeof(trash));
+                                       if (rc < 0) {
                                                Alert("parsing [%s:%d] : %s\n", file, linenum, trash);
                                                return -1;
                                        }
+                                       else if (rc > 0) {
+                                               Warning("parsing [%s:%d] : %s\n", file, linenum, trash);
+                                               return 0;
+                                       }
                                        return 0;
                                }
                        }