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() { }