X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmonitor.c;h=d02a435307f72df714823a86bcfcd3e08507f6b7;hb=a7982d41c9809fdddbc5bac27c9d08b8a9d05012;hp=ec2464546839fcc6ff1ad16dddf0be605ec2a6f4;hpb=fc19bbf28ea2fdd9e42bc0c93ca49651aef8a752;p=YACASL2.git diff --git a/src/monitor.c b/src/monitor.c index ec24645..d02a435 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -145,24 +145,29 @@ MONARGS *monargstok(const char *str) MONCMDLINE *monlinetok(const char *line) { char *tokens, *p; - long l; + int i; MONCMDLINE *moncmdl = NULL; if(!line[0] || line[0] == '\n') { return NULL; } p = tokens = strdup_chk(line, "tokens"); + /* コメントを削除 */ + strip_casl2_comment(p); + /* 文字列末尾の改行と空白を削除 */ + strip_end(p); + moncmdl = malloc_chk(sizeof(MONCMDLINE), "moncmdl"); /* コマンドの取得 */ - moncmdl->cmd = malloc_chk((l = strcspn(p, " \t\n")) + 1, "moncmdl.cmd"); - strncpy(moncmdl->cmd, p, l); + i = strcspn(p, " \t\n"); + moncmdl->cmd = strndup_chk(p, i, "moncmdl->cmd"); /* コマンドと引数の間の空白をスキップ */ - p += l; + p += i; while(*p == ' ' || *p == '\t') { p++; } /* 引数として、改行までの文字列を取得 */ - if((l = strcspn(p, "\n")) > 0) { + if(strcspn(p, "\n") > 0) { moncmdl->args = monargstok(p); } else { moncmdl->args = malloc_chk(sizeof(MONARGS), "moncmdl.args"); @@ -365,10 +370,23 @@ void free_moncmdline(MONCMDLINE *moncmdl) } } +int monquit() +{ + int stat = 0; + shutdown(); + freebps(); + free_cmdtable(HASH_CMDTYPE); + free_cmdtable(HASH_CODE); + if(cerr->num > 0) { + stat = 1; + } + freecerr(); + return stat; +} + void monitor() { char *buf = NULL; - int i; MONCMDLINE *moncmdl; MONCMDTYPE cmdtype = MONREPEAT; @@ -380,20 +398,14 @@ void monitor() if(!buf[0]) { cmdtype = MONQUIT; } - if((i = strcspn(buf, "\n")) > 0 || buf[0] == '\n') { - buf[i] = '\0'; - } + strip_end(buf); /* 文字列末尾の改行と空白を削除 */ if((moncmdl = monlinetok(buf)) != NULL) { cmdtype = monitorcmd(moncmdl->cmd, moncmdl->args); free_moncmdline(moncmdl); } FREE(buf); if(cmdtype == MONQUIT) { - shutdown(); - freebps(); - free_cmdtable(HASH_CODE); - freecerr(); - exit(0); + exit(monquit()); } } while(cmdtype == MONREPEAT); }