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
/
cmd.c
diff --git
a/src/cmd.c
b/src/cmd.c
index
eff58de
..
add169a
100644
(file)
--- a/
src/cmd.c
+++ b/
src/cmd.c
@@
-48,17
+48,23
@@
CMDTAB **cmdtype_code, **code_type;
/* 命令と命令タイプからハッシュ値を生成する */
unsigned hash_cmdtype(const char *cmd, CMDTYPE type) {
HKEY *keys[2];
/* 命令と命令タイプからハッシュ値を生成する */
unsigned hash_cmdtype(const char *cmd, CMDTYPE type) {
HKEY *keys[2];
+ unsigned hashval;
/* 命令をセット */
/* 命令をセット */
- keys[0] = malloc_chk(sizeof(HKEY), "hash_cmdtype.key");
+ keys[0] = malloc_chk(sizeof(HKEY), "hash_cmdtype.key
s[0]
");
keys[0]->type = CHARS;
keys[0]->type = CHARS;
- keys[0]->val.s = strdup_chk(cmd, "keys[0].val");
+ keys[0]->val.s = strdup_chk(cmd, "keys[0].val
.s
");
/* 命令タイプをセット */
/* 命令タイプをセット */
- keys[1] = malloc_chk(sizeof(HKEY), "hash_cmdtype.key");
+ keys[1] = malloc_chk(sizeof(HKEY), "hash_cmdtype.key
s[1]
");
keys[1]->type = INT;
keys[1]->val.i = (int)(type & 070);
keys[1]->type = INT;
keys[1]->val.i = (int)(type & 070);
+ /* ハッシュ値の計算 */
+ hashval = hash(2, keys, cmdtabsize);
+ free_chk(keys[0]->val.s, "keys[0].val.s");
+ free_chk(keys[0], "keys[0]");
+ free_chk(keys[1], "keys[1]");
/* ハッシュ値を返す */
/* ハッシュ値を返す */
- return hash
(2, keys, cmdtabsize)
;
+ return hash
val
;
}
/* 命令と命令タイプがキーのハッシュ表を作成する */
}
/* 命令と命令タイプがキーのハッシュ表を作成する */
@@
-112,11
+118,11
@@
void free_cmdtype_code()
np = cmdtype_code[i];
while(np != NULL) {
nq = np->next;
np = cmdtype_code[i];
while(np != NULL) {
nq = np->next;
- free
(np
);
+ free
_chk(np, "free_cmdtype_code.np"
);
np = nq;
}
}
np = nq;
}
}
- free
(cmdtype_code
);
+ free
_chk(cmdtype_code, "cmdtype_code"
);
}
/* 命令コードからハッシュ値を生成する */
}
/* 命令コードからハッシュ値を生成する */