summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/Bkmks.cpp
authorllornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
committer llornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
commit876e1a4724a7bd75dc642e295de354241096e028 (patch) (side-by-side diff)
treea37c5dcc9d78e04bb6b859ab89d8cf81e6745087 /noncore/apps/opie-reader/Bkmks.cpp
parent5fd6636ba3d94b48dd543887316c47c5388a43c2 (diff)
downloadopie-876e1a4724a7bd75dc642e295de354241096e028.zip
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.gz
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.bz2
update - sorry it took so long. hope this works correctly
Diffstat (limited to 'noncore/apps/opie-reader/Bkmks.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-reader/Bkmks.cpp236
1 files changed, 159 insertions, 77 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 @@
+#include "name.h"
#include <qmessagebox.h>
@@ -11,2 +12,11 @@ const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned lo
+Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p)
+{
+ init(_nm, _nmlen, _anno, _annolen, _p);
+}
+
+Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p)
+{
+ init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p);
+}
@@ -14,5 +24,2 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_
{
- int len = ustrlen(_nm)+1;
- m_name = new tchar[len];
- for (int i = 0; i < len; i++) m_name[i] = _nm[i];
@@ -20,4 +27,4 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_
{
- m_anno = new tchar[1];
- m_anno[0] = 0;
+ tchar t = 0;
+ init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p);
}
@@ -25,5 +32,3 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_
{
- len = ustrlen(_anno)+1;
- m_anno = new tchar[len];
- for (int i = 0; i < len; i++) m_anno[i] = _anno[i];
+ init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p);
}
@@ -31,2 +36,28 @@ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_
+void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p)
+{
+ m_namelen = _nmlen;
+ if (m_namelen > 0)
+ {
+ m_name = new unsigned char[m_namelen];
+ memcpy(m_name, _nm, m_namelen);
+ }
+ else
+ {
+ m_name = NULL;
+ }
+
+ m_annolen = _annolen;
+ if (m_annolen > 0)
+ {
+ m_anno = new unsigned char[m_annolen];
+ memcpy(m_anno, _anno, m_annolen);
+ }
+ else
+ {
+ m_anno = NULL;
+ }
+ m_position = _p;
+}
+
Bkmk::~Bkmk()
@@ -53,5 +84,5 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs)
{
- int len = ustrlen(rhs.m_name)+1;
- m_name = new tchar[len];
- for (int i = 0; i < len; i++) m_name[i] = rhs.m_name[i];
+ m_namelen = rhs.m_namelen;
+ m_name = new unsigned char[m_namelen];
+ memcpy(m_name, rhs.m_name, m_namelen);
}
@@ -61,5 +92,5 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs)
{
- int len = ustrlen(rhs.m_anno)+1;
- m_anno = new tchar[len];
- for (int i = 0; i < len; i++) m_anno[i] = rhs.m_anno[i];
+ m_annolen = rhs.m_annolen;
+ m_anno = new unsigned char[m_annolen];
+ memcpy(m_anno, rhs.m_anno, m_annolen);
}
@@ -73,6 +104,6 @@ bool Bkmk::operator==(const Bkmk& rhs)
{
- return (m_position == rhs.m_position && ustrcmp(m_name,rhs.m_name) == 0);
+ return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0);
}
-void Bkmk::setAnno(tchar* t)
+void Bkmk::setAnno(unsigned char* t, unsigned short len)
{
@@ -85,11 +116,37 @@ void Bkmk::setAnno(tchar* t)
{
- int len = ustrlen(t)+1;
- m_anno = new tchar[len];
- for (int i = 0; i < len; i++) m_anno[i] = t[i];
+ m_annolen = len;
+ m_anno = new unsigned char[m_annolen];
+ memcpy(m_anno, t, m_annolen);
}
else
+ {
+ m_annolen = sizeof(tchar);
+ m_anno = new unsigned char[m_annolen];
+ *((tchar*)m_anno) = 0;
+ }
+}
+
+void Bkmk::setAnno(tchar* t)
+{
+ if (m_anno != NULL)
+ {
+ delete [] m_anno;
m_anno = NULL;
}
+ if (t != NULL)
+ {
+ unsigned short len = ustrlen(t)+1;
+ m_annolen = sizeof(tchar)*len;
+ m_anno = new unsigned char[m_annolen];
+ memcpy(m_anno, t, m_annolen);
+ }
+ else
+ {
+ m_annolen = sizeof(tchar);
+ m_anno = new unsigned char[m_annolen];
+ *((tchar*)m_anno) = 0;
+ }
+}
-BkmkFile::BkmkFile(const char *fnm, bool w )
+BkmkFile::BkmkFile(const char *fnm, bool w = false)
:
@@ -112,3 +169,3 @@ BkmkFile::~BkmkFile()
-void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos)
+void BkmkFile::write(const Bkmk& b)
{
@@ -116,9 +173,7 @@ void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos)
{
- unsigned short ln = ustrlen(nm);
- fwrite(&ln,sizeof(ln),1,f);
- fwrite(nm,sizeof(tchar),ln,f);
- ln = ustrlen(an);
- fwrite(&ln,sizeof(ln),1,f);
- if (ln > 0) fwrite(an,sizeof(tchar),ln,f);
- fwrite(&pos,sizeof(pos),1,f);
+ fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f);
+ fwrite(b.m_name,1,b.m_namelen,f);
+ fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f);
+ fwrite(b.m_anno,1,b.m_annolen,f);
+ fwrite(&b.m_position,sizeof(b.m_position),1,f);
}
@@ -126,4 +181,2 @@ void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos)
-void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); }
-
void BkmkFile::write(CList<Bkmk>& bl)
@@ -140,25 +193,2 @@ void BkmkFile::write(CList<Bkmk>& bl)
-Bkmk* BkmkFile::read()
-{
- Bkmk* b = NULL;
- if (f != NULL)
- {
- unsigned short ln;
- if (fread(&ln,sizeof(ln),1,f) == 1)
- {
- b = new Bkmk;
- b->m_name = new tchar[ln+1];
- fread(b->m_name,sizeof(tchar),ln,f);
- b->m_name[ln] = 0;
-
- fread(&ln,sizeof(ln),1,f);
- b->m_anno = new tchar[ln+1];
- if (ln > 0) fread(b->m_anno,sizeof(tchar),ln,f);
- b->m_anno[ln] = 0;
- fread(&b->m_position,sizeof(b->m_position),1,f);
- }
- }
- return b;
-}
-
CList<Bkmk>* BkmkFile::readall()
@@ -170,8 +200,8 @@ CList<Bkmk>* BkmkFile::readall()
fread(&newmagic, sizeof(newmagic), 1, f);
- if (newmagic != magic)
+ if ((newmagic & 0xffffff00) != (magic & 0xffffff00))
{
- if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of OpieReader\ndid you upgrade from?", "0_4*", "Any other version") == 0)
+ if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0)
{
fseek(f,0,SEEK_SET);
- bl = readall04();
+ bl = readall00(&read05);
}
@@ -180,3 +210,3 @@ CList<Bkmk>* BkmkFile::readall()
fseek(f,0,SEEK_SET);
- bl = readall03();
+ bl = readall00(&read03);
}
@@ -186,3 +216,19 @@ CList<Bkmk>* BkmkFile::readall()
{
- bl = readall04();
+ switch(newmagic & 0xff)
+ {
+ case 6:
+ isUpgraded = false;
+ bl = readall00(read06);
+ qDebug("Correct version!");
+ break;
+ case 5:
+ isUpgraded = true;
+ bl = readall00(read05);
+ qDebug("Known version!");
+ break;
+ default:
+ qDebug("Unknown version!");
+ isUpgraded = true;
+ bl = readall00(read05);
+ }
}
@@ -192,3 +238,3 @@ CList<Bkmk>* BkmkFile::readall()
-CList<Bkmk>* BkmkFile::readall04()
+CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*))
{
@@ -197,3 +243,3 @@ CList<Bkmk>* BkmkFile::readall04()
{
- Bkmk* b = read();
+ Bkmk* b = (*readfn)(f);
if (b == NULL) break;
@@ -205,16 +251,27 @@ CList<Bkmk>* BkmkFile::readall04()
-CList<Bkmk>* BkmkFile::readall03()
+Bkmk* BkmkFile::read03(FILE* f)
{
- CList<Bkmk>* bl = new CList<Bkmk>;
- while (1)
+ Bkmk* b = NULL;
+ if (f != NULL)
{
- Bkmk* b = read03();
- if (b == NULL) break;
- bl->push_back(*b);
- delete b;
+ unsigned short ln;
+ if (fread(&ln,sizeof(ln),1,f) == 1)
+ {
+ tchar* name = new tchar[ln+1];
+ fread(name,sizeof(tchar),ln,f);
+ name[ln] = 0;
+
+ ln = 0;
+ tchar* anno = new tchar[ln+1];
+ anno[ln] = 0;
+
+ unsigned int pos;
+ fread(&pos,sizeof(pos),1,f);
+ b = new Bkmk(name,anno,pos);
}
- return bl;
+ }
+ return b;
}
-Bkmk* BkmkFile::read03()
+Bkmk* BkmkFile::read05(FILE* f)
{
@@ -226,12 +283,37 @@ Bkmk* BkmkFile::read03()
{
- b = new Bkmk;
- b->m_name = new tchar[ln+1];
- fread(b->m_name,sizeof(tchar),ln,f);
- b->m_name[ln] = 0;
+ tchar* nm = new tchar[ln+1];
+ fread(nm,sizeof(tchar),ln,f);
+ nm[ln] = 0;
+ fread(&ln,sizeof(ln),1,f);
+ tchar* anno = new tchar[ln+1];
+ if (ln > 0) fread(anno,sizeof(tchar),ln,f);
+ anno[ln] = 0;
+ unsigned int pos;
+ fread(&pos,sizeof(pos),1,f);
+ b = new Bkmk(nm,anno,pos);
+ }
+ }
+ return b;
+}
- ln = 0;
- b->m_anno = new tchar[ln+1];
- b->m_anno[ln] = 0;
+Bkmk* BkmkFile::read06(FILE* f)
+{
+ Bkmk* b = NULL;
+ if (f != NULL)
+ {
+ unsigned short ln;
+ if (fread(&ln,sizeof(ln),1,f) == 1)
+ {
+ b = new Bkmk;
+ b->m_namelen = ln;
+ b->m_name = new unsigned char[b->m_namelen];
+ fread(b->m_name,1,b->m_namelen,f);
- fread(&b->m_position,sizeof(b->m_position),1,f);
+ fread(&(b->m_annolen),sizeof(b->m_annolen),1,f);
+ if (b->m_annolen > 0)
+ {
+ b->m_anno = new unsigned char[b->m_annolen];
+ fread(b->m_anno,1,b->m_annolen,f);
+ }
+ fread(&(b->m_position),sizeof(b->m_position),1,f);
}