X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcerr.c;h=990673900bb3d2ad61b73abe082d92581c949c10;hb=205ee1afdbd7eaffa3a12febfaa560c89280e7dd;hp=3f7887bfc4324e7a901faf66e012ac8384747507;hpb=4ee27a568fb9222907a566e59aaefe248f08a8e4;p=YACASL2.git diff --git a/src/cerr.c b/src/cerr.c index 3f7887b..9906739 100644 --- a/src/cerr.c +++ b/src/cerr.c @@ -13,6 +13,38 @@ void *malloc_chk(size_t size, char *tag) return p; } +/* callocを実行し、メモリを確保できない場合は */ +/* エラーを出力して終了 */ +void *calloc_chk(size_t nmemb, size_t size, char *tag) +{ + void *p; + + if((p = calloc(nmemb, size)) == NULL) { + fprintf(stderr, "%s: cannot allocate memory\n", tag); + exit(-1); + } + return p; +} + +/* エラーの初期化 */ +void cerr_init() +{ + cerr = malloc_chk(sizeof(CERR), "cerr"); + cerr->num = 0; +} + +/* malloc_chkを実行してメモリを確保してから、 */ +/* コピーした文字列を返す */ +char *strdup_chk(const char *s, char *tag) +{ + assert(s != NULL); + char *t; + + t = malloc_chk(strlen(s) + 1, tag); + strcpy(t, s); + return t; +} + /* 現在のエラー */ CERR *cerr; @@ -66,7 +98,7 @@ char *getcerrmsg(int num) return p->cerr->msg; } } - return "unkown error"; + return "unknown error"; } /* エラーリストと現在のエラーを解放する */