From: j8takagi Date: Thu, 2 Jul 2026 14:11:37 +0000 (+0900) Subject: disassemble.cの修正 X-Git-Tag: v0.6p06~3 X-Git-Url: https://j8takagi.net/gitweb?a=commitdiff_plain;h=95bb133704d91d8beaf5e321115bec1c1a9cda87;p=yacasl2.git disassemble.cの修正 https://claude.ai/share/20e6a70b-58be-4b90-8381-d7b6590aa5d8 --- diff --git a/src/disassemble.c b/src/disassemble.c index 455ed3d..b2500eb 100644 --- a/src/disassemble.c +++ b/src/disassemble.c @@ -5,15 +5,6 @@ */ int codecol = 32; -/** - * @brief ファイルストリームから1ワードを取得する - * - * @return 取得した1ワード - * - * @param stream ファイルストリーム - */ -WORD fgetword(FILE *stream); - /** * @brief WORDデータから、値が0のWORDがいくつ連続するか返す * @@ -138,13 +129,6 @@ void disassemble_ds(WORD wcnt, WORD pradr) } } -WORD fgetword(FILE *stream) -{ - WORD aword; - fread(&aword, sizeof(WORD), 1, stream); - return aword; -} - WORD zero_data_cnt(const WORD *data, WORD wordlen) { WORD cnt = 0; @@ -158,6 +142,7 @@ void disassemble_file(const char *file) { WORD *buf = NULL; WORD endptr = 0; + WORD w = 0; FILE *fp = NULL; assert(file != NULL); @@ -167,15 +152,18 @@ void disassemble_file(const char *file) } buf = calloc_chk(MAX_MEMSIZE, sizeof(WORD), "disassemble_file"); - for(WORD i = 0; !feof(fp); i++) { - buf[i] = fgetword(fp); - endptr = i; + while(fread(&w, sizeof(WORD), 1, fp) == 1) { + buf[endptr++] = w; } fclose(fp); - endptr--; - fprintf(stdout, "MAIN START\n"); - disassemble_memory(buf, 0, endptr); - fprintf(stdout, " END\n"); + if (endptr == 0) { + fprintf(stderr, "%s: empty or unreadable file\n", file); + } else { + fprintf(stdout, "MAIN START\n"); + disassemble_memory(buf, 0, endptr - 1); + fprintf(stdout, " END\n"); + } + free(buf); } void disassemble_memory(WORD *memory, WORD start, WORD end)