From: j8takagi Date: Sun, 7 Feb 2010 15:59:48 +0000 (+0900) Subject: ' '中に;が含まれる行を正しく処理できないバグを修正 X-Git-Tag: v0.1~48^2 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=94c85b53aa233dcb92d1db091f2104a5bab505fa;p=YACASL2.git ' '中に;が含まれる行を正しく処理できないバグを修正 --- diff --git a/src/token.c b/src/token.c index aa0a620..48ed6ec 100644 --- a/src/token.c +++ b/src/token.c @@ -58,18 +58,27 @@ OPD *opdtok(const char *str) CMDLINE *linetok(const char *line) { char *tokens, *p, *q, *sepp; + bool quote = false; CMDLINE *cmdl = malloc(sizeof(CMDLINE)); if(line == NULL || strlen(line) == 0) { return NULL; } tokens = p = strdup(line); - /* コメントを削除 */ - if((q = strchr(tokens, ';')) != NULL) { - *q = '\0'; - } + /* 空行の場合、NULLを返す */ if(*p == '\0') { return NULL; } + /* ' 'で囲まれていない;以降の文字列は、コメントとして削除 */ + while(p != NULL) { + if((q = strchr(tokens, '\'')) != NULL) { + quote = !quote; + p = q; + } + if(quote == false && (p = strchr(p, ';')) != NULL) { + *p = '\0'; + } + } + p = tokens; /* 行の先頭が空白またはタブの場合、ラベルは空 */ if((sepp = p + strcspn(p, " \t\n")) == p){ cmdl->label = NULL;