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

Contents of /navit/navit/maptool/buffer.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (show annotations) (download)
Sat Mar 8 17:10:49 2014 UTC (10 years ago) by zoff99
File MIME type: text/plain
File size: 3249 byte(s)
new market version, lots of new features
1 /**
2 * Navit, a modular navigation system.
3 * Copyright (C) 2005-2011 Navit Team
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * version 2 as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #define _FILE_OFFSET_BITS 64
21 #define _LARGEFILE_SOURCE
22 #define _LARGEFILE64_SOURCE
23 #include <stdlib.h>
24 #include "maptool.h"
25 #include "debug.h"
26
27 void
28 save_buffer(char *filename, struct buffer *b, long long offset)
29 {
30 FILE *f;
31 f=fopen(filename,"rb+");
32 if (! f)
33 f=fopen(filename,"wb+");
34
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;
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;
46 ret2=fwrite(b->base, b->size, 1, f);
47 //fprintf(stderr,"ret.code of fwrite=%d\n", ret2);
48 fclose(f);
49 }
50
51 void
52 load_buffer(char *filename, struct buffer *b, long long offset, long long size)
53 {
54 FILE *f;
55 long long len;
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);
67 if (b->base)
68 {
69 if (size > b->size)
70 {
71 fprintf(stderr,"load_buffer:# freeing buffer #\n");
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 {
90 b->malloced=0;
91 }
92
93 f=fopen(filename,"rb");
94 fseek(f, 0, SEEK_END);
95 // len=ftell(f);
96 len=ftello(f); // 64bit
97 //fprintf(stderr,"load_buffer ftell="LONGLONG_FMT"\n", len);
98 if (offset+size > len) {
99 size=len-offset;
100 //fprintf(stderr,"load_buffer new size="LONGLONG_FMT"\n", size);
101 ret=1;
102 }
103
104 b->size=size;
105 b->malloced=size;
106
107
108 off_t offset_64=(off_t) 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;
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 {
118 b->base=malloc((size_t)size);
119 fprintf(stderr,"load_buffer:ret.code of malloc=%d\n", b->base);
120 }
121
122 dbg_assert(b->base != NULL);
123 fread(b->base, b->size, 1, f);
124 fclose(f);
125 }

   
Visit the ZANavi Wiki