X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcmem.c;fp=src%2Fcmem.c;h=b83c79c3dc546166d7208b95da0bf3bcb0525df6;hp=0000000000000000000000000000000000000000;hb=555c5e8b851becc08ba661a9cb19f617d5a00c12;hpb=de52e6f779e8682236319dd36180f1ab58ffeed9 diff --git a/src/cmem.c b/src/cmem.c new file mode 100644 index 0000000..b83c79c --- /dev/null +++ b/src/cmem.c @@ -0,0 +1,47 @@ +#include "cmem.h" + +/* mallocを実行し、0で初期化 */ +/* メモリを確保できない場合はエラーを出力して終了 */ +void *malloc_chk(size_t size, char *tag) +{ + void *p; + + if((p = malloc(size)) == NULL) { + fprintf(stderr, "%s: cannot allocate memory\n", tag); + exit(-1); + } + return memset(p, 0, size); +} + +/* 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; +} + +/* 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; +} + +/* メモリがNULLの場合は解放 */ +void free_chk(void *ptr, char *tag) +{ + if(ptr != NULL) { + free(ptr); + } +}