X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Ftoken.c;h=fb35c8bf169b26872f2b8a464909751bc1e1ebbe;hp=c7bfade2758a199720d68807aacc23721b91c8e3;hb=f8636262f5c60efbb9d1c608e2276d359bc348a0;hpb=6eb54846c27b216d7602a5107d9383f8f4324d71 diff --git a/src/token.c b/src/token.c index c7bfade..fb35c8b 100644 --- a/src/token.c +++ b/src/token.c @@ -50,10 +50,10 @@ OPD *opdtok(const char *str) do { /* オペランド数が多すぎる場合はエラー */ if(opd->opdc >= OPDSIZE) { - setcerr(117, NULL); /* operand is too many */ + setcerr(117, ""); /* operand is too many */ break; } - /* 先頭が「=」の場合 */ + /* 先頭が等号(=)の場合 */ if(*r == '=') { r++; } @@ -80,11 +80,11 @@ OPD *opdtok(const char *str) sepc = *sepp; *sepp = '\0'; if(*q == '\0') { - setcerr(121, NULL); /* cannot get operand token */ + setcerr(121, ""); /* cannot get operand token */ break; } if(strlen(q) - rcnt > OPDSIZE) { - setcerr(118, NULL); /* operand length is too long */ + setcerr(118, ""); /* operand length is too long */ break; } opd->opdv[(++opd->opdc)-1] = strdup_chk(q, "opd.opdv[]"); @@ -105,7 +105,7 @@ CMDLINE *linetok(const char *line) bool quoting = false; CMDLINE *cmdl = NULL; - if(line == NULL || strlen(line) == 0) { + if(*line == '\0') { return NULL; } tokens = strdup_chk(line, "tokens"); @@ -119,7 +119,7 @@ CMDLINE *linetok(const char *line) break; } } - if(*tokens != '\0') { + if(*tokens != '\n' && *tokens != '\0') { p = tokens; cmdl = malloc_chk(sizeof(CMDLINE), "cmdl"); /* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */ @@ -141,8 +141,9 @@ CMDLINE *linetok(const char *line) /* 命令とオペランドの取得 */ if(*p == '\n' || *p == '\0') { /* 命令がない場合は、終了 */ if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */ - setcerr(105, NULL); /* no command in the line */ + setcerr(105, ""); /* no command in the line */ } + FREE(cmdl); } else { /* 命令の取得 */ sepp = p + strcspn(p, " \t\n"); @@ -153,13 +154,13 @@ CMDLINE *linetok(const char *line) while(*p == ' ' || *p == '\t') { p++; } - /* 改行かタブまでの文字列を取得。 - 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */ + /* 改行かタブまでの文字列を取得 */ + /* 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */ if((sepp = p + strcspn(p, "\t\n")) > p) { *sepp = '\0'; cmdl->opd = opdtok(p); } else { - cmdl->opd = malloc_chk(sizeof(OPD *), "cmdl.opd"); + cmdl->opd = malloc_chk(sizeof(OPD), "cmdl.opd"); cmdl->opd->opdc = 0; } }