From: j8takagi Date: Wed, 10 Feb 2010 14:25:30 +0000 (+0900) Subject: オペランド長取得時のバグを修正 X-Git-Tag: v0.1~52 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=992a77b00c9ac733943cefffb85894604b9a4ba4;p=YACASL2.git オペランド長取得時のバグを修正 --- diff --git a/src/token.c b/src/token.c index 2757a7b..3ea2073 100644 --- a/src/token.c +++ b/src/token.c @@ -6,7 +6,7 @@ OPD *opdtok(const char *str) { OPD *opd = malloc(sizeof(OPD)); char *p, *q, *sepp; - int sepc = ',', len = 0; + int sepc = ',', qcnt = 0; bool quoting = false; opd->opdc = 0; @@ -32,7 +32,7 @@ OPD *opdtok(const char *str) } /* 「'」の分、文字列の長さを小さくする */ if(*(q+1) != '\'') { - len--; + qcnt++; } } if(quoting == true) { @@ -50,13 +50,13 @@ OPD *opdtok(const char *str) setcerr(121, NULL); /* cannot get operand token */ break; } - len += strlen(p); - if(len > OPDSIZE) { + if(strlen(p) - qcnt > OPDSIZE) { setcerr(118, NULL); /* operand length is too long */ break; } opd->opdv[(++opd->opdc)-1] = strdup(p); p = q = sepp + 1; + qcnt = 0; } } while(sepc == ','); return opd;