From 7806157e15a8a3b1ef9a65764d88799a8d745176 Mon Sep 17 00:00:00 2001 From: Michael Haeckel Date: Sat, 1 Sep 2001 08:48:10 +0000 Subject: [PATCH] - Convert between little and big endian to keep compatible with the old index format until a better solution is found. - Regenerate the .sorted files, there we don't need to play the same game. svn path=/trunk/kdenetwork/kmail/; revision=112812 --- kmheaders.cpp | 2 +- kmmsgbase.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/kmheaders.cpp b/kmheaders.cpp index dca9ec2f9..174568cee 100644 --- a/kmheaders.cpp +++ b/kmheaders.cpp @@ -2559,7 +2559,7 @@ void KMHeaders::setSorting( int column, bool ascending ) } //Flatten the list and write it to disk -#define KMAIL_SORT_VERSION 1005 +#define KMAIL_SORT_VERSION 1006 #define KMAIL_SORT_FILE(x) x->indexLocation() + ".sorted" #define KMAIL_SORT_HEADER "## KMail Sort V%04d\n\t" #define KMAIL_MAGIC_HEADER_OFFSET 21 //strlen(KMAIL_SORT_HEADER) diff --git a/kmmsgbase.cpp b/kmmsgbase.cpp index 1052e223a..d5819333c 100644 --- a/kmmsgbase.cpp +++ b/kmmsgbase.cpp @@ -579,6 +579,18 @@ QCString KMMsgBase::encodeBase64(const QCString& aStr) return result; } +//----------------------------------------------------------------------------- +void swapEndian(QString &str) +{ + ushort us; + uint len = str.length(); + for (uint i = 0; i < len; i++) + { + us = str[i].unicode(); + str[i] = QChar(((us & 0xFF) << 8) + ((us & 0xFF00) >> 8)); + } +} + //----------------------------------------------------------------------------- static int g_chunk_length = 0, g_chunk_offset=0; static uchar *g_chunk = NULL; @@ -638,6 +650,7 @@ QString KMMsgBase::getStringPart(MsgPartType t) const g_chunk_length = 0; g_chunk = NULL; } + swapEndian(ret); return ret; } @@ -713,22 +726,29 @@ const uchar *KMMsgBase::asIndexString(int &length) const //these is at the beginning because it is queried quite often tmp_str = msgIdMD5().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgIdMD5Part, tmp_str.unicode(), tmp_str.length() * 2); tmp = status(); STORE_DATA(MsgStatusPart, tmp); //these are completely arbitrary order tmp_str = fromStrip().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgFromPart, tmp_str.unicode(), tmp_str.length() * 2); tmp_str = subject().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgSubjectPart, tmp_str.unicode(), tmp_str.length() * 2); tmp_str = toStrip().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgToPart, tmp_str.unicode(), tmp_str.length() * 2); tmp_str = replyToIdMD5().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgReplyToIdMD5Part, tmp_str.unicode(), tmp_str.length() * 2); tmp_str = xmark().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgXMarkPart, tmp_str.unicode(), tmp_str.length() * 2); tmp_str = fileName().stripWhiteSpace(); + swapEndian(tmp_str); STORE_DATA_LEN(MsgFilePart, tmp_str.unicode(), tmp_str.length() * 2); tmp = msgSize(); STORE_DATA(MsgSizePart, tmp);