From: j8takagi <j8takagi@nifty.com> Date: Sun, 10 Feb 2019 01:40:01 +0000 (+0900) Subject: ソースコードの推敲 X-Git-Tag: v0.5p3~6 X-Git-Url: https://www.j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd0cec4b6ab0298d869e08a6b8bede963c5077f7;p=YACASL2.git ソースコードの推敲 --- diff --git a/src/token.c b/src/token.c index 450452b..b6d971c 100644 --- a/src/token.c +++ b/src/token.c @@ -102,7 +102,7 @@ void addcerrlist_tok() CMDLINE *linetok(const char *line) { - char *tok, *p; + char *tok = NULL, *p = NULL, *lbl = NULL; int i; bool quoting = false; CMDLINE *cmdl = NULL; @@ -122,30 +122,42 @@ CMDLINE *linetok(const char *line) break; } } + /* æååæ«å°¾ã®æ¹è¡ã¨ç©ºç½ãåé¤ */ + i = strlen(p) - 1; + while(i > 0 && (p[i] == '\n' || p[i] == ' ' || p[i] == '\t')) { + p[i--] = '\0'; + } + /* 空è¡ã®å ´åãçµäº */ if(!p[0] || p[0] == '\n') { goto linetokfin; } cmdl = malloc_chk(sizeof(CMDLINE), "cmdl"); - /* ã©ãã«ã®åå¾ãè¡ã®å é ã空ç½ã¾ãã¯ã¿ãã®å ´åãã©ãã«ã¯ç©º */ - if((i = strcspn(p, " \t\n")) == 0){ - cmdl->label = strdup_chk("", "cmdl->label"); - } else { /* ã©ãã«ãåå¾ */ + + /* ã©ãã«ã®åå¾ */ + /* è¡ã®å é ã空ç½ã¾ãã¯ã¿ãã®å ´åãã©ãã«ã¯ç©º */ + if((i = strcspn(p, " \t\n")) == 0) { + lbl = strdup_chk("", "linetok.lbl"); + } else { + lbl = strndup_chk(p, i, "linetok.lbl"); /* æååãé·ãããå ´åã¯ã¨ã©ã¼ */ if(i > LABELSIZE) { - setcerr(104, strndup_chk(p, i, "cerr")); /* label length is too long */ - } else { - cmdl->label = strndup_chk(p, i, "cmdl->label"); + setcerr(104, lbl); /* label length is too long */ + FREE(lbl); + goto linetokfin; } - /* æååã®å é ãã©ãã«ã®æ¬¡ã®æåã«ç§»å */ - p += i + 1; + /* æååå é ãã©ãã«ã®æ¬¡ã®æåã«ç§»å */ + p += i; } - /* æååã®å é ãããã©ãã«ã¨å½ä»¤ã®éã®ç©ºç½ãåé¤ */ + cmdl->label = lbl; + + /* å½ä»¤ã®åå¾ */ + /* æååå é ã®ãã©ãã«ã¨å½ä»¤ã®éã®ç©ºç½ãåé¤ */ for(i = 0; p[i] == ' ' || p[i] == '\t'; i++) { ; } p += i; - /* å½ä»¤ã¨ãªãã©ã³ãã®åå¾ */ - if(!p[0] || p[0] == '\n') { /* å½ä»¤ããªãå ´åã¯ãçµäº */ + /* å½ä»¤ããªãå ´åã¯ãçµäº */ + if(!p[0]) { if(cmdl->label) { /* ã©ãã«ãå®ç¾©ããã¦ãã¦å½ä»¤ããªãå ´åã¯ã¨ã©ã¼ */ setcerr(105, ""); /* no command in the line */ } @@ -153,24 +165,20 @@ CMDLINE *linetok(const char *line) FREE(cmdl); goto linetokfin; } - /* å½ä»¤ã®åå¾ */ - i = strcspn(p, " \t\n"); + /* å½ä»¤åå¾ã®å®è¡ */ + i = strcspn(p, " \t"); cmdl->cmd = strndup_chk(p, i, "cmdl.cmd"); + + /* ãªãã©ã³ãã®åå¾ */ /* æååã®å é ãå½ä»¤ã®æ¬¡ã®æåã«ç§»å */ p += i + 1; - /* æååã®å é ãããå½ä»¤ã¨ãªãã©ã³ãã®éã®ç©ºç½ãåé¤ */ + /* æååå é ã®ãå½ä»¤ã¨ãªãã©ã³ãã®éã®ç©ºç½ãåé¤ */ for(i = 0; p[i] == ' ' || p[i] == '\t'; i++) { ; } p += i; - /* æ¹è¡ãã¿ãã¾ã§ã®æååãåå¾ */ - /* ã'ãã§å²ã¾ããæååã«å«ã¾ããå ´åãããããã空ç½ã¯ç¡è¦ */ - if((i = strcspn(p, "\t\n")) > 0) { - cmdl->opd = opdtok(strndup_chk(p, i, "cmdl->opd")); - } else { - cmdl->opd = malloc_chk(sizeof(OPD), "cmdl->opd"); - cmdl->opd->opdc = 0; - } + /* ãªãã©ã³ãåå¾ã®å®è¡ */ + cmdl->opd = opdtok(p); linetokfin: FREE(tok); return cmdl;