summaryrefslogtreecommitdiff
path: root/navit/maptool/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/maptool/buffer.c')
-rw-r--r--navit/maptool/buffer.c120
1 files changed, 70 insertions, 50 deletions
diff --git a/navit/maptool/buffer.c b/navit/maptool/buffer.c
index 2907b0670..08f65f2b6 100644
--- a/navit/maptool/buffer.c
+++ b/navit/maptool/buffer.c
@@ -1,6 +1,6 @@
/**
* Navit, a modular navigation system.
- * Copyright (C) 2005-2011 Navit Team
+ * Copyright (C) 2005-2018 Navit Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -21,56 +21,76 @@
#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);
- dbg_assert(fseeko(f, offset, SEEK_SET)==0);
- dbg_assert(fwrite(b->base, b->size, 1, f)==1);
- fclose(f);
-}
+/**
+ * @brief Saves a buffer to a file
+ *
+ * This function saves a buffer to a file.
+ *
+ * @param filename The name of the while to where the buffer is saved to.
+ * @param b Buffer which is saved to file.
+ * @param offset
+ */
+void save_buffer(char *filename, struct buffer *b, long long offset) {
+ FILE *f;
+ f=fopen(filename,"rb+");
+ if (! f)
+ f=fopen(filename,"wb+");
-void
-load_buffer(char *filename, struct buffer *b, long long offset, long long size)
-{
- FILE *f;
- long long len;
- dbg_assert(size>=0);
- dbg_assert(offset>=0);
- if (b->base)
- free(b->base);
- b->malloced=0;
- f=fopen(filename,"rb");
- fseeko(f, 0, SEEK_END);
- len=ftello(f);
- dbg_assert(len>=0);
- if (offset+size > len) {
- size=len-offset;
- }
- b->size=b->malloced=size;
- dbg_assert(b->size>0);
-#if 0
- fprintf(stderr,"reading "LONGLONG_FMT" bytes from %s of "LONGLONG_FMT" bytes at "LONGLONG_FMT"\n", b->size, filename, len, offset);
-#endif
- fseeko(f, offset, SEEK_SET);
- b->base=malloc(b->size);
- dbg_assert(b->base != NULL);
- fread(b->base, b->size, 1, f);
- fclose(f);
+ dbg_assert(f != NULL);
+ dbg_assert(fseeko(f, offset, SEEK_SET)==0);
+ dbg_assert(fwrite(b->base, b->size, 1, f)==1);
+ fclose(f);
}
+/**
+ * @brief Loads a buffer from a file
+ *
+ * This function loads a buffer from a file.
+ *
+ * @param filename The name of the while to where the buffer is loaded from.
+ * @param b Buffer in which file is loaded.
+ * @param offset
+ * @return indicator if operation suceeded
+ */
+int load_buffer(char *filename, struct buffer *b, long long offset, long long size) {
+ FILE *f;
+ long long len;
+ dbg_assert(size>=0);
+ dbg_assert(offset>=0);
+ g_free(b->base);
+ b->malloced=0;
+ f=fopen(filename,"rb");
+ fseeko(f, 0, SEEK_END);
+ len=ftello(f);
+ dbg_assert(len>=0);
+ if (offset+size > len) {
+ size=len-offset;
+ }
+ b->size=b->malloced=size;
+ dbg_assert(b->size>0);
-long long
-sizeof_buffer(char *filename)
-{
- long long ret;
- FILE *f=fopen(filename,"rb");
- fseeko(f, 0, SEEK_END);
- ret=ftello(f);
- fclose(f);
- return ret;
+ fseeko(f, offset, SEEK_SET);
+ b->base=g_malloc(b->size);
+ if (fread(b->base, b->size, 1, f) == 0) {
+ dbg(lvl_warning, "fread failed");
+ fclose(f);
+ return 0;
+ }
+ fclose(f);
+ return 1;
+}
+/**
+ * @brief Determines size of buffer for file
+ *
+ * This function determines the size of the buffer required to read a file.
+ *
+ * @param filename Name of file for which the required size of the buffer is determined
+ * @return required size of buffer
+ */
+long long sizeof_buffer(char *filename) {
+ long long ret;
+ FILE *f=fopen(filename,"rb");
+ fseeko(f, 0, SEEK_END);
+ ret=ftello(f);
+ fclose(f);
+ return ret;
}