author | llornkcor <llornkcor> | 2002-12-20 01:35:01 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-12-20 01:35:01 (UTC) |
commit | 876e1a4724a7bd75dc642e295de354241096e028 (patch) (side-by-side diff) | |
tree | a37c5dcc9d78e04bb6b859ab89d8cf81e6745087 /noncore/apps/opie-reader/Bkmks.cpp | |
parent | 5fd6636ba3d94b48dd543887316c47c5388a43c2 (diff) | |
download | opie-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.cpp | 236 |
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,3 +1,4 @@ +#include "name.h" #include <qmessagebox.h> #include "Bkmks.h" @@ -9,26 +10,56 @@ const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE); +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); +} Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p) { - int len = ustrlen(_nm)+1; - m_name = new tchar[len]; - for (int i = 0; i < len; i++) m_name[i] = _nm[i]; if (_anno == NULL) { - m_anno = new tchar[1]; - m_anno[0] = 0; + tchar t = 0; + init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); } else { - 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); } } +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() { if (m_name != NULL) delete [] m_name; @@ -51,17 +82,17 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) } if (rhs.m_name != NULL) { - 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); } else m_name = NULL; if (rhs.m_anno != NULL) { - 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); } else m_anno = NULL; @@ -71,10 +102,10 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) 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) { if (m_anno != NULL) { @@ -83,15 +114,41 @@ void Bkmk::setAnno(tchar* t) } if (t != NULL) { - 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) : wt(w), isUpgraded(false) { @@ -110,22 +167,18 @@ BkmkFile::~BkmkFile() if (f != NULL) fclose(f); } -void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) +void BkmkFile::write(const Bkmk& b) { if (f != NULL) { - 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); } } -void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); } - void BkmkFile::write(CList<Bkmk>& bl) { if (f != NULL) @@ -138,29 +191,6 @@ 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() { CList<Bkmk>* bl = NULL; @@ -168,34 +198,50 @@ CList<Bkmk>* BkmkFile::readall() { unsigned long newmagic; 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); } else { fseek(f,0,SEEK_SET); - bl = readall03(); + bl = readall00(&read03); } isUpgraded = true; } else { - 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); + } } } return bl; } -CList<Bkmk>* BkmkFile::readall04() +CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) { CList<Bkmk>* bl = new CList<Bkmk>; while (1) { - Bkmk* b = read(); + Bkmk* b = (*readfn)(f); if (b == NULL) break; bl->push_back(*b); delete b; @@ -203,20 +249,31 @@ CList<Bkmk>* BkmkFile::readall04() return bl; } -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) { Bkmk* b = NULL; if (f != NULL) @@ -224,16 +281,41 @@ Bkmk* BkmkFile::read03() 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; + 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); } } return b; |