X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftoken.c;h=dac982fdfcd21f8b71fbcf0e97763835485cce05;hb=80d4fc2d9a7022362c88cac0adbddd32ce7a3a62;hp=c7bfade2758a199720d68807aacc23721b91c8e3;hpb=6eb54846c27b216d7602a5107d9383f8f4324d71;p=YACASL2.git diff --git a/src/token.c b/src/token.c index c7bfade..dac982f 100644 --- a/src/token.c +++ b/src/token.c @@ -53,7 +53,7 @@ OPD *opdtok(const char *str) setcerr(117, NULL); /* operand is too many */ break; } - /* 先頭が「=」の場合 */ + /* 先頭が等号(=)の場合 */ if(*r == '=') { r++; } @@ -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"); /* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */ @@ -143,6 +143,7 @@ CMDLINE *linetok(const char *line) if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */ setcerr(105, NULL); /* 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; } }