diff options
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; +} |