summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2008-10-28 10:17:50 +0000
committerJean Delvare <jdelvare@suse.de>2008-10-28 10:17:50 +0000
commit98d7d95d3a6d10a00838ad95d892ad9e936dc8ee (patch)
tree515bd3d469fdb6f47d68577ebb8a187436a789a5
parentc1666d8deb9f3e20b7b066df2417ce924586a2b8 (diff)
downloaddmidecode-git-98d7d95d3a6d10a00838ad95d892ad9e936dc8ee.tar.gz
When dumping the DMI table to a binary file, truncate the file first.
-rw-r--r--dmidecode.c6
-rw-r--r--util.c6
-rw-r--r--util.h2
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;
diff --git a/util.c b/util.c
index dfdc028..15d24a7 100644
--- a/util.c
+++ b/util.c
@@ -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);
diff --git a/util.h b/util.h
index 98b49c6..894bd2f 100644
--- a/util.h
+++ b/util.h
@@ -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);