xatexit.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 83 行
C
83 行
/* * Copyright (c) 1990 Regents of the University of California. * All rights reserved. * * %sccs.include.redist.c% *//* Adapted from newlib/libc/stdlib/{,at}exit.[ch]. If you use xatexit, you must call xexit instead of exit. */#include "ansidecl.h"#include "libiberty.h"#include <stdio.h>#ifdef __STDC__#include <stddef.h>#else#define size_t unsigned long#endif/* For systems with larger pointers than ints, this must be declared. */PTR malloc PARAMS ((size_t));static void xatexit_cleanup PARAMS ((void));/* Pointer to function run by xexit. */extern void (*_xexit_cleanup) PARAMS ((void));#define XATEXIT_SIZE 32struct xatexit { struct xatexit *next; /* next in list */ int ind; /* next index in this table */ void (*fns[XATEXIT_SIZE]) PARAMS ((void)); /* the table itself */};/* Allocate one struct statically to guarantee that we can register at least a few handlers. */static struct xatexit xatexit_first;/* Points to head of LIFO stack. */static struct xatexit *xatexit_head = &xatexit_first;/* Register function FN to be run by xexit. Return 0 if successful, -1 if not. */intxatexit (fn) void (*fn) PARAMS ((void));{ register struct xatexit *p; /* Tell xexit to call xatexit_cleanup. */ if (!_xexit_cleanup) _xexit_cleanup = xatexit_cleanup; p = xatexit_head; if (p->ind >= XATEXIT_SIZE) { if ((p = (struct xatexit *) malloc (sizeof *p)) == NULL) return -1; p->ind = 0; p->next = xatexit_head; xatexit_head = p; } p->fns[p->ind++] = fn; return 0;}/* Call any cleanup functions. */static voidxatexit_cleanup (){ register struct xatexit *p; register int n; for (p = xatexit_head; p; p = p->next) for (n = p->ind; --n >= 0;) (*p->fns[n]) ();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?