From 876e1a4724a7bd75dc642e295de354241096e028 Mon Sep 17 00:00:00 2001 From: llornkcor Date: Fri, 20 Dec 2002 01:35:01 +0000 Subject: update - sorry it took so long. hope this works correctly --- (limited to 'noncore/apps/opie-reader/Bkmks.cpp') 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 #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; @@ -41,67 +72,93 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs) { if (m_name != NULL) { - delete [] m_name; - m_name = NULL; + delete [] m_name; + m_name = NULL; } if (m_anno != NULL) { - delete [] m_anno; - m_anno = NULL; + delete [] m_anno; + m_anno = NULL; } 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; + 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; + m_anno = NULL; m_position = rhs.m_position; return *this; } 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(unsigned char* t, unsigned short len) +{ + if (m_anno != NULL) + { + delete [] m_anno; + m_anno = NULL; + } + if (t != NULL) + { + 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; + delete [] m_anno; + m_anno = NULL; } 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]; + 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_anno = NULL; + { + 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) { if (w) { - f = fopen(fnm, "wb"); + f = fopen(fnm, "wb"); } else { - f = fopen(fnm, "rb"); + f = fopen(fnm, "rb"); } } @@ -110,55 +167,28 @@ 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& bl) { if (f != NULL) { - fwrite(&magic, sizeof(magic), 1, f); - for (CList::iterator i = bl.begin(); i != bl.end(); i++) - { - write(*i); - } - } -} - -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); - } + fwrite(&magic, sizeof(magic), 1, f); + for (CList::iterator i = bl.begin(); i != bl.end(); i++) + { + write(*i); + } } - return b; } CList* BkmkFile::readall() @@ -166,75 +196,127 @@ CList* BkmkFile::readall() CList* bl = NULL; if (f != NULL) { - unsigned long newmagic; - fread(&newmagic, sizeof(newmagic), 1, f); - if (newmagic != magic) - { - if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of OpieReader\ndid you upgrade from?", "0_4*", "Any other version") == 0) - { - fseek(f,0,SEEK_SET); - bl = readall04(); - } - else - { - fseek(f,0,SEEK_SET); - bl = readall03(); - } - isUpgraded = true; - } - else - { - bl = readall04(); - } + unsigned long newmagic; + fread(&newmagic, sizeof(newmagic), 1, f); + if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) + { + 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 = readall00(&read05); + } + else + { + fseek(f,0,SEEK_SET); + bl = readall00(&read03); + } + isUpgraded = true; + } + else + { + 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* BkmkFile::readall04() +CList* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) { CList* bl = new CList; while (1) { - Bkmk* b = read(); - if (b == NULL) break; - bl->push_back(*b); - delete b; + Bkmk* b = (*readfn)(f); + if (b == NULL) break; + bl->push_back(*b); + delete b; } return bl; } -CList* BkmkFile::readall03() +Bkmk* BkmkFile::read03(FILE* f) { - CList* bl = new CList; - 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) { - 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; + unsigned short ln; + if (fread(&ln,sizeof(ln),1,f) == 1) + { + 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; } -- cgit v0.9.0.2