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

📄 name.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
字号:
/*------------------------------------------------------------------------- * * name.c *	  Functions for the built-in type "name". * name replaces char16 and is carefully implemented so that it * is a string of length NAMEDATALEN.  DO NOT use hard-coded constants anywhere * always use NAMEDATALEN as the symbolic constant!   - jolly 8/21/95 * * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $Header: /usr/local/cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.18.2.1 1999/08/02 05:24:55 scrappy Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include "utils/builtins.h"/***************************************************************************** *	 USER I/O ROUTINES (none)												 * *****************************************************************************//* *		namein	- converts "..." to internal representation * *		Note: *				[Old] Currently if strlen(s) < NAMEDATALEN, the extra chars are nulls *				Now, always NULL terminated */NameData   *namein(char *s){	NameData   *result;	int			len;	if (s == NULL)		return NULL;	result = (NameData *) palloc(NAMEDATALEN);	/* always keep it null-padded */	StrNCpy(result->data, s, NAMEDATALEN);	len = strlen(result->data);	while (len < NAMEDATALEN)	{		*(result->data + len) = '\0';		len++;	}	return result;}/* *		nameout - converts internal reprsentation to "..." */char *nameout(NameData *s){	if (s == NULL)		return "-";	else		return pstrdup(s->data);}/***************************************************************************** *	 PUBLIC ROUTINES														 * *****************************************************************************//* *		nameeq	- returns 1 iff arguments are equal *		namene	- returns 1 iff arguments are not equal * *		BUGS: *				Assumes that "xy\0\0a" should be equal to "xy\0b". *				If not, can do the comparison backwards for efficiency. * *		namelt	- returns 1 iff a < b *		namele	- returns 1 iff a <= b *		namegt	- returns 1 iff a < b *		namege	- returns 1 iff a <= b * */boolnameeq(NameData *arg1, NameData *arg2){	if (!arg1 || !arg2)		return 0;	else		return (bool) strncmp(arg1->data, arg2->data, NAMEDATALEN) == 0;}boolnamene(NameData *arg1, NameData *arg2){	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) != 0);}boolnamelt(NameData *arg1, NameData *arg2){	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) < 0);}boolnamele(NameData *arg1, NameData *arg2){	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) <= 0);}boolnamegt(NameData *arg1, NameData *arg2){	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) > 0);}boolnamege(NameData *arg1, NameData *arg2){	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	return (bool) (strncmp(arg1->data, arg2->data, NAMEDATALEN) >= 0);}/* (see char.c for comparison/operation routines) */intnamecpy(Name n1, Name n2){	if (!n1 || !n2)		return -1;	strncpy(n1->data, n2->data, NAMEDATALEN);	return 0;}#ifdef NOT_USEDintnamecat(Name n1, Name n2){	return namestrcat(n1, n2->data);	/* n2 can't be any longer than n1 */}#endif#ifdef NOT_USEDintnamecmp(Name n1, Name n2){	return strncmp(n1->data, n2->data, NAMEDATALEN);}#endifintnamestrcpy(Name name, char *str){	if (!name || !str)		return -1;	StrNCpy(name->data, str, NAMEDATALEN);	return 0;}#ifdef NOT_USEDintnamestrcat(Name name, char *str){	int			i;	char	   *p,			   *q;	if (!name || !str)		return -1;	for (i = 0, p = name->data; i < NAMEDATALEN && *p; ++i, ++p)		;	for (q = str; i < NAMEDATALEN; ++i, ++p, ++q)	{		*p = *q;		if (!*q)			break;	}	return 0;}#endifintnamestrcmp(Name name, char *str){	if (!name && !str)		return 0;	if (!name)		return -1;				/* NULL < anything */	if (!str)		return 1;				/* NULL < anything */	return strncmp(name->data, str, NAMEDATALEN);}/***************************************************************************** *	 PRIVATE ROUTINES														 * *****************************************************************************/#ifdef NOT_USEDuint32NameComputeLength(Name name){	char	   *charP;	int			length;	for (length = 0, charP = name->data;		 length < NAMEDATALEN && *charP != '\0';		 length++, charP++)		;	return (uint32) length;}#endif

⌨️ 快捷键说明

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