pgpool2.git / summary / log / commit / refs

commit    b6dc4fb4d03ab17ca8d343caa2cc0e9847271da5
Author:   Tatsuo Ishii <ishii at sraoss.co.jp>
Date:     Thu Jun 10 06:47:26 2010 +0000

    Forgot to commit delivered files.


Makefile.in | 10 +++-- pool_config.c | 141 +++++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 116 insertions(+), 35 deletions(-) diff --git a/Makefile.in b/Makefile.in index b1a27a04b..a8bcd1678 100644 --- a/Makefile.in +++ b/Makefile.in @@ -74,9 +74,10 @@ am_pgpool_OBJECTS = main.$(OBJEXT) child.$(OBJEXT) pool_auth.$(OBJEXT) \ pool_path.$(OBJEXT) pool_ip.$(OBJEXT) ps_status.$(OBJEXT) \ strlcpy.$(OBJEXT) recovery.$(OBJEXT) pool_relcache.$(OBJEXT) \ pool_process_reporting.$(OBJEXT) pool_ssl.$(OBJEXT) \ - pool_timestamp.$(OBJEXT) pool_proto_modules.$(OBJEXT) \ - pool_lobj.$(OBJEXT) pool_process_context.$(OBJEXT) \ - pool_session_context.$(OBJEXT) pool_query_context.$(OBJEXT) + pool_timestamp.$(OBJEXT) pool_proto2.$(OBJEXT) \ + pool_proto_modules.$(OBJEXT) pool_lobj.$(OBJEXT) \ + pool_process_context.$(OBJEXT) pool_session_context.$(OBJEXT) \ + pool_query_context.$(OBJEXT) pgpool_OBJECTS = $(am_pgpool_OBJECTS) pgpool_DEPENDENCIES = parser/libsql-parser.a pcp/libpcp.la \ parser/nodes.o @@ -246,7 +247,7 @@ pgpool_SOURCES = pool.h pool_type.h version.h pgpool.conf.sample \ pool_hba.c pool_path.h pool_path.c pool_ip.h pool_ip.c pool_type.h \ ps_status.c strlcpy.c recovery.c pool_relcache.c pool_relcache.h pool_process_reporting.c \ pool_ssl.c pool_timestamp.c pool_timestamp.h \ - pool_proto_modules.c pool_proto_modules.h \ + pool_proto2.c pool_proto_modules.c pool_proto_modules.h \ pool_lobj.c pool_lobj.h \ pool_process_context.c pool_process_context.h \ pool_session_context.c pool_session_context.h \ @@ -415,6 +416,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_process_context.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_process_query.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_process_reporting.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_proto2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_proto_modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_query_cache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool_query_context.Po@am__quote@ diff --git a/pool_config.c b/pool_config.c index 30b3a52a5..2bbfdff8a 100644 --- a/pool_config.c +++ b/pool_config.c @@ -538,10 +538,9 @@ typedef enum { static char *extract_string(char *value, POOL_TOKEN token); static char **extract_string_tokens(char *str, char *delim, int *n); -static int eval_logical(char *str); static void clear_host_entry(int slot); -#line 545 "pool_config.c" +#line 544 "pool_config.c" #define INITIAL 0 @@ -721,10 +720,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 85 "pool_config.l" +#line 84 "pool_config.l" -#line 728 "pool_config.c" +#line 727 "pool_config.c" if ( !(yy_init) ) { @@ -806,12 +805,12 @@ do_action: /* This label is used only to access EOF actions. */ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 87 "pool_config.l" +#line 86 "pool_config.l" Lineno++; return POOL_EOL; YY_BREAK case 2: YY_RULE_SETUP -#line 88 "pool_config.l" +#line 87 "pool_config.l" /* eat whitespace */ YY_BREAK case 3: @@ -819,50 +818,50 @@ case 3: (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 89 "pool_config.l" +#line 88 "pool_config.l" /* eat comment */ YY_BREAK case 4: YY_RULE_SETUP -#line 91 "pool_config.l" +#line 90 "pool_config.l" return POOL_KEY; YY_BREAK case 5: YY_RULE_SETUP -#line 92 "pool_config.l" +#line 91 "pool_config.l" return POOL_STRING; YY_BREAK case 6: YY_RULE_SETUP -#line 93 "pool_config.l" +#line 92 "pool_config.l" return POOL_UNQUOTED_STRING; YY_BREAK case 7: YY_RULE_SETUP -#line 94 "pool_config.l" +#line 93 "pool_config.l" return POOL_INTEGER; YY_BREAK case 8: YY_RULE_SETUP -#line 95 "pool_config.l" +#line 94 "pool_config.l" return POOL_REAL; YY_BREAK case 9: YY_RULE_SETUP -#line 96 "pool_config.l" +#line 95 "pool_config.l" return POOL_EQUALS; YY_BREAK case 10: YY_RULE_SETUP -#line 98 "pool_config.l" +#line 97 "pool_config.l" return POOL_PARSE_ERROR; YY_BREAK case 11: YY_RULE_SETUP -#line 100 "pool_config.l" +#line 99 "pool_config.l" ECHO; YY_BREAK -#line 866 "pool_config.c" +#line 865 "pool_config.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1820,7 +1819,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 100 "pool_config.l" +#line 99 "pool_config.l" @@ -3220,22 +3219,102 @@ static char *extract_string(char *value, POOL_TOKEN token) return ret; } -static int eval_logical(char *str) +/* + * Try to interpret value as boolean value. Valid values are: true, + * false, yes, no, on, off, 1, 0; as well as unique prefixes thereof. + * If the string parses okay, return true, else false. + * If okay and result is not NULL, return the value in *result. + * This function copied from PostgreSQL source code. + */ +static bool parse_bool_with_len(const char *value, size_t len, bool *result) { - int ret; - - if (!strcasecmp(str, "true")) - ret = 1; - else if (!strcasecmp(str, "false")) - ret = 0; - else if (!strcmp(str, "1")) - ret = 1; - else if (!strcmp(str, "0")) - ret = 0; - else - ret = -1; + switch (*value) + { + case 't': + case 'T': + if (strncasecmp(value, "true", len) == 0) + { + if (result) + *result = true; + return true; + } + break; + case 'f': + case 'F': + if (strncasecmp(value, "false", len) == 0) + { + if (result) + *result = false; + return true; + } + break; + case 'y': + case 'Y': + if (strncasecmp(value, "yes", len) == 0) + { + if (result) + *result = true; + return true; + } + break; + case 'n': + case 'N': + if (strncasecmp(value, "no", len) == 0) + { + if (result) + *result = false; + return true; + } + break; + case 'o': + case 'O': + /* 'o' is not unique enough */ + if (strncasecmp(value, "on", (len > 2 ? len : 2)) == 0) + { + if (result) + *result = true; + return true; + } + else if (strncasecmp(value, "off", (len > 2 ? len : 2)) == 0) + { + if (result) + *result = false; + return true; + } + break; + case '1': + if (len == 1) + { + if (result) + *result = true; + return true; + } + break; + case '0': + if (len == 1) + { + if (result) + *result = false; + return true; + } + break; + default: + break; + } - return ret; + if (result) + *result = false; /* suppress compiler warning */ + return false; +} + +int eval_logical(char *str) +{ + bool result; + + if (!parse_bool_with_len(str, strlen(str), &result)) + return -1; + + return (result ? 1 : 0); } /* [parent: 0ca2444bba63]