summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/Bkmks.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/Bkmks.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/Bkmks.cpp310
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
13Bkmk::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
18Bkmk::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
37void 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
32Bkmk::~Bkmk() 63Bkmk::~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
108void 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
94BkmkFile::BkmkFile(const char *fnm, bool w ) 151BkmkFile::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
113void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) 170void 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
127void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); }
128
129void BkmkFile::write(CList<Bkmk>& bl) 182void 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
141Bkmk* 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
193CList<Bkmk>* BkmkFile::readall04() 239CList<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
206CList<Bkmk>* BkmkFile::readall03() 252Bkmk* 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
219Bkmk* BkmkFile::read03() 276Bkmk* 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; 299Bkmk* 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 }