diff options
| author | Bruce Momjian <bruce@momjian.us> | 2003-08-04 00:43:34 +0000 |
|---|---|---|
| committer | Bruce Momjian <bruce@momjian.us> | 2003-08-04 00:43:34 +0000 |
| commit | 089003fb462fcce46c02bf47322b429f73c33c50 (patch) | |
| tree | 77d78bc3a149df06f5603f60200a6ab363336624 /contrib/tsearch2/prs_dcfg.c | |
| parent | 63354a0228a1dbc4a0d5ddc8ecdd8326349d2100 (diff) | |
| download | postgresql-089003fb462fcce46c02bf47322b429f73c33c50.tar.gz | |
pgindent run.
Diffstat (limited to 'contrib/tsearch2/prs_dcfg.c')
| -rw-r--r-- | contrib/tsearch2/prs_dcfg.c | 200 |
1 files changed, 119 insertions, 81 deletions
diff --git a/contrib/tsearch2/prs_dcfg.c b/contrib/tsearch2/prs_dcfg.c index 783cf43ceb..6b553e4525 100644 --- a/contrib/tsearch2/prs_dcfg.c +++ b/contrib/tsearch2/prs_dcfg.c @@ -1,5 +1,5 @@ -/* - * Simple config parser +/* + * Simple config parser * Teodor Sigaev <teodor@sigaev.ru> */ #include <stdlib.h> @@ -16,126 +16,164 @@ #define CS_WAITEQ 2 #define CS_WAITVALUE 3 #define CS_INVALUE 4 -#define CS_IN2VALUE 5 +#define CS_IN2VALUE 5 #define CS_WAITDELIM 6 #define CS_INESC 7 #define CS_IN2ESC 8 static char * -nstrdup(char *ptr, int len) { - char *res=palloc(len+1), *cptr; - memcpy(res,ptr,len); - res[len]='\0'; +nstrdup(char *ptr, int len) +{ + char *res = palloc(len + 1), + *cptr; + + memcpy(res, ptr, len); + res[len] = '\0'; cptr = ptr = res; - while(*ptr) { - if ( *ptr == '\\' ) + while (*ptr) + { + if (*ptr == '\\') ptr++; - *cptr=*ptr; ptr++; cptr++; + *cptr = *ptr; + ptr++; + cptr++; } - *cptr='\0'; + *cptr = '\0'; return res; } void -parse_cfgdict(text *in, Map **m) { - Map *mptr; - char *ptr=VARDATA(in), *begin=NULL; - char num=0; - int state=CS_WAITKEY; +parse_cfgdict(text *in, Map ** m) +{ + Map *mptr; + char *ptr = VARDATA(in), + *begin = NULL; + char num = 0; + int state = CS_WAITKEY; - while( ptr-VARDATA(in) < VARSIZE(in) - VARHDRSZ ) { - if ( *ptr==',' ) num++; + while (ptr - VARDATA(in) < VARSIZE(in) - VARHDRSZ) + { + if (*ptr == ',') + num++; ptr++; } - *m=mptr=(Map*)palloc( sizeof(Map)*(num+2) ); - memset(mptr, 0, sizeof(Map)*(num+2) ); - ptr=VARDATA(in); - while( ptr-VARDATA(in) < VARSIZE(in) - VARHDRSZ ) { - if (state==CS_WAITKEY) { - if (isalpha(*ptr)) { - begin=ptr; - state=CS_INKEY; - } else if ( !isspace(*ptr) ) + *m = mptr = (Map *) palloc(sizeof(Map) * (num + 2)); + memset(mptr, 0, sizeof(Map) * (num + 2)); + ptr = VARDATA(in); + while (ptr - VARDATA(in) < VARSIZE(in) - VARHDRSZ) + { + if (state == CS_WAITKEY) + { + if (isalpha(*ptr)) + { + begin = ptr; + state = CS_INKEY; + } + else if (!isspace(*ptr)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("syntax error"), - errdetail("Syntax error in position %d near \"%c\"", - (int) (ptr-VARDATA(in)), *ptr))); - } else if (state==CS_INKEY) { - if ( isspace(*ptr) ) { - mptr->key=nstrdup(begin, ptr-begin); - state=CS_WAITEQ; - } else if ( *ptr=='=' ) { - mptr->key=nstrdup(begin, ptr-begin); - state=CS_WAITVALUE; - } else if ( !isalpha(*ptr) ) + errdetail("Syntax error in position %d near \"%c\"", + (int) (ptr - VARDATA(in)), *ptr))); + } + else if (state == CS_INKEY) + { + if (isspace(*ptr)) + { + mptr->key = nstrdup(begin, ptr - begin); + state = CS_WAITEQ; + } + else if (*ptr == '=') + { + mptr->key = nstrdup(begin, ptr - begin); + state = CS_WAITVALUE; + } + else if (!isalpha(*ptr)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("syntax error"), - errdetail("Syntax error in position %d near \"%c\"", - (int) (ptr-VARDATA(in)), *ptr))); - } else if ( state==CS_WAITEQ ) { - if ( *ptr=='=' ) - state=CS_WAITVALUE; - else if ( !isspace(*ptr) ) + errdetail("Syntax error in position %d near \"%c\"", + (int) (ptr - VARDATA(in)), *ptr))); + } + else if (state == CS_WAITEQ) + { + if (*ptr == '=') + state = CS_WAITVALUE; + else if (!isspace(*ptr)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("syntax error"), - errdetail("Syntax error in position %d near \"%c\"", - (int) (ptr-VARDATA(in)), *ptr))); - } else if ( state==CS_WAITVALUE ) { - if ( *ptr=='"' ) { - begin=ptr+1; - state=CS_INVALUE; - } else if ( !isspace(*ptr) ) { - begin=ptr; - state=CS_IN2VALUE; + errdetail("Syntax error in position %d near \"%c\"", + (int) (ptr - VARDATA(in)), *ptr))); + } + else if (state == CS_WAITVALUE) + { + if (*ptr == '"') + { + begin = ptr + 1; + state = CS_INVALUE; + } + else if (!isspace(*ptr)) + { + begin = ptr; + state = CS_IN2VALUE; } - } else if ( state==CS_INVALUE ) { - if ( *ptr=='"' ) { - mptr->value = nstrdup(begin, ptr-begin); + } + else if (state == CS_INVALUE) + { + if (*ptr == '"') + { + mptr->value = nstrdup(begin, ptr - begin); mptr++; - state=CS_WAITDELIM; - } else if ( *ptr=='\\' ) - state=CS_INESC; - } else if ( state==CS_IN2VALUE ) { - if ( isspace(*ptr) || *ptr==',' ) { - mptr->value = nstrdup(begin, ptr-begin); + state = CS_WAITDELIM; + } + else if (*ptr == '\\') + state = CS_INESC; + } + else if (state == CS_IN2VALUE) + { + if (isspace(*ptr) || *ptr == ',') + { + mptr->value = nstrdup(begin, ptr - begin); mptr++; - state=( *ptr==',' ) ? CS_WAITKEY : CS_WAITDELIM; - } else if ( *ptr=='\\' ) - state=CS_INESC; - } else if ( state==CS_WAITDELIM ) { - if ( *ptr==',' ) - state=CS_WAITKEY; - else if ( !isspace(*ptr) ) + state = (*ptr == ',') ? CS_WAITKEY : CS_WAITDELIM; + } + else if (*ptr == '\\') + state = CS_INESC; + } + else if (state == CS_WAITDELIM) + { + if (*ptr == ',') + state = CS_WAITKEY; + else if (!isspace(*ptr)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("syntax error"), - errdetail("Syntax error in position %d near \"%c\"", - (int) (ptr-VARDATA(in)), *ptr))); - } else if ( state == CS_INESC ) { - state=CS_INVALUE; - } else if ( state == CS_IN2ESC ) { - state=CS_IN2VALUE; - } else + errdetail("Syntax error in position %d near \"%c\"", + (int) (ptr - VARDATA(in)), *ptr))); + } + else if (state == CS_INESC) + state = CS_INVALUE; + else if (state == CS_IN2ESC) + state = CS_IN2VALUE; + else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("bad parser state"), errdetail("%d at position %d near \"%c\"", - state, (int) (ptr-VARDATA(in)), *ptr))); + state, (int) (ptr - VARDATA(in)), *ptr))); ptr++; } - if (state==CS_IN2VALUE) { - mptr->value = nstrdup(begin, ptr-begin); + if (state == CS_IN2VALUE) + { + mptr->value = nstrdup(begin, ptr - begin); mptr++; - } else if ( !(state==CS_WAITDELIM || state==CS_WAITKEY) ) + } + else if (!(state == CS_WAITDELIM || state == CS_WAITKEY)) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("unexpected end of line"))); } - - |
