From: j8takagi Date: Wed, 27 Feb 2019 06:18:53 +0000 (+0900) Subject: Merge branch 'master' X-Git-Tag: v0.5p9~4 X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=commitdiff_plain;h=c05521d55d919d1707576f3dec6aa21ecd4cf5e1;hp=-c Merge branch 'master' --- c05521d55d919d1707576f3dec6aa21ecd4cf5e1 diff --combined src/casl2.c index e64105d,334e2a1..c7ef4f0 --- a/src/casl2.c +++ b/src/casl2.c @@@ -1,5 -1,6 +1,6 @@@ #include "package.h" #include "assemble.h" + #include "exec.h" /** * @brief CASL IIのエラーをエラーリストに追加 @@@ -15,7 -16,7 +16,7 @@@ void addcerrlist_casl2() * * @param *str ファイル名 */ -const char *objfile_name(const char *str); +char *objfile_name(const char *str); /** * @brief casl2コマンドのオプション @@@ -53,13 -54,10 +54,13 @@@ void addcerrlist_casl2( addcerrlist(ARRAYSIZE(cerr_casl2), cerr_casl2); } -const char *objfile_name(const char *str) +char *objfile_name(const char *name) { const char *default_name = "a.o"; - return (str == NULL) ? default_name : str; + return strdup_chk( + (name == NULL || !name[0]) ? default_name : name, + "objfile_name" + ); } /** @@@ -72,15 -70,9 +73,15 @@@ */ int main(int argc, char *argv[]) { - int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS, opt, i, stat = 0; - char *af[argc], *objfile = NULL; - const char *version = PACKAGE_VERSION, *cmdversion = "casl2 of YACASL2 version %s\n"; + int memsize = DEFAULT_MEMSIZE; + int clocks = DEFAULT_CLOCKS; + int opt = 0; + int stat = 0; + int asfilecnt = 0; + char **asfile = NULL; + char *objfile = NULL; + const char *version = PACKAGE_VERSION; + const char *cmdversion = "casl2 of YACASL2 version %s\n"; const char *usage = "Usage: %s [-slLaAtTdmvh] [-oO[]] [-M ] [-C ] FILE1[ FILE2 ...]\n"; @@@ -111,11 -103,11 +112,11 @@@ asmode.onlyassemble = true; break; case 'o': - objfile = strdup_chk(objfile_name(optarg), "objfile"); + objfile = objfile_name(optarg); break; case 'O': asmode.onlyassemble = true; - objfile = strdup_chk(objfile_name(optarg), "objfile"); + objfile = objfile_name(optarg); break; case 't': execmode.trace = true; @@@ -157,13 -149,11 +158,13 @@@ } create_cmdtable(HASH_CMDTYPE); /* 命令の名前とタイプがキーのハッシュ表を作成 */ reset(memsize, clocks); /* 仮想マシンCOMET IIのリセット */ - for(i = 0; i < argc - optind; i++) { /* 引数からファイル名配列を取得 */ - af[i] = argv[optind + i]; + asfilecnt = argc - optind; + asfile = calloc_chk(asfilecnt, sizeof(char *), "asfile"); + for(int i = 0; i < asfilecnt; i++) { /* 引数からファイル名配列を取得 */ + asfile[i] = argv[optind + i]; } /* アセンブル */ - if(assemble(i, af, 0) == false || asmode.onlylabel == true) { + if(assemble(asfilecnt, asfile, 0) == false || asmode.onlylabel == true) { goto shutdown; } /* オブジェクトファイル名が指定されている場合は、アセンブル結果をオブジェクトファイルに出力 */ @@@ -177,9 -167,8 +178,9 @@@ shutdown: shutdown(); /* 仮想マシンCOMET IIのシャットダウン */ casl2fin: - free_cmdtable(HASH_CMDTYPE); FREE(objfile); + FREE(asfile); + free_cmdtable(HASH_CMDTYPE); if(cerr->num > 0) { stat = 1; }