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

📄 error.c

📁 this is the file used to browse web
💻 C
字号:
#include "links.h"char dummy_val;volatile char *dummy_ptr = &dummy_val;void do_not_optimize_here(void *p){	*dummy_ptr = 0;	/* break ANSI aliasing */}#ifdef LEAK_DEBUGlong mem_amount = 0;long last_mem_amount = -1;#ifdef LEAK_DEBUG_LISTstruct list_head memory_list = { &memory_list, &memory_list };#endif#endifstatic inline void force_dump(){	fprintf(stderr, "\n\033[1m%s\033[0m\n", "Forcing core dump");	fflush(stdout);	fflush(stderr);	fatal_tty_exit();	raise(SIGSEGV);}void check_memory_leaks(){#ifdef LEAK_DEBUG	if (mem_amount) {		fprintf(stderr, "\n\033[1mMemory leak by %ld bytes\033[0m\n", mem_amount);#ifdef LEAK_DEBUG_LIST		fprintf(stderr, "\nList of blocks: ");		{			int r = 0;			struct alloc_header *ah;			foreach (ah, memory_list) {				fprintf(stderr, "%s%p:%d @ %s:%d", r ? ", ": "", (char *)ah + L_D_S, ah->size, ah->file, ah->line), r = 1;				if (ah->comment) fprintf(stderr, ":\"%s\"", ah->comment);			}			fprintf(stderr, "\n");		}#endif		force_dump();	}#endif}void er(int b, unsigned char *m, va_list l){	if (b) fprintf(stderr, "%c", (char)7);#ifdef HAVE_VPRINTF	vfprintf(stderr, m, l);#else	fprintf(stderr, "%s", m);#endif	fprintf(stderr, "\n");	sleep(1);}void error(unsigned char *m, ...){	va_list l;	va_start(l, m);	er(1, m, l);	va_end(l);}int errline;unsigned char *errfile;unsigned char errbuf[4096];void int_error(unsigned char *m, ...){	va_list l;	va_start(l, m);	sprintf(errbuf, "\033[1mINTERNAL ERROR\033[0m at %s:%d: ", errfile, errline);	strcat(errbuf, m);	er(1, errbuf, l);	force_dump();	va_end(l);}void debug_msg(unsigned char *m, ...){	va_list l;	va_start(l, m);	sprintf(errbuf, "DEBUG MESSAGE at %s:%d: ", errfile, errline);	strcat(errbuf, m);	er(0, errbuf, l);	va_end(l);}#ifdef LEAK_DEBUGvoid *debug_mem_alloc(unsigned char *file, int line, size_t size){	void *p;#ifdef LEAK_DEBUG	struct alloc_header *ah;#endif	if (!size) return DUMMY;	if (size > MAXINT) overalloc();#ifdef LEAK_DEBUG	mem_amount += size;	size += L_D_S;#endif	if (!(p = xmalloc(size))) {		error("ERROR: out of memory (malloc returned NULL)");		fatal_tty_exit();		exit(RET_FATAL);		return NULL;	}#ifdef LEAK_DEBUG	ah = p;	p = (char *)p + L_D_S;	ah->size = size - L_D_S;#ifdef LEAK_DEBUG_LIST	ah->file = file;	ah->line = line;	ah->comment = NULL;	add_to_list(memory_list, ah);#endif#endif	return p;}void debug_mem_free(unsigned char *file, int line, void *p){#ifdef LEAK_DEBUG	struct alloc_header *ah;#endif	if (p == DUMMY) return;	if (!p) {		errfile = file, errline = line, int_error("mem_free(NULL)");		return;	}#ifdef LEAK_DEBUG	p = (char *)p - L_D_S;	ah = p;#ifdef LEAK_DEBUG_LIST	del_from_list(ah);	if (ah->comment) free(ah->comment);#endif	mem_amount -= ah->size;#endif	xfree(p);}void *debug_mem_realloc(unsigned char *file, int line, void *p, size_t size){#ifdef LEAK_DEBUG	struct alloc_header *ah;#endif	if (p == DUMMY) return debug_mem_alloc(file, line, size);	if (!p) {		errfile = file, errline = line, int_error("mem_realloc(NULL, %d)", size);		return NULL;	}	if (!size) {		debug_mem_free(file, line, p);		return DUMMY;	}	if (size > MAXINT) overalloc();	if (!(p = xrealloc((char *)p - L_D_S, size + L_D_S))) {		error("ERROR: out of memory (realloc returned NULL)");		fatal_tty_exit();		exit(RET_FATAL);		return NULL;	}#ifdef LEAK_DEBUG	ah = p;	mem_amount += size - ah->size;	ah->size = size;#ifdef LEAK_DEBUG_LIST	ah->prev->next = ah;	ah->next->prev = ah;#endif#endif	return (char *)p + L_D_S;}void set_mem_comment(void *p, unsigned char *c, int l){#ifdef LEAK_DEBUG_LIST	struct alloc_header *ah = (struct alloc_header *)((char *)p - L_D_S);	if (ah->comment) free(ah->comment);	if ((ah->comment = malloc(l + 1))) memcpy(ah->comment, c, l), ah->comment[l] = 0;#endif}#endif

⌨️ 快捷键说明

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