projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
メモリリークの修正
[YACASL2.git]
/
src
/
monitor.c
diff --git
a/src/monitor.c
b/src/monitor.c
index
ec24645
..
30893b6
100644
(file)
--- 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;
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");
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 = 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++;
}
/* 引数として、改行までの文字列を取得 */
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");
moncmdl->args = monargstok(p);
} else {
moncmdl->args = malloc_chk(sizeof(MONARGS), "moncmdl.args");
@@
-391,7
+396,7
@@
void monitor()
if(cmdtype == MONQUIT) {
shutdown();
freebps();
if(cmdtype == MONQUIT) {
shutdown();
freebps();
- free_cmdtable(HASH_C
OD
E);
+ free_cmdtable(HASH_C
MDTYP
E);
freecerr();
exit(0);
}
freecerr();
exit(0);
}