⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 variables.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
字号:
/* * psql - the PostgreSQL interactive terminal * * Copyright (c) 2000-2005, PostgreSQL Global Development Group * * $PostgreSQL: pgsql/src/bin/psql/variables.c,v 1.22 2005/10/15 02:49:41 momjian Exp $ */#include "postgres_fe.h"#include "common.h"#include "variables.h"VariableSpaceCreateVariableSpace(void){	struct _variable *ptr;	ptr = pg_calloc(1, sizeof *ptr);	ptr->name = pg_strdup("@");	ptr->value = pg_strdup("");	return ptr;}const char *GetVariable(VariableSpace space, const char *name){	struct _variable *current;	if (!space)		return NULL;	if (strspn(name, VALID_VARIABLE_CHARS) != strlen(name))		return NULL;	for (current = space; current; current = current->next)	{		psql_assert(current->name);		psql_assert(current->value);		if (strcmp(current->name, name) == 0)			return current->value;	}	return NULL;}boolGetVariableBool(VariableSpace space, const char *name){	const char *val;	val = GetVariable(space, name);	if (val == NULL)		return false;			/* not set -> assume "off" */	if (pg_strcasecmp(val, "off") == 0)		return false;			/* accept "off" or "OFF" as true */	/*	 * for backwards compatibility, anything except "off" or "OFF" is taken as	 * "true"	 */	return true;}boolVariableEquals(VariableSpace space, const char name[], const char value[]){	const char *var;	var = GetVariable(space, name);	return var && (strcmp(var, value) == 0);}intGetVariableNum(VariableSpace space,			   const char name[],			   int defaultval,			   int faultval,			   bool allowtrail){	const char *var;	int			result;	var = GetVariable(space, name);	if (!var)		result = defaultval;	else if (!var[0])		result = faultval;	else	{		char	   *end;		result = strtol(var, &end, 0);		if (!allowtrail && *end)			result = faultval;	}	return result;}intSwitchVariable(VariableSpace space, const char name[], const char *opt,...){	int			result;	const char *var;	var = GetVariable(space, name);	if (var)	{		va_list		args;		va_start(args, opt);		for (result = 1; opt && (strcmp(var, opt) != 0); result++)			opt = va_arg(args, const char *);		if (!opt)			result = VAR_NOTFOUND;		va_end(args);	}	else		result = VAR_NOTSET;	return result;}voidPrintVariables(VariableSpace space){	struct _variable *ptr;	for (ptr = space->next; ptr; ptr = ptr->next)		printf("%s = '%s'\n", ptr->name, ptr->value);}boolSetVariable(VariableSpace space, const char *name, const char *value){	struct _variable *current,			   *previous;	if (!space)		return false;	if (!value)		return DeleteVariable(space, name);	if (strspn(name, VALID_VARIABLE_CHARS) != strlen(name))		return false;	for (current = space, previous = NULL; current; previous = current, current = current->next)	{		psql_assert(current->name);		psql_assert(current->value);		if (strcmp(current->name, name) == 0)		{			free(current->value);			current->value = pg_strdup(value);			return true;		}	}	previous->next = pg_calloc(1, sizeof *(previous->next));	previous->next->name = pg_strdup(name);	previous->next->value = pg_strdup(value);	return true;}boolSetVariableBool(VariableSpace space, const char *name){	return SetVariable(space, name, "on");}boolDeleteVariable(VariableSpace space, const char *name){	struct _variable *current,			   *previous;	if (!space)		return false;	if (strspn(name, VALID_VARIABLE_CHARS) != strlen(name))		return false;	for (current = space, previous = NULL; current; previous = current, current = current->next)	{		psql_assert(current->name);		psql_assert(current->value);		if (strcmp(current->name, name) == 0)		{			free(current->name);			free(current->value);			if (previous)				previous->next = current->next;			free(current);			return true;		}	}	return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -