From 94c85b53aa233dcb92d1db091f2104a5bab505fa Mon Sep 17 00:00:00 2001 From: j8takagi Date: Mon, 8 Feb 2010 00:59:48 +0900 Subject: [PATCH] =?utf8?q?'=20'=E4=B8=AD=E3=81=AB;=E3=81=8C=E5=90=AB?= =?utf8?q?=E3=81=BE=E3=82=8C=E3=82=8B=E8=A1=8C=E3=82=92=E6=AD=A3=E3=81=97?= =?utf8?q?=E3=81=8F=E5=87=A6=E7=90=86=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84?= =?utf8?q?=E3=83=90=E3=82=B0=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/token.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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; -- 2.18.0