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

📄 terror.h

📁 su 的源代码库
💻 H
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	<ast_common.h>#ifndef NIL#define NIL(t)	((t)0)#endif#if __STD_C#include	<stdarg.h>#else#include	<varargs.h>#endif#if _hdr_stdlib#include	<stdlib.h>#endif#if _hdr_unistd#include	<unistd.h>#endif#if _hdr_string#include	<string.h>#endif_BEGIN_EXTERNS_#if !_SFIO_Hextern int	sprintf _ARG_((char*, const char*, ...));extern int	vsprintf _ARG_((char*, const char*, va_list));#endif#if !__STD_C && !_hdr_stdlibextern int	atexit _ARG_((void (*)(void)));extern void	exit _ARG_((int));extern size_t	strlen _ARG_((const char*));extern Void_t*	malloc _ARG_((size_t));extern char*	getenv _ARG_((const char*));extern int	strncmp _ARG_((const char*, const char*, size_t));extern int	strcmp _ARG_((const char*, const char*));extern int	system _ARG_((const char*));#endif#if !_hdr_unistdextern int	alarm _ARG_((int));extern int	sleep _ARG_((int));extern int	fork();extern int	wait _ARG_((int*));extern int	access _ARG_((const char*, int));extern int	write _ARG_((int, const void*, int));extern int	unlink _ARG_((const char*));extern Void_t*	sbrk _ARG_((int));extern int	getpid();#endifextern void	tsterror _ARG_((char*, ...));extern void	tstwarn _ARG_((char*, ...));extern void	tstsuccess _ARG_((char*, ...));_END_EXTERNS_static int		Tstline;static char		Tstfile[16][256];#ifdef __LINE__#define terror		(Tstline=__LINE__),tsterror#else#define terror		(Tstline=-1),tsterror#endif#ifdef __LINE__#define twarn		(Tstline=__LINE__),tstwarn#else#define twarn		(Tstline=-1),tstwarn#endif#ifdef __LINE__#define tsuccess	(Tstline=__LINE__),tstsuccess#else#define tsuccess	(Tstline=-1),tstsuccess#endif#define tmesg		(Tstline=-1),tstwarn#ifdef DEBUG#ifdef __LINE__#define TSTDEBUG(x)	(Tstline=__LINE__),tstwarn x#else#define TSTDEBUG(x)	(Tstline=-1),tstwarn x#endif#else#define TSTDEBUG(x)#endif#ifndef MAIN#if __STD_C#define MAIN()		int main(int argc, char** argv)#else#define MAIN()		int main(argc, argv) int argc; char** argv;#endif#endif /*MAIN*/#ifndef TSTEXIT#define TSTEXIT(v)	{ tstcleanup(); exit(v); }#endifstatic void tstcleanup(){#ifdef DEBUG	twarn("Temp files will not be removed");#else	int	i;	for(i = 0; i < sizeof(Tstfile)/sizeof(Tstfile[0]); ++i)		if(Tstfile[i][0])			unlink(Tstfile[i]);#endif}#if __STD_Cstatic void tstputmesg(int line, char* form, va_list args)#elsestatic void tstputmesg(line, form, args)int	line;char*	form;va_list	args;#endif{	char	*s, buf[1024];	int	n;	for(n = 0; n < sizeof(buf); ++n)		buf[n] = 0;	s = buf; n = 0;	if(line >= 0)	{#if _SFIO_H		sfsprintf(s, sizeof(buf), "\tLine=%d: ", line);#else		sprintf(s, "\tLine=%d: ", line);#endif		s += (n = strlen(s));	}#if _SFIO_H	sfvsprintf(s, sizeof(buf)-n, form, args);#else	vsprintf(s, form, args);#endif	if((n = strlen(buf)) > 0)	{	if(buf[n-1] != '\n')		{	buf[n] = '\n';			n += 1;		}		write(2,buf,n);	}}#if __STD_Cvoid tsterror(char* form, ...)#elsevoid tsterror(va_alist)va_dcl#endif{	char	failform[1024];	va_list	args;#if __STD_C	va_start(args,form);#else	char*	form;	va_start(args);	form = va_arg(args,char*);#endif#if _SFIO_H	sfsprintf(failform, sizeof(failform), "Failure: %s", form);#else	sprintf(failform, "Failure: %s", form);#endif	tstputmesg(Tstline,failform,args);	va_end(args);	tstcleanup();	exit(1);}#if __STD_Cvoid tstsuccess(char* form, ...)#elsevoid tstsuccess(va_alist)va_dcl#endif{	va_list	args;#if __STD_C	va_start(args,form);#else	char*	form;	va_start(args);	form = va_arg(args,char*);#endif	tstputmesg(Tstline,form,args);	va_end(args);	tstcleanup();	exit(0);}#if __STD_Cvoid tstwarn(char* form, ...)#elsevoid tstwarn(va_alist)va_dcl#endif{	va_list	args;#if __STD_C	va_start(args,form);#else	char*	form;	va_start(args);	form = va_arg(args,char*);#endif	tstputmesg(Tstline,form,args);	va_end(args);}#if __STD_Cstatic char* tstfile(int n)#elsestatic char* tstfile(n)int	n;#endif{	static int	Setatexit = 0;		if(!Setatexit)	{	Setatexit = 1;		atexit(tstcleanup);	}	if(n >= sizeof(Tstfile)/sizeof(Tstfile[0]))		terror("Bad temporary file request:%d\n", n);	if(!Tstfile[n][0])	{#ifdef DEBUG#if _SFIO_H		sfsprintf(Tstfile[n], sizeof(Tstfile[0]), "Tstfile.%c%c%c", '0'+n, '0'+n, '0'+n);#else		sprintf(Tstfile[n], "Tstfile.%c%c%c", '0'+n, '0'+n, '0'+n);#endif#else		static int	pid;		static char*	tmp;		if (!tmp)		{	if (!(tmp = (char*)getenv("TMPDIR")) || access(tmp, 0) != 0)				tmp = "/tmp";			pid = (int)getpid() % 10000;                }#if _SFIO_H                sfsprintf(Tstfile[n], sizeof(Tstfile[0]), "%s/sft.%c.%d", tmp, '0'+n, pid);#else                sprintf(Tstfile[n], "%s/sft.%c.%d", tmp, '0'+n, pid);#endif#endif	}	return Tstfile[n];}

⌨️ 快捷键说明

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