X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcerr.c;h=02b6a3bd0db0a388c25c5762f3acb97a46bd8b7f;hb=9a90bce10b932f8aa7045b9dceb4b99156666920;hp=3f7887bfc4324e7a901faf66e012ac8384747507;hpb=4ee27a568fb9222907a566e59aaefe248f08a8e4;p=YACASL2.git diff --git a/src/cerr.c b/src/cerr.c index 3f7887b..02b6a3b 100644 --- a/src/cerr.c +++ b/src/cerr.c @@ -1,16 +1,10 @@ #include "cerr.h" -/* mallocを実行し、メモリを確保できない場合は */ -/* エラーを出力して終了 */ -void *malloc_chk(size_t size, char *tag) +/* エラーの初期化 */ +void cerr_init() { - void *p; - - if((p = malloc(size)) == NULL) { - fprintf(stderr, "%s: cannot allocate memory\n", tag); - exit(-1); - } - return p; + cerr = malloc_chk(sizeof(CERR), "cerr"); + cerr->num = 0; } /* 現在のエラー */ @@ -47,7 +41,9 @@ bool addcerrlist(int newerrc, CERR newerrv[]) /* 現在のエラーを設定する */ void setcerr(int num, const char *str) { + /* 現在のエラー番号を設定 */ cerr->num = num; + /* 現在のエラーメッセージを設定 */ cerr->msg = malloc_chk(CERRMSGSIZE + 1, "cerr.msg"); if(str != NULL && strlen(str) <= CERRSTRSIZE) { sprintf(cerr->msg, "%s: %s", str, getcerrmsg(cerr->num)); @@ -66,7 +62,7 @@ char *getcerrmsg(int num) return p->cerr->msg; } } - return "unkown error"; + return "unknown error"; } /* エラーリストと現在のエラーを解放する */ @@ -77,9 +73,11 @@ void freecerr() /* エラーリストを解放 */ while(p != NULL) { q = p->next; - free(p); + free_chk(p, "freecerr.p"); p = q; } + /* 現在のエラーメッセージを解放 */ + free_chk(cerr->msg, "cerr.msg"); /* 現在のエラーを解放 */ - free(cerr); + free_chk(cerr, "cerr"); }