3 void *malloc_chk(size_t size, const char *tag)
7 if((p = malloc(size)) == NULL) {
8 fprintf(stderr, "%s: cannot allocate memory\n", tag);
11 return memset(p, 0, size);
14 void *calloc_chk(size_t nmemb, size_t size, const char *tag)
18 if((p = calloc(nmemb, size)) == NULL) {
19 fprintf(stderr, "%s: cannot allocate memory\n", tag);
25 char *strdup_chk(const char *s, const char *tag)
28 char *t = malloc_chk(strlen(s) + 1, tag);
33 char *strndup_chk(const char *s, size_t len, const char *tag)
39 t = malloc_chk(len + 1, tag);
43 t = strdup_chk(s, tag);
48 void strip_end(char *s)
50 for(int i = strlen(s) - 1; i > 0 && (s[i] == '\n' || s[i] == '\r' || s[i] == ' ' || s[i] == '\t'); i--) {
55 void strip_casl2_comment(char *s)
59 for(int i = 0; s[i]; i++) {
60 /* 「'」で囲まれた文字列の場合。「''」は無視 */
61 if(s[i] == '\'' && s[i+1] != '\'' && (quoting == false || s[i-1] != '\'')) {
63 /* 「'」で囲まれた文字列でない場合、文字列末尾の「;」以降を削除 */
64 } else if(quoting == false && s[i] == ';') {
71 char *strrev(const char *s)
73 char *t = strdup_chk(s, "strrev.t");
76 for(int i = 0; i < l-1-i; i++) {