diff options
author | Jean Delvare <jdelvare@suse.de> | 2008-10-28 10:17:50 +0000 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2008-10-28 10:17:50 +0000 |
commit | 98d7d95d3a6d10a00838ad95d892ad9e936dc8ee (patch) | |
tree | 515bd3d469fdb6f47d68577ebb8a187436a789a5 | |
parent | c1666d8deb9f3e20b7b066df2417ce924586a2b8 (diff) | |
download | dmidecode-git-98d7d95d3a6d10a00838ad95d892ad9e936dc8ee.tar.gz |
When dumping the DMI table to a binary file, truncate the file first.
-rw-r--r-- | dmidecode.c | 6 | ||||
-rw-r--r-- | util.c | 6 | ||||
-rw-r--r-- | util.h | 2 |
3 files changed, 6 insertions, 8 deletions
diff --git a/dmidecode.c b/dmidecode.c index b85ef06..c0a2399 100644 --- a/dmidecode.c +++ b/dmidecode.c @@ -3802,7 +3802,7 @@ static void dmi_table_dump(u32 base, u16 len, const char *devmem) } printf("# Writing %d bytes to %s.\n", len, opt.dumpfile); - write_dump(32, len, buf, opt.dumpfile); + write_dump(32, len, buf, opt.dumpfile, 0); free(buf); } @@ -3967,7 +3967,7 @@ static int smbios_decode(u8 *buf, const char *devmem) overwrite_dmi_address(crafted + 0x10); printf("# Writing %d bytes to %s.\n", crafted[0x05], opt.dumpfile); - write_dump(0, crafted[0x05], crafted, opt.dumpfile); + write_dump(0, crafted[0x05], crafted, opt.dumpfile, 1); } return 1; @@ -3993,7 +3993,7 @@ static int legacy_decode(u8 *buf, const char *devmem) overwrite_dmi_address(crafted); printf("# Writing %d bytes to %s.\n", 0x0F, opt.dumpfile); - write_dump(0, 0x0F, crafted, opt.dumpfile); + write_dump(0, 0x0F, crafted, opt.dumpfile, 1); } return 1; @@ -164,13 +164,11 @@ void *mem_chunk(size_t base, size_t len, const char *devmem) return p; } -int write_dump(size_t base, size_t len, const void *data, const char *dumpfile) +int write_dump(size_t base, size_t len, const void *data, const char *dumpfile, int add) { FILE *f; - f=fopen(dumpfile, "r+b"); - if (!f && errno == ENOENT) - f = fopen(dumpfile, "wb"); + f = fopen(dumpfile, add ? "r+b" : "wb"); if (!f) { fprintf(stderr, "%s: ", dumpfile); @@ -26,4 +26,4 @@ int checksum(const u8 *buf, size_t len); void *mem_chunk(size_t base, size_t len, const char *devmem); -int write_dump(size_t base, size_t len, const void *data, const char *dumpfile); +int write_dump(size_t base, size_t len, const void *data, const char *dumpfile, int add); |