Re: Syslog Facility Patch - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: Syslog Facility Patch |
Date | |
Msg-id | 200011160550.AAA00290@candle.pha.pa.us Whole thread Raw |
In response to | Re: Syslog Facility Patch (Larry Rosenman <ler@lerctr.org>) |
List | pgsql-hackers |
Applied. > Here is one with a stray character removed. > > > Index: src/backend/utils/misc/guc-file.l > =================================================================== > RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v > retrieving revision 1.4 > diff -c -r1.4 guc-file.l > *** src/backend/utils/misc/guc-file.l 2000/07/27 19:49:18 1.4 > --- src/backend/utils/misc/guc-file.l 2000/11/15 19:50:32 > *************** > *** 16,21 **** > --- 16,22 ---- > #include <sys/stat.h> > #include <unistd.h> > #include <errno.h> > + #include <ctype.h> > > #include "miscadmin.h" > #include "storage/fd.h" > *************** > *** 32,37 **** > --- 33,39 ---- > GUC_INTEGER = 3, > GUC_REAL = 4, > GUC_EQUALS = 5, > + GUC_UNQUOTED_STRING = 6, > GUC_EOL = 99, > GUC_ERROR = 100 > }; > *************** > *** 45,51 **** > > /* prototype, so compiler is happy with our high warnings setting */ > int GUC_yylex(void); > ! > %} > > SIGN ("-"|"+") > --- 47,53 ---- > > /* prototype, so compiler is happy with our high warnings setting */ > int GUC_yylex(void); > ! char *GUC_scanstr(char *); > %} > > SIGN ("-"|"+") > *************** > *** 61,77 **** > LETTER_OR_DIGIT [A-Za-z_0-9\200-\377] > > ID {LETTER}{LETTER_OR_DIGIT}* > - /* > - * FIXME: This string syntax is nice and all but of course the quotes > - * need to be stripped before we can make any use of the string value. > - * There is a function in parser/scansup.c that does this but it uses > - * palloc and there might be a little more magic needed to get it to > - * work right. Now there are no string options, and if there were then > - * the unquoted (`ID') tokens should still work. Of course this only > - * affects the configuration file. > - */ > - STRING \'([^'\n]|\\.)*' > > %% > > \n ConfigFileLineno++; return GUC_EOL; > --- 63,72 ---- > LETTER_OR_DIGIT [A-Za-z_0-9\200-\377] > > ID {LETTER}{LETTER_OR_DIGIT}* > > + UNQUOTED_STRING {LETTER}({LETTER_OR_DIGIT}|[-._:/])* > + STRING \'([^'"\n]|\\.)*\' > + > %% > > \n ConfigFileLineno++; return GUC_EOL; > *************** > *** 80,85 **** > --- 75,81 ---- > > {ID} return GUC_ID; > {STRING} return GUC_STRING; > + {UNQUOTED_STRING} return GUC_UNQUOTED_STRING; > {INTEGER} return GUC_INTEGER; > {REAL} return GUC_REAL; > = return GUC_EQUALS; > *************** > *** 139,145 **** > int elevel; > FILE * fp; > > ! Assert(context == PGC_POSTMASTER || context == PGC_BACKEND || context == PGC_SIGHUP); > Assert(DataDir); > elevel = (context == PGC_SIGHUP) ? DEBUG : ERROR; > > --- 135,142 ---- > int elevel; > FILE * fp; > > ! Assert(context == PGC_POSTMASTER || context == PGC_BACKEND > ! || context == PGC_SIGHUP); > Assert(DataDir); > elevel = (context == PGC_SIGHUP) ? DEBUG : ERROR; > > *************** > *** 210,220 **** > if (token == GUC_EQUALS) > token = yylex(); > > ! if (token != GUC_ID && token != GUC_STRING && token != GUC_INTEGER && token != GUC_REAL) > goto parse_error; > opt_value = strdup(yytext); > if (opt_value == NULL) > goto out_of_memory; > parse_state = 2; > break; > > --- 207,230 ---- > if (token == GUC_EQUALS) > token = yylex(); > > ! if (token != GUC_ID && token != GUC_STRING && > ! token != GUC_INTEGER && token != GUC_REAL && > ! token != GUC_UNQUOTED_STRING) > goto parse_error; > opt_value = strdup(yytext); > if (opt_value == NULL) > goto out_of_memory; > + if (token == GUC_STRING) > + { > + /* remove the beginning and ending quote/apostrophe */ > + /* first: shift the whole shooting match down one > + character */ > + memmove(opt_value,opt_value+1,strlen(opt_value)-1); > + /* second: null out the 2 characters we shifted */ > + opt_value[strlen(opt_value)-2]='\0'; > + /* do the escape thing. free()'s the strdup above */ > + opt_value=GUC_scanstr(opt_value); > + } > parse_state = 2; > break; > > *************** > *** 266,272 **** > FreeFile(fp); > free(filename); > free_name_value_list(head); > ! elog(elevel, CONFIG_FILENAME ":%u: syntax error", ConfigFileLineno); > return; > > out_of_memory: > --- 276,283 ---- > FreeFile(fp); > free(filename); > free_name_value_list(head); > ! elog(elevel, CONFIG_FILENAME ":%u: syntax error, token=\"%s\"", > ! ConfigFileLineno,yytext); > return; > > out_of_memory: > *************** > *** 283,286 **** > --- 294,382 ---- > yywrap(void) > { > return 1; > + } > + > + /* ---------------- > + * scanstr > + * > + * if the string passed in has escaped codes, map the escape codes to actual > + * chars > + * > + * the string returned is malloc'd and should eventually be free'd by the > + * caller! > + * ---------------- > + */ > + > + char * > + GUC_scanstr(char *s) > + { > + char *newStr; > + int len, > + i, > + j; > + > + if (s == NULL || s[0] == '\0') > + { > + if (s != NULL) free (s); > + return strdup(""); > + > + } > + len = strlen(s); > + > + newStr = malloc(len + 1); /* string cannot get longer */ > + > + for (i = 0, j = 0; i < len; i++) > + { > + if (s[i] == '\\') > + { > + i++; > + switch (s[i]) > + { > + case 'b': > + newStr[j] = '\b'; > + break; > + case 'f': > + newStr[j] = '\f'; > + break; > + case 'n': > + newStr[j] = '\n'; > + break; > + case 'r': > + newStr[j] = '\r'; > + break; > + case 't': > + newStr[j] = '\t'; > + break; > + case '0': > + case '1': > + case '2': > + case '3': > + case '4': > + case '5': > + case '6': > + case '7': > + { > + int k; > + long octVal = 0; > + > + for (k = 0; > + s[i + k] >= '0' && s[i + k] <= '7' && k < 3; > + k++) > + octVal = (octVal << 3) + (s[i + k] - '0'); > + i += k - 1; > + newStr[j] = ((char) octVal); > + } > + break; > + default: > + newStr[j] = s[i]; > + break; > + } > + } /* switch */ > + else > + newStr[j] = s[i]; > + j++; > + } > + newStr[j] = '\0'; > + free(s); > + return newStr; > } > -- > Larry Rosenman http://www.lerctr.org/~ler > Phone: +1 972-414-9812 (voice) Internet: ler@lerctr.org > US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749 > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
pgsql-hackers by date: