www.pudn.com > ASM86_64.rar > error.c


#include "a64-2.h"
#include "error.h"
#include 



/* global error struct link */
static struct err_struct *err_link = 0;


/* the error link struct pool */
static struct err_struct err_pool[32];

static unsigned int err_struct_present = 0;

static char err_msg[ERR_MSG_SIZE];

static struct err_struct *get_err_struct()
{
	int i = 0; 
	int j = 0;

	/* test err_struct_present's bit is used ? */
	while ((i < 32) && ((j = (1<errno -  (unsigned long)&err_pool[0]) 
		/ sizeof(struct err_struct);
	
	return 0;
}

#endif

#if 0
main()
{

	char msg[128];
	sprintf(msg, "at %d lines: %s\n", 1, "parse error");
	mount_err_link(0,0,msg);

	print_err();

}

#endif

int mount_err_link(errno_t errno, char *err_msg[], char *err_info)
{
	struct err_struct *err_lk = err_link;

	struct err_struct *tmp_lk = get_err_struct();

	if (!tmp_lk)
		return 1;

	if ((!errno && err_msg) || (errno && !err_msg))
		return -1;

	tmp_lk->errno = errno;
	tmp_lk->err_msg = err_msg;
	tmp_lk->err_info = err_info;


	if (!err_link) {
		err_link = tmp_lk;
	} else {
		while (err_lk->next)
			err_lk = err_lk->next;

		err_lk->next = tmp_lk;
	}

	return 0;
}


__inline__ char *get_err_msg_addr()
{
	return err_msg;
}

static void print_err_msg(struct err_struct *err)
{

	if (err) 
		PRINT_ERRMSG(err->errno, err->err_msg);
}

void print_err()
{
	for ( ; err_link; err_link = err_link->next) {
		fprintf(stderr, 
			err_link->err_info ? err_link->err_info: "");
		print_err_msg(err_link);
	}
}

void release_err_link()
{
}