do {
/* オペランド数が多すぎる場合はエラー */
if(opd->opdc >= OPDSIZE) {
- setcerr(117, NULL); /* operand is too many */
+ setcerr(117, ""); /* operand is too many */
break;
}
- /* 先頭が「=」の場合 */
+ /* 先頭が等号(=)の場合 */
if(*r == '=') {
r++;
}
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[]");
break;
}
}
- if(*tokens != '\0') {
+ if(*tokens != '\n' && *tokens != '\0') {
p = tokens;
cmdl = malloc_chk(sizeof(CMDLINE), "cmdl");
/* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */
/* 命令とオペランドの取得 */
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");
while(*p == ' ' || *p == '\t') {
p++;
}
- /* 改行かタブまでの文字列を取得。
- 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
+ /* 改行かタブまでの文字列を取得 */
+ /* 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
if((sepp = p + strcspn(p, "\t\n")) > p) {
*sepp = '\0';
cmdl->opd = opdtok(p);