diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-12-18 16:00:57 -0800 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-12-18 16:00:57 -0800 |
| commit | 0e984e7e2ec4d4231494976a4f32f954795d8e4b (patch) | |
| tree | 48665a0c0648d25abd172893ef6c804facb70373 | |
| parent | 6054ffe3a23a647144a943ade3a7d7ce459e430e (diff) | |
| parent | b24848b6ab44a17bb0ce774f07fec2ae062e40e2 (diff) | |
| download | mruby-0e984e7e2ec4d4231494976a4f32f954795d8e4b.tar.gz mruby-0e984e7e2ec4d4231494976a4f32f954795d8e4b.zip | |
Merge pull request #643 from iij/pr-refactoring-dump
refactoring src/dump.c
| -rw-r--r-- | src/dump.c | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/src/dump.c b/src/dump.c index 241c97a43..c32703a17 100644 --- a/src/dump.c +++ b/src/dump.c @@ -495,6 +495,18 @@ calc_crc_section(mrb_state *mrb, mrb_irep *irep, uint16_t *crc, int section) return MRB_DUMP_OK; } +static uint16_t +calc_rite_header_crc(mrb_state *mrb, int top, rite_binary_header *binary_header, uint32_t rbds, int type) +{ + memcpy( binary_header, def_rite_binary_header, sizeof(*binary_header)); + + uint32_dump(rbds, (char*)binary_header->rbds, type); + uint16_dump((uint16_t)mrb->irep_len, (char*)binary_header->nirep, type); + uint16_dump((uint16_t)top, (char*)binary_header->sirep, type); + + return calc_crc_16_ccitt((unsigned char*)binary_header, sizeof(*binary_header)); +} + static int write_rite_header(mrb_state *mrb, int top, char* bin, uint32_t rbds) { @@ -503,14 +515,7 @@ write_rite_header(mrb_state *mrb, int top, char* bin, uint32_t rbds) int type = DUMP_TYPE_BIN; binary_header = (rite_binary_header*)bin; - - memcpy( binary_header, def_rite_binary_header, sizeof(*binary_header)); - - uint32_dump(rbds, (char*)binary_header->rbds, type); - uint16_dump((uint16_t)mrb->irep_len, (char*)binary_header->nirep, type); - uint16_dump((uint16_t)top, (char*)binary_header->sirep, type); - - crc = calc_crc_16_ccitt((unsigned char*)binary_header, sizeof(*binary_header)); + crc = calc_rite_header_crc(mrb, top, binary_header, rbds, type); bin += sizeof(*binary_header); uint16_dump(crc, bin, type); @@ -518,34 +523,41 @@ write_rite_header(mrb_state *mrb, int top, char* bin, uint32_t rbds) } static int -dump_rite_header(mrb_state *mrb, int top, FILE* fp, uint32_t rbds) +calc_rite_file_header(mrb_state *mrb, int top, uint32_t rbds, rite_file_header *file_header) { - rite_binary_header binary_header; - rite_file_header file_header; + rite_binary_header *binary_header, b_header; uint16_t crc; int type; - if (fseek(fp, 0, SEEK_SET) != 0) - return MRB_DUMP_GENERAL_FAILURE; - /* calc crc */ - memcpy( &binary_header, def_rite_binary_header, sizeof(binary_header)); - type = DUMP_TYPE_BIN; - uint32_dump(rbds, (char*)&binary_header.rbds, type); - uint16_dump((uint16_t)mrb->irep_len, (char*)&binary_header.nirep, type); - uint16_dump((uint16_t)top, (char*)&binary_header.sirep, type); - - crc = calc_crc_16_ccitt((unsigned char*)&binary_header, sizeof(binary_header)); + binary_header = &b_header; + crc = calc_rite_header_crc(mrb, top, binary_header, rbds, type); /* dump rbc header */ - memcpy( &file_header, def_rite_file_header, sizeof(file_header)); + memcpy( file_header, def_rite_file_header, sizeof(*file_header)); type = DUMP_TYPE_HEX; - uint32_dump(rbds, (char*)&file_header.rbds, type); - uint16_dump((uint16_t)mrb->irep_len, (char*)&file_header.nirep, type); - uint16_dump((uint16_t)top, (char*)&file_header.sirep, type); - uint16_dump(crc, (char*)&file_header.hcrc, type); + uint32_dump(rbds, (char*)file_header->rbds, type); + uint16_dump((uint16_t)mrb->irep_len, (char*)file_header->nirep, type); + uint16_dump((uint16_t)top, (char*)file_header->sirep, type); + uint16_dump(crc, (char*)file_header->hcrc, type); + + return MRB_DUMP_OK; +} + +static int +dump_rite_header(mrb_state *mrb, int top, FILE* fp, uint32_t rbds) +{ + int rc = MRB_DUMP_OK; + rite_file_header file_header; + + if (fseek(fp, 0, SEEK_SET) != 0) + return MRB_DUMP_GENERAL_FAILURE; + + rc = calc_rite_file_header(mrb, top, rbds, &file_header); + if (rc != MRB_DUMP_OK) + return rc; if (fwrite(&file_header, sizeof(file_header), 1, fp) != 1) return MRB_DUMP_WRITE_FAULT; |
