diff options
Diffstat (limited to 'navit/maptool/buffer.c')
-rw-r--r-- | navit/maptool/buffer.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/navit/maptool/buffer.c b/navit/maptool/buffer.c new file mode 100644 index 00000000..ad64e9ec --- /dev/null +++ b/navit/maptool/buffer.c @@ -0,0 +1,42 @@ +#include <stdlib.h> +#include "maptool.h" +#include "debug.h" + +void +save_buffer(char *filename, struct buffer *b, long long offset) +{ + FILE *f; + f=fopen(filename,"rb+"); + if (! f) + f=fopen(filename,"wb+"); + + dbg_assert(f != NULL); + fseek(f, offset, SEEK_SET); + fwrite(b->base, b->size, 1, f); + fclose(f); +} + +void +load_buffer(char *filename, struct buffer *b, long long offset, long long size) +{ + FILE *f; + long long len; + int ret; + if (b->base) + free(b->base); + b->malloced=0; + f=fopen(filename,"rb"); + fseek(f, 0, SEEK_END); + len=ftell(f); + if (offset+size > len) { + size=len-offset; + ret=1; + } + b->size=b->malloced=size; + fprintf(stderr,"reading "LONGLONG_FMT" bytes from %s at "LONGLONG_FMT"\n", b->size, filename, offset); + fseek(f, offset, SEEK_SET); + b->base=malloc(b->size); + dbg_assert(b->base != NULL); + fread(b->base, b->size, 1, f); + fclose(f); +} |