diff options
author | Jean Delvare <jdelvare@suse.de> | 2008-02-16 18:12:35 +0000 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2008-02-16 18:12:35 +0000 |
commit | 4e721204a471e64c041a4c260707d0d52d1811e6 (patch) | |
tree | bbc22a0b6ef4dd7315490a785cdaf0d1f5fc4c29 /util.c | |
parent | 8c6bf0cea2a592591449c78e09570aa570987cc6 (diff) | |
download | dmidecode-git-4e721204a471e64c041a4c260707d0d52d1811e6.tar.gz |
New option --dump-bin, dump the DMI data to a sparse binary file.
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -163,3 +163,45 @@ 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) +{ + FILE *f; + + f=fopen(dumpfile, "r+b"); + if(!f && errno==ENOENT) + f=fopen(dumpfile, "wb"); + if(!f) + { + fprintf(stderr, "%s: ", dumpfile); + perror("fopen"); + return -1; + } + + if(fseek(f, base, SEEK_SET)!=0) + { + fprintf(stderr, "%s: ", dumpfile); + perror("fseek"); + goto err_close; + } + + if(fwrite(data, len, 1, f)!=1) + { + fprintf(stderr, "%s: ", dumpfile); + perror("fwrite"); + goto err_close; + } + + if(fclose(f)) + { + fprintf(stderr, "%s: ", dumpfile); + perror("fclose"); + return -1; + } + + return 0; + +err_close: + fclose(f); + return -1; +} |