亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? guc-file.l

?? PostgreSQL 8.1.4的源碼 適用于Linux下的開源數據庫系統
?? L
字號:
/* -*-pgsql-c-*- *//* * Scanner for the configuration file * * Copyright (c) 2000-2005, PostgreSQL Global Development Group * * $PostgreSQL: pgsql/src/backend/utils/misc/guc-file.l,v 1.32.2.2 2006/01/02 19:55:31 tgl Exp $ */%{#include "postgres.h"#include <unistd.h>#include <ctype.h>#include "miscadmin.h"#include "storage/fd.h"#include "utils/guc.h"/* Avoid exit() on fatal scanner errors (a bit ugly -- see yy_fatal_error) */#undef fprintf#define fprintf(file, fmt, msg)  ereport(ERROR, (errmsg_internal("%s", msg)))static unsigned ConfigFileLineno;enum {	GUC_ID = 1,	GUC_STRING = 2,	GUC_INTEGER = 3,	GUC_REAL = 4,	GUC_EQUALS = 5,	GUC_UNQUOTED_STRING = 6,	GUC_QUALIFIED_ID = 7,	GUC_EOL = 99,	GUC_ERROR = 100};/* prototype, so compiler is happy with our high warnings setting */int GUC_yylex(void);static char *GUC_scanstr(const char *s);%}%option 8bit%option never-interactive%option nodefault%option nounput%option noyywrapSIGN            ("-"|"+")DIGIT           [0-9]HEXDIGIT        [0-9a-fA-F]INTEGER         {SIGN}?({DIGIT}+|0x{HEXDIGIT}+)EXPONENT        [Ee]{SIGN}?{DIGIT}+REAL            {SIGN}?{DIGIT}*"."{DIGIT}*{EXPONENT}?LETTER          [A-Za-z_\200-\377]LETTER_OR_DIGIT [A-Za-z_0-9\200-\377]ID              {LETTER}{LETTER_OR_DIGIT}*QUALIFIED_ID    {ID}"."{ID}UNQUOTED_STRING {LETTER}({LETTER_OR_DIGIT}|[-._:/])*STRING          \'([^'\\\n]|\\.|\'\')*\'%%\n              ConfigFileLineno++; return GUC_EOL;[ \t\r]+        /* eat whitespace */#.*             /* eat comment (.* matches anything until newline) */{ID}            return GUC_ID;{QUALIFIED_ID}  return GUC_QUALIFIED_ID;{STRING}        return GUC_STRING;{UNQUOTED_STRING} return GUC_UNQUOTED_STRING;{INTEGER}       return GUC_INTEGER;{REAL}          return GUC_REAL;=               return GUC_EQUALS;.               return GUC_ERROR;%%struct name_value_pair{	char       *name;	char       *value;	struct name_value_pair *next;};/* * Free a list of name/value pairs, including the names and the values */static voidfree_name_value_list(struct name_value_pair * list){	struct name_value_pair *item;	item = list;	while (item)	{		struct name_value_pair *save;		save = item->next;		pfree(item->name);		pfree(item->value);		pfree(item);		item = save;	}}/* * Official function to read and process the configuration file. The * parameter indicates in what context the file is being read --- either * postmaster startup (including standalone-backend startup) or SIGHUP. * All options mentioned in the configuration file are set to new values. * If an error occurs, no values will be changed. */voidProcessConfigFile(GucContext context){	int			elevel;	int			token;	char	   *opt_name, *opt_value;	struct name_value_pair *item, *head, *tail;	FILE	   *fp;	Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP);	if (context == PGC_SIGHUP)	{		/*		 * To avoid cluttering the log, only the postmaster bleats loudly		 * about problems with the config file.		 */		elevel = IsUnderPostmaster ? DEBUG2 : LOG;	}	else		elevel = ERROR;	fp = AllocateFile(ConfigFileName, "r");	if (!fp)	{		ereport(elevel,				(errcode_for_file_access(),				 errmsg("could not open configuration file \"%s\": %m",						ConfigFileName)));		return;	}	/*	 * Parse	 */	yyrestart(fp);	head = tail = NULL;	opt_name = opt_value = NULL;	ConfigFileLineno = 1;	/* This loop iterates once per logical line */	while ((token = yylex()))	{		if (token == GUC_EOL)	/* empty or comment line */			continue;		/* first token on line is option name */		if (token != GUC_ID && token != GUC_QUALIFIED_ID)			goto parse_error;		opt_name = pstrdup(yytext);		/* next we have an optional equal sign; discard if present */		token = yylex();		if (token == GUC_EQUALS)			token = yylex();		/* now we must have the option value */		if (token != GUC_ID &&			token != GUC_STRING && 			token != GUC_INTEGER && 			token != GUC_REAL && 			token != GUC_UNQUOTED_STRING)			goto parse_error;		if (token == GUC_STRING)	/* strip quotes and escapes */			opt_value = GUC_scanstr(yytext);		else			opt_value = pstrdup(yytext);		/* now we'd like an end of line, or possibly EOF */		token = yylex();		if (token != GUC_EOL && token != 0)			goto parse_error;		/* OK, save the option name and value */		if (strcmp(opt_name, "custom_variable_classes") == 0)		{			/*			 * This variable must be processed first as it controls			 * the validity of other variables; so apply immediately.			 */			if (!set_config_option(opt_name, opt_value, context,								   PGC_S_FILE, false, true))			{				pfree(opt_name);				pfree(opt_value);				FreeFile(fp);				goto cleanup_exit;			}			pfree(opt_name);			pfree(opt_value);		}		else		{			/* append to list */			item = palloc(sizeof *item);			item->name = opt_name;			item->value = opt_value;			item->next = NULL;			if (!head)				head = item;			else				tail->next = item;			tail = item;		}		/* break out of loop if read EOF, else loop for next line */		if (token == 0)			break;	}	FreeFile(fp);	/*	 * Check if all options are valid	 */	for(item = head; item; item=item->next)	{		if (!set_config_option(item->name, item->value, context,							   PGC_S_FILE, false, false))			goto cleanup_exit;	}	/* If we got here all the options parsed okay, so apply them. */	for(item = head; item; item=item->next)	{		set_config_option(item->name, item->value, context,						  PGC_S_FILE, false, true);	} cleanup_exit:	free_name_value_list(head);	return; parse_error:	FreeFile(fp);	free_name_value_list(head);	if (token == GUC_EOL || token == 0)		ereport(elevel,				(errcode(ERRCODE_SYNTAX_ERROR),				 errmsg("syntax error in file \"%s\" line %u, near end of line",						ConfigFileName, ConfigFileLineno - 1)));	else		ereport(elevel,				(errcode(ERRCODE_SYNTAX_ERROR),				 errmsg("syntax error in file \"%s\" line %u, near token \"%s\"", 						ConfigFileName, ConfigFileLineno, yytext)));}/* *		scanstr * * Strip the quotes surrounding the given string, and collapse any embedded * '' sequences and backslash escapes. * * the string returned is palloc'd and should eventually be pfree'd by the * caller. */static char *GUC_scanstr(const char *s){	char	   *newStr;	int			len,				i,				j;	Assert(s != NULL && s[0] == '\'');	len = strlen(s);	Assert(len >= 2);	Assert(s[len-1] == '\'');	/* Skip the leading quote; we'll handle the trailing quote below */	s++, len--;	/* Since len still includes trailing quote, this is enough space */	newStr = palloc(len);	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 if (s[i] == '\'' && s[i+1] == '\'')		{			/* doubled quote becomes just one quote */			newStr[j] = s[++i];		}		else			newStr[j] = s[i];		j++;	}	/* We copied the ending quote to newStr, so replace with \0 */	Assert(j > 0 && j <= len);	newStr[--j] = '\0';	return newStr;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合激情五月| 国产精品久久久久四虎| 国产精品视频观看| 视频一区中文字幕国产| 成人毛片在线观看| 91精品在线观看入口| 国产精品护士白丝一区av| 久久精品免费观看| 精品视频免费在线| 亚洲精品久久嫩草网站秘色| 国产乱人伦精品一区二区在线观看| 欧美影院精品一区| 亚洲视频中文字幕| 国产69精品久久99不卡| 欧美www视频| 另类小说色综合网站| 欧美一区二区在线免费播放| 亚洲一区在线观看视频| 91美女视频网站| 成人免费小视频| 粗大黑人巨茎大战欧美成人| 久久久不卡影院| 国产精品一区二区x88av| 精品国产3级a| 国产一区二区三区四区五区入口| 欧美电影免费观看高清完整版在线 | 91精品国产一区二区三区香蕉| 亚洲欧美另类久久久精品| av高清久久久| 亚洲欧美日韩电影| 91毛片在线观看| 一级日本不卡的影视| 91香蕉视频在线| 亚洲一区在线观看免费观看电影高清| 欧美精品久久一区| 日日摸夜夜添夜夜添国产精品| 欧美人成免费网站| 日韩精品亚洲一区二区三区免费| 91精品国产综合久久久久久漫画| 日韩专区中文字幕一区二区| 91精品国产乱码| 韩国女主播一区| 亚洲国产精品黑人久久久| 成人黄色小视频| 亚洲精品大片www| 欧美精品视频www在线观看| 午夜精品爽啪视频| 精品少妇一区二区| 成人黄色国产精品网站大全在线免费观看| 日本一区二区三区久久久久久久久不| 成人av综合在线| 一区二区三区日韩精品视频| 欧美日韩视频不卡| 理论片日本一区| 国产精品麻豆网站| 欧美日韩精品一区二区三区| 久久精品国产99国产| 日本一二三不卡| 欧美中文字幕一区二区三区亚洲| 美腿丝袜一区二区三区| 日本一区二区视频在线| 欧美亚洲综合一区| 国产一区二区电影| 亚洲一区二区在线免费观看视频| 日韩欧美在线123| 菠萝蜜视频在线观看一区| 亚洲一区av在线| 久久久99久久| 538在线一区二区精品国产| 国产一区二区精品久久91| 亚洲视频一二三区| 精品国产3级a| 欧美男人的天堂一二区| 成人精品鲁一区一区二区| 午夜精品视频一区| **网站欧美大片在线观看| 日韩一级视频免费观看在线| 91蜜桃免费观看视频| 国模套图日韩精品一区二区| 亚洲激情欧美激情| 日本一区二区三区国色天香| 7777精品伊人久久久大香线蕉经典版下载 | 欧美xingq一区二区| 欧美性欧美巨大黑白大战| 国产成人在线观看| 理论片日本一区| 性做久久久久久免费观看欧美| 国产精品久久久久一区二区三区共| 这里只有精品视频在线观看| 精品久久久久久亚洲综合网 | 亚洲人精品午夜| 久久综合五月天婷婷伊人| 欧洲精品在线观看| av成人老司机| 国产99久久久久| 久久国产尿小便嘘嘘尿| 丝袜亚洲精品中文字幕一区| 亚洲另类在线一区| 1024成人网| 国产精品美女久久福利网站 | 制服丝袜在线91| 欧美怡红院视频| 日本精品视频一区二区三区| 丁香婷婷深情五月亚洲| 狠狠色丁香久久婷婷综| 日本伊人午夜精品| 日韩精品1区2区3区| 亚洲线精品一区二区三区| 日韩毛片视频在线看| 亚洲国产精品成人久久综合一区| 精品国产免费久久| 精品久久99ma| 精品入口麻豆88视频| 欧美白人最猛性xxxxx69交| 日韩欧美一区电影| 精品999在线播放| 久久亚区不卡日本| 国产欧美视频一区二区三区| 久久综合国产精品| 久久久久久9999| 国产精品不卡一区二区三区| 国产精品视频在线看| 国产精品麻豆久久久| 国产精品久久久久久久久免费桃花 | 香蕉成人啪国产精品视频综合网| 亚洲一区二区三区四区中文字幕 | 中文在线免费一区三区高中清不卡| 美女一区二区三区在线观看| 免费高清在线一区| 国产乱码精品一区二区三区忘忧草 | 在线观看免费一区| 欧美日韩大陆一区二区| 欧美一卡二卡在线观看| 久久综合五月天婷婷伊人| 国产精品久久看| 亚洲r级在线视频| 黄色资源网久久资源365| 国产福利精品导航| 色婷婷国产精品| 日韩欧美综合在线| 亚洲国产成人自拍| 亚洲电影你懂得| 国产真实乱偷精品视频免| 成人av第一页| 欧美美女黄视频| 久久久一区二区| 一区二区三区在线观看动漫| 免费久久99精品国产| 成人福利视频在线看| 欧美日韩一本到| 久久理论电影网| 亚洲一区二区三区在线播放| 精久久久久久久久久久| 91丨porny丨户外露出| 91精品国产高清一区二区三区蜜臀| 久久免费美女视频| 亚洲午夜视频在线观看| 激情小说欧美图片| 欧美婷婷六月丁香综合色| 2021久久国产精品不只是精品| 亚洲欧美日韩在线播放| 青青草视频一区| 色婷婷亚洲综合| 国产欧美综合色| 免费看欧美女人艹b| 在线日韩一区二区| 国产午夜一区二区三区| 国产成人午夜精品5599| 精品视频在线免费观看| 国产日韩影视精品| 老司机精品视频在线| 色欧美日韩亚洲| 国产精品免费看片| 精品一区二区在线视频| 欧洲精品一区二区三区在线观看| 国产精品久久久久一区二区三区| 久久99精品久久久久久久久久久久| 欧美在线观看视频在线| 国产精品久久久久久亚洲毛片| 国产中文字幕精品| 欧美不卡激情三级在线观看| 亚洲成av人片一区二区| 97超碰欧美中文字幕| 国产欧美一二三区| 国产福利视频一区二区三区| 欧美r级在线观看| 麻豆中文一区二区| 日韩欧美一级二级| 美国十次了思思久久精品导航| 精品视频123区在线观看| 亚洲免费三区一区二区| 99视频超级精品| 亚洲精品视频一区| 色偷偷一区二区三区| 中文字幕永久在线不卡| 99久久99久久精品免费看蜜桃| 国产精品乱码人人做人人爱 | 亚洲男人的天堂av| 在线视频国内自拍亚洲视频| 亚洲人成网站在线|