Diffstat (limited to 'noncore/apps/opie-reader/Bkmks.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/Bkmks.cpp | 310 |
1 files changed, 196 insertions, 114 deletions
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp index 30d2881..998601a 100644 --- a/noncore/apps/opie-reader/Bkmks.cpp +++ b/noncore/apps/opie-reader/Bkmks.cpp | |||
@@ -1 +1,2 @@ | |||
1 | #include "name.h" | ||
1 | #include <qmessagebox.h> | 2 | #include <qmessagebox.h> |
@@ -11,2 +12,11 @@ const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned lo | |||
11 | 12 | ||
13 | Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p) | ||
14 | { | ||
15 | init(_nm, _nmlen, _anno, _annolen, _p); | ||
16 | } | ||
17 | |||
18 | Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p) | ||
19 | { | ||
20 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p); | ||
21 | } | ||
12 | 22 | ||
@@ -14,5 +24,2 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_ | |||
14 | { | 24 | { |
15 | int len = ustrlen(_nm)+1; | ||
16 | m_name = new tchar[len]; | ||
17 | for (int i = 0; i < len; i++) m_name[i] = _nm[i]; | ||
18 | 25 | ||
@@ -20,4 +27,4 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_ | |||
20 | { | 27 | { |
21 | m_anno = new tchar[1]; | 28 | tchar t = 0; |
22 | m_anno[0] = 0; | 29 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); |
23 | } | 30 | } |
@@ -25,5 +32,3 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_ | |||
25 | { | 32 | { |
26 | len = ustrlen(_anno)+1; | 33 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p); |
27 | m_anno = new tchar[len]; | ||
28 | for (int i = 0; i < len; i++) m_anno[i] = _anno[i]; | ||
29 | } | 34 | } |
@@ -31,2 +36,28 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_ | |||
31 | 36 | ||
37 | void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p) | ||
38 | { | ||
39 | m_namelen = _nmlen; | ||
40 | if (m_namelen > 0) | ||
41 | { | ||
42 | m_name = new unsigned char[m_namelen]; | ||
43 | memcpy(m_name, _nm, m_namelen); | ||
44 | } | ||
45 | else | ||
46 | { | ||
47 | m_name = NULL; | ||
48 | } | ||
49 | |||
50 | m_annolen = _annolen; | ||
51 | if (m_annolen > 0) | ||
52 | { | ||
53 | m_anno = new unsigned char[m_annolen]; | ||
54 | memcpy(m_anno, _anno, m_annolen); | ||
55 | } | ||
56 | else | ||
57 | { | ||
58 | m_anno = NULL; | ||
59 | } | ||
60 | m_position = _p; | ||
61 | } | ||
62 | |||
32 | Bkmk::~Bkmk() | 63 | Bkmk::~Bkmk() |
@@ -43,4 +74,4 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) | |||
43 | { | 74 | { |
44 | delete [] m_name; | 75 | delete [] m_name; |
45 | m_name = NULL; | 76 | m_name = NULL; |
46 | } | 77 | } |
@@ -48,4 +79,4 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) | |||
48 | { | 79 | { |
49 | delete [] m_anno; | 80 | delete [] m_anno; |
50 | m_anno = NULL; | 81 | m_anno = NULL; |
51 | } | 82 | } |
@@ -53,16 +84,16 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) | |||
53 | { | 84 | { |
54 | int len = ustrlen(rhs.m_name)+1; | 85 | m_namelen = rhs.m_namelen; |
55 | m_name = new tchar[len]; | 86 | m_name = new unsigned char[m_namelen]; |
56 | for (int i = 0; i < len; i++) m_name[i] = rhs.m_name[i]; | 87 | memcpy(m_name, rhs.m_name, m_namelen); |
57 | } | 88 | } |
58 | else | 89 | else |
59 | m_name = NULL; | 90 | m_name = NULL; |
60 | if (rhs.m_anno != NULL) | 91 | if (rhs.m_anno != NULL) |
61 | { | 92 | { |
62 | int len = ustrlen(rhs.m_anno)+1; | 93 | m_annolen = rhs.m_annolen; |
63 | m_anno = new tchar[len]; | 94 | m_anno = new unsigned char[m_annolen]; |
64 | for (int i = 0; i < len; i++) m_anno[i] = rhs.m_anno[i]; | 95 | memcpy(m_anno, rhs.m_anno, m_annolen); |
65 | } | 96 | } |
66 | else | 97 | else |
67 | m_anno = NULL; | 98 | m_anno = NULL; |
68 | m_position = rhs.m_position; | 99 | m_position = rhs.m_position; |
@@ -73,3 +104,24 @@ bool Bkmk::operator==(const Bkmk& rhs) | |||
73 | { | 104 | { |
74 | return (m_position == rhs.m_position && ustrcmp(m_name,rhs.m_name) == 0); | 105 | return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0); |
106 | } | ||
107 | |||
108 | void Bkmk::setAnno(unsigned char* t, unsigned short len) | ||
109 | { | ||
110 | if (m_anno != NULL) | ||
111 | { | ||
112 | delete [] m_anno; | ||
113 | m_anno = NULL; | ||
114 | } | ||
115 | if (t != NULL) | ||
116 | { | ||
117 | m_annolen = len; | ||
118 | m_anno = new unsigned char[m_annolen]; | ||
119 | memcpy(m_anno, t, m_annolen); | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | m_annolen = sizeof(tchar); | ||
124 | m_anno = new unsigned char[m_annolen]; | ||
125 | *((tchar*)m_anno) = 0; | ||
126 | } | ||
75 | } | 127 | } |
@@ -80,4 +132,4 @@ void Bkmk::setAnno(tchar* t) | |||
80 | { | 132 | { |
81 | delete [] m_anno; | 133 | delete [] m_anno; |
82 | m_anno = NULL; | 134 | m_anno = NULL; |
83 | } | 135 | } |
@@ -85,11 +137,16 @@ void Bkmk::setAnno(tchar* t) | |||
85 | { | 137 | { |
86 | int len = ustrlen(t)+1; | 138 | unsigned short len = ustrlen(t)+1; |
87 | m_anno = new tchar[len]; | 139 | m_annolen = sizeof(tchar)*len; |
88 | for (int i = 0; i < len; i++) m_anno[i] = t[i]; | 140 | m_anno = new unsigned char[m_annolen]; |
141 | memcpy(m_anno, t, m_annolen); | ||
89 | } | 142 | } |
90 | else | 143 | else |
91 | m_anno = NULL; | 144 | { |
145 | m_annolen = sizeof(tchar); | ||
146 | m_anno = new unsigned char[m_annolen]; | ||
147 | *((tchar*)m_anno) = 0; | ||
148 | } | ||
92 | } | 149 | } |
93 | 150 | ||
94 | BkmkFile::BkmkFile(const char *fnm, bool w ) | 151 | BkmkFile::BkmkFile(const char *fnm, bool w = false) |
95 | : | 152 | : |
@@ -99,3 +156,3 @@ BkmkFile::BkmkFile(const char *fnm, bool w ) | |||
99 | { | 156 | { |
100 | f = fopen(fnm, "wb"); | 157 | f = fopen(fnm, "wb"); |
101 | } | 158 | } |
@@ -103,3 +160,3 @@ BkmkFile::BkmkFile(const char *fnm, bool w ) | |||
103 | { | 160 | { |
104 | f = fopen(fnm, "rb"); | 161 | f = fopen(fnm, "rb"); |
105 | } | 162 | } |
@@ -112,3 +169,3 @@ BkmkFile::~BkmkFile() | |||
112 | 169 | ||
113 | void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) | 170 | void BkmkFile::write(const Bkmk& b) |
114 | { | 171 | { |
@@ -116,9 +173,7 @@ void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) | |||
116 | { | 173 | { |
117 | unsigned short ln = ustrlen(nm); | 174 | fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f); |
118 | fwrite(&ln,sizeof(ln),1,f); | 175 | fwrite(b.m_name,1,b.m_namelen,f); |
119 | fwrite(nm,sizeof(tchar),ln,f); | 176 | fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f); |
120 | ln = ustrlen(an); | 177 | fwrite(b.m_anno,1,b.m_annolen,f); |
121 | fwrite(&ln,sizeof(ln),1,f); | 178 | fwrite(&b.m_position,sizeof(b.m_position),1,f); |
122 | if (ln > 0) fwrite(an,sizeof(tchar),ln,f); | ||
123 | fwrite(&pos,sizeof(pos),1,f); | ||
124 | } | 179 | } |
@@ -126,4 +181,2 @@ void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) | |||
126 | 181 | ||
127 | void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); } | ||
128 | |||
129 | void BkmkFile::write(CList<Bkmk>& bl) | 182 | void BkmkFile::write(CList<Bkmk>& bl) |
@@ -132,31 +185,8 @@ void BkmkFile::write(CList<Bkmk>& bl) | |||
132 | { | 185 | { |
133 | fwrite(&magic, sizeof(magic), 1, f); | 186 | fwrite(&magic, sizeof(magic), 1, f); |
134 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) | 187 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) |
135 | { | 188 | { |
136 | write(*i); | 189 | write(*i); |
137 | } | 190 | } |
138 | } | ||
139 | } | ||
140 | |||
141 | Bkmk* BkmkFile::read() | ||
142 | { | ||
143 | Bkmk* b = NULL; | ||
144 | if (f != NULL) | ||
145 | { | ||
146 | unsigned short ln; | ||
147 | if (fread(&ln,sizeof(ln),1,f) == 1) | ||
148 | { | ||
149 | b = new Bkmk; | ||
150 | b->m_name = new tchar[ln+1]; | ||
151 | fread(b->m_name,sizeof(tchar),ln,f); | ||
152 | b->m_name[ln] = 0; | ||
153 | |||
154 | fread(&ln,sizeof(ln),1,f); | ||
155 | b->m_anno = new tchar[ln+1]; | ||
156 | if (ln > 0) fread(b->m_anno,sizeof(tchar),ln,f); | ||
157 | b->m_anno[ln] = 0; | ||
158 | fread(&b->m_position,sizeof(b->m_position),1,f); | ||
159 | } | ||
160 | } | 191 | } |
161 | return b; | ||
162 | } | 192 | } |
@@ -168,22 +198,38 @@ CList<Bkmk>* BkmkFile::readall() | |||
168 | { | 198 | { |
169 | unsigned long newmagic; | 199 | unsigned long newmagic; |
170 | fread(&newmagic, sizeof(newmagic), 1, f); | 200 | fread(&newmagic, sizeof(newmagic), 1, f); |
171 | if (newmagic != magic) | 201 | if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) |
172 | { | 202 | { |
173 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of OpieReader\ndid you upgrade from?", "0_4*", "Any other version") == 0) | 203 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0) |
174 | { | 204 | { |
175 | fseek(f,0,SEEK_SET); | 205 | fseek(f,0,SEEK_SET); |
176 | bl = readall04(); | 206 | bl = readall00(&read05); |
177 | } | 207 | } |
178 | else | 208 | else |
179 | { | 209 | { |
180 | fseek(f,0,SEEK_SET); | 210 | fseek(f,0,SEEK_SET); |
181 | bl = readall03(); | 211 | bl = readall00(&read03); |
182 | } | 212 | } |
183 | isUpgraded = true; | 213 | isUpgraded = true; |
184 | } | 214 | } |
185 | else | 215 | else |
186 | { | 216 | { |
187 | bl = readall04(); | 217 | switch(newmagic & 0xff) |
188 | } | 218 | { |
219 | case 6: | ||
220 | isUpgraded = false; | ||
221 | bl = readall00(read06); | ||
222 | qDebug("Correct version!"); | ||
223 | break; | ||
224 | case 5: | ||
225 | isUpgraded = true; | ||
226 | bl = readall00(read05); | ||
227 | qDebug("Known version!"); | ||
228 | break; | ||
229 | default: | ||
230 | qDebug("Unknown version!"); | ||
231 | isUpgraded = true; | ||
232 | bl = readall00(read05); | ||
233 | } | ||
234 | } | ||
189 | } | 235 | } |
@@ -192,3 +238,3 @@ CList<Bkmk>* BkmkFile::readall() | |||
192 | 238 | ||
193 | CList<Bkmk>* BkmkFile::readall04() | 239 | CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) |
194 | { | 240 | { |
@@ -197,6 +243,6 @@ CList<Bkmk>* BkmkFile::readall04() | |||
197 | { | 243 | { |
198 | Bkmk* b = read(); | 244 | Bkmk* b = (*readfn)(f); |
199 | if (b == NULL) break; | 245 | if (b == NULL) break; |
200 | bl->push_back(*b); | 246 | bl->push_back(*b); |
201 | delete b; | 247 | delete b; |
202 | } | 248 | } |
@@ -205,16 +251,27 @@ CList<Bkmk>* BkmkFile::readall04() | |||
205 | 251 | ||
206 | CList<Bkmk>* BkmkFile::readall03() | 252 | Bkmk* BkmkFile::read03(FILE* f) |
207 | { | 253 | { |
208 | CList<Bkmk>* bl = new CList<Bkmk>; | 254 | Bkmk* b = NULL; |
209 | while (1) | 255 | if (f != NULL) |
210 | { | 256 | { |
211 | Bkmk* b = read03(); | 257 | unsigned short ln; |
212 | if (b == NULL) break; | 258 | if (fread(&ln,sizeof(ln),1,f) == 1) |
213 | bl->push_back(*b); | 259 | { |
214 | delete b; | 260 | tchar* name = new tchar[ln+1]; |
261 | fread(name,sizeof(tchar),ln,f); | ||
262 | name[ln] = 0; | ||
263 | |||
264 | ln = 0; | ||
265 | tchar* anno = new tchar[ln+1]; | ||
266 | anno[ln] = 0; | ||
267 | |||
268 | unsigned int pos; | ||
269 | fread(&pos,sizeof(pos),1,f); | ||
270 | b = new Bkmk(name,anno,pos); | ||
271 | } | ||
215 | } | 272 | } |
216 | return bl; | 273 | return b; |
217 | } | 274 | } |
218 | 275 | ||
219 | Bkmk* BkmkFile::read03() | 276 | Bkmk* BkmkFile::read05(FILE* f) |
220 | { | 277 | { |
@@ -223,16 +280,41 @@ Bkmk* BkmkFile::read03() | |||
223 | { | 280 | { |
224 | unsigned short ln; | 281 | unsigned short ln; |
225 | if (fread(&ln,sizeof(ln),1,f) == 1) | 282 | if (fread(&ln,sizeof(ln),1,f) == 1) |
226 | { | 283 | { |
227 | b = new Bkmk; | 284 | tchar* nm = new tchar[ln+1]; |
228 | b->m_name = new tchar[ln+1]; | 285 | fread(nm,sizeof(tchar),ln,f); |
229 | fread(b->m_name,sizeof(tchar),ln,f); | 286 | nm[ln] = 0; |
230 | b->m_name[ln] = 0; | 287 | fread(&ln,sizeof(ln),1,f); |
288 | tchar* anno = new tchar[ln+1]; | ||
289 | if (ln > 0) fread(anno,sizeof(tchar),ln,f); | ||
290 | anno[ln] = 0; | ||
291 | unsigned int pos; | ||
292 | fread(&pos,sizeof(pos),1,f); | ||
293 | b = new Bkmk(nm,anno,pos); | ||
294 | } | ||
295 | } | ||
296 | return b; | ||
297 | } | ||
231 | 298 | ||
232 | ln = 0; | 299 | Bkmk* BkmkFile::read06(FILE* f) |
233 | b->m_anno = new tchar[ln+1]; | 300 | { |
234 | b->m_anno[ln] = 0; | 301 | Bkmk* b = NULL; |
302 | if (f != NULL) | ||
303 | { | ||
304 | unsigned short ln; | ||
305 | if (fread(&ln,sizeof(ln),1,f) == 1) | ||
306 | { | ||
307 | b = new Bkmk; | ||
308 | b->m_namelen = ln; | ||
309 | b->m_name = new unsigned char[b->m_namelen]; | ||
310 | fread(b->m_name,1,b->m_namelen,f); | ||
235 | 311 | ||
236 | fread(&b->m_position,sizeof(b->m_position),1,f); | 312 | fread(&(b->m_annolen),sizeof(b->m_annolen),1,f); |
237 | } | 313 | if (b->m_annolen > 0) |
314 | { | ||
315 | b->m_anno = new unsigned char[b->m_annolen]; | ||
316 | fread(b->m_anno,1,b->m_annolen,f); | ||
317 | } | ||
318 | fread(&(b->m_position),sizeof(b->m_position),1,f); | ||
319 | } | ||
238 | } | 320 | } |