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

📄 regerror.c

📁 tcl是工具命令语言
💻 C
字号:
/* * regerror - error-code expansion * * Copyright (c) 1998, 1999 Henry Spencer.  All rights reserved. *  * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results.  The author * thanks all of them.  *  * Redistribution and use in source and binary forms -- with or without * modification -- are permitted for any purpose, provided that * redistributions in source form retain this entire copyright notice and * indicate the origin and nature of any modifications. *  * I'd appreciate being given credit for this package in the documentation * of software which uses it, but that is not a requirement. *  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */#include "regguts.h"/* unknown-error explanation */static char unk[] = "*** unknown regex error code 0x%x ***";/* struct to map among codes, code names, and explanations */static struct rerr {	int code;	char *name;	char *explain;} rerrs[] = {	/* the actual table is built from regex.h */#	include "regerrs.h"	{ -1,	"",	"oops" },	/* explanation special-cased in code */};/* - regerror - the interface to error numbers *//* ARGSUSED */size_t				/* actual space needed (including NUL) */regerror(errcode, preg, errbuf, errbuf_size)int errcode;			/* error code, or REG_ATOI or REG_ITOA */CONST regex_t *preg;		/* associated regex_t (unused at present) */char *errbuf;			/* result buffer (unless errbuf_size==0) */size_t errbuf_size;		/* available space in errbuf, can be 0 */{	struct rerr *r;	char *msg;	char convbuf[sizeof(unk)+50];	/* 50 = plenty for int */	size_t len;	int icode;	switch (errcode) {	case REG_ATOI:		/* convert name to number */		for (r = rerrs; r->code >= 0; r++)			if (strcmp(r->name, errbuf) == 0)				break;		sprintf(convbuf, "%d", r->code);	/* -1 for unknown */		msg = convbuf;		break;	case REG_ITOA:		/* convert number to name */		icode = atoi(errbuf);	/* not our problem if this fails */		for (r = rerrs; r->code >= 0; r++)			if (r->code == icode)				break;		if (r->code >= 0)			msg = r->name;		else {			/* unknown; tell him the number */			sprintf(convbuf, "REG_%u", (unsigned)icode);			msg = convbuf;		}		break;	default:		/* a real, normal error code */		for (r = rerrs; r->code >= 0; r++)			if (r->code == errcode)				break;		if (r->code >= 0)			msg = r->explain;		else {			/* unknown; say so */			sprintf(convbuf, unk, errcode);			msg = convbuf;		}		break;	}	len = strlen(msg) + 1;		/* space needed, including NUL */	if (errbuf_size > 0) {		if (errbuf_size > len)			strcpy(errbuf, msg);		else {			/* truncate to fit */			strncpy(errbuf, msg, errbuf_size-1);			errbuf[errbuf_size-1] = '\0';		}	}	return len;}

⌨️ 快捷键说明

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