/[zanavi_public1]/navit/navit/maptool/buffer.c
ZANavi

Diff of /navit/navit/maptool/buffer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 35 Revision 36
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the 15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA. 17 * Boston, MA 02110-1301, USA.
18 */ 18 */
19
20#define _FILE_OFFSET_BITS 64
21#define _LARGEFILE_SOURCE
22#define _LARGEFILE64_SOURCE
19#include <stdlib.h> 23#include <stdlib.h>
20#include "maptool.h" 24#include "maptool.h"
21#include "debug.h" 25#include "debug.h"
22 26
23void 27void
25{ 29{
26 FILE *f; 30 FILE *f;
27 f=fopen(filename,"rb+"); 31 f=fopen(filename,"rb+");
28 if (! f) 32 if (! f)
29 f=fopen(filename,"wb+"); 33 f=fopen(filename,"wb+");
30 34
31 dbg_assert(f != NULL); 35 dbg_assert(f != NULL);
36
37 off_t offset_64=(off_t) offset;
38
39 fprintf(stderr,"save_buffer:seeking bytes in %s to "LONGLONG_FMT"\n", filename, offset_64);
40
41 int ret;
32 fseek(f, offset, SEEK_SET); 42 // ret=fseek(f, offset, SEEK_SET);
43 ret=fseeko(f, offset_64, SEEK_SET);
44 //fprintf(stderr,"ret.code of seek=%d\n", ret);
45 size_t ret2;
33 fwrite(b->base, b->size, 1, f); 46 ret2=fwrite(b->base, b->size, 1, f);
47 //fprintf(stderr,"ret.code of fwrite=%d\n", ret2);
34 fclose(f); 48 fclose(f);
35} 49}
36 50
37void 51void
38load_buffer(char *filename, struct buffer *b, long long offset, long long size) 52load_buffer(char *filename, struct buffer *b, long long offset, long long size)
39{ 53{
40 FILE *f; 54 FILE *f;
41 long long len; 55 long long len;
42 int ret; 56 int ret;
57
58 fprintf(stderr,"load_buffer:offset="LONGLONG_FMT" size="LONGLONG_FMT"\n", offset, size);
59
60 // fprintf(stderr,"load_buffer 1 buffer ptr=%d\n", b->base);
61
62 int reuse_buffer=0;
63
64 fprintf(stderr,"load_buffer:info has b->malloced=%d\n", b->malloced);
65 fprintf(stderr,"load_buffer:info has b->size="LONGLONG_FMT"\n", (size_t)b->size);
66 fprintf(stderr,"load_buffer:info want size="LONGLONG_FMT"\n", size);
43 if (b->base) 67 if (b->base)
68 {
69 if (size > b->size)
70 {
71 fprintf(stderr,"load_buffer:# freeing buffer #\n");
44 free(b->base); 72 free(b->base);
73 //fprintf(stderr,"load_buffer 2 buffer ptr=%d\n", b->base);
74 b->base=NULL;
75 }
76 else
77 {
78 fprintf(stderr,"load_buffer:@ re-using buffer @\n");
79 reuse_buffer=1;
80 }
81 }
82 else
83 {
84 //fprintf(stderr,"* no buffer to free *\n");
85 }
86 //fprintf(stderr,"load_buffer 3 buffer ptr=%d\n", b->base);
87
88 if (! reuse_buffer)
89 {
45 b->malloced=0; 90 b->malloced=0;
91 }
92
46 f=fopen(filename,"rb"); 93 f=fopen(filename,"rb");
47 fseek(f, 0, SEEK_END); 94 fseek(f, 0, SEEK_END);
48 len=ftell(f); 95 // len=ftell(f);
96 len=ftello(f); // 64bit
97 //fprintf(stderr,"load_buffer ftell="LONGLONG_FMT"\n", len);
49 if (offset+size > len) { 98 if (offset+size > len) {
50 size=len-offset; 99 size=len-offset;
100 //fprintf(stderr,"load_buffer new size="LONGLONG_FMT"\n", size);
51 ret=1; 101 ret=1;
52 } 102 }
103
104 b->size=size;
53 b->size=b->malloced=size; 105 b->malloced=size;
106
107
108 off_t offset_64=(off_t) offset;
54 fprintf(stderr,"reading "LONGLONG_FMT" bytes from %s at "LONGLONG_FMT"\n", b->size, filename, offset); 109 fprintf(stderr,"load_buffer:reading "LONGLONG_FMT" bytes from %s at "LONGLONG_FMT"\n", b->size, filename, offset_64);
110
111 int ret3;
55 fseek(f, offset, SEEK_SET); 112 // ret3=fseek(f, offset, SEEK_SET);
113 ret3=fseeko(f, offset_64, SEEK_SET); // 64bit
114 //fprintf(stderr,"ret.code of seek=%d\n", ret3);
115
116 if (! reuse_buffer)
117 {
56 b->base=malloc(b->size); 118 b->base=malloc((size_t)size);
119 fprintf(stderr,"load_buffer:ret.code of malloc=%d\n", b->base);
120 }
121
57 dbg_assert(b->base != NULL); 122 dbg_assert(b->base != NULL);
58 fread(b->base, b->size, 1, f); 123 fread(b->base, b->size, 1, f);
59 fclose(f); 124 fclose(f);
60} 125}

Legend:
Removed from v.35  
changed lines
  Added in v.36

   
Visit the ZANavi Wiki