summaryrefslogtreecommitdiffstats
path: root/mimelib
diff options
context:
space:
mode:
Diffstat (limited to 'mimelib')
-rw-r--r--mimelib/COPYRIGHT13
-rw-r--r--mimelib/datetime.cpp5
-rw-r--r--mimelib/dw_cte.cpp14
-rw-r--r--mimelib/dw_date.cpp54
-rw-r--r--mimelib/dw_mime.cpp9
-rw-r--r--mimelib/dwstring.cpp2
-rw-r--r--mimelib/mimelib/address.h3
-rw-r--r--mimelib/mimelib/enum.h1
-rw-r--r--mimelib/mimelib/headers.h1
-rw-r--r--mimelib/mimelib/mailbox.h1
-rw-r--r--mimelib/mimelib/mboxlist.h1
-rw-r--r--mimelib/mimelib/msgcmp.h4
-rw-r--r--mimelib/mimelib/protocol.h1
-rw-r--r--mimelib/test_boyermor.cpp1
14 files changed, 75 insertions, 35 deletions
diff --git a/mimelib/COPYRIGHT b/mimelib/COPYRIGHT
new file mode 100644
index 000000000..75ab5778d
--- /dev/null
+++ b/mimelib/COPYRIGHT
@@ -0,0 +1,13 @@
+Copyright (c) 1996, 1997 Douglas W. Sauder
+All rights reserved.
+
+IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
+THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER
+HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT
+NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
+BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE,
+SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff --git a/mimelib/datetime.cpp b/mimelib/datetime.cpp
index a704e127b..64f2eef2e 100644
--- a/mimelib/datetime.cpp
+++ b/mimelib/datetime.cpp
@@ -125,7 +125,10 @@ void DwDateTime::Init()
DwUint32 t_local = my_inv_gmtime(&local);
DwUint32 t_utc = my_inv_gmtime(&utc);
sDefaultZone = (int) (t_local - t_utc)/60;
- sIsDefaultZoneSet = 1;
+
+ // do not flag this as it would never check the zone again, which
+ // would lead to wrong timediff on the DST/non-DST day change
+ //sIsDefaultZoneSet = 1;
}
// Set the time zone from the default time zone
mZone = sDefaultZone;
diff --git a/mimelib/dw_cte.cpp b/mimelib/dw_cte.cpp
index 6ebf07f50..4498597d3 100644
--- a/mimelib/dw_cte.cpp
+++ b/mimelib/dw_cte.cpp
@@ -60,7 +60,7 @@ int DwToCrLfEol(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
to_crlf(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
return 0;
@@ -78,7 +78,7 @@ int DwToLfEol(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
to_lf(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
return 0;
@@ -96,7 +96,7 @@ int DwToCrEol(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
to_cr(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
return 0;
@@ -129,7 +129,7 @@ int DwEncodeBase64(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
int result =
encode_base64(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
@@ -149,7 +149,7 @@ int DwDecodeBase64(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
int result =
decode_base64(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
@@ -170,7 +170,7 @@ int DwEncodeQuotedPrintable(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
int result =
encode_qp(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
@@ -190,7 +190,7 @@ int DwDecodeQuotedPrintable(const DwString& aSrcStr, DwString& aDestStr)
char* destBuf = (char*) destStr.data();
// Encode source to destination
- size_t destLen;
+ size_t destLen = 0;
int result =
decode_qp(srcBuf, srcLen, destBuf, destSize, &destLen);
aDestStr.assign(destStr, 0, destLen);
diff --git a/mimelib/dw_date.cpp b/mimelib/dw_date.cpp
index c8f89766c..e4436bbe7 100644
--- a/mimelib/dw_date.cpp
+++ b/mimelib/dw_date.cpp
@@ -246,7 +246,7 @@ int ParseRfc822Date(const char *str, struct tm *tms, int *z)
case 'O':
case 'o':
/* Oct */
- if ((str[pos+1] == 'c' || str[pos+1] == 'c')
+ if ((str[pos+1] == 'c' || str[pos+1] == 'C')
&& (str[pos+2] == 't' || str[pos+2] == 'T')) {
n = 9;
pos += 3;
@@ -713,6 +713,7 @@ int main()
// "WWW MMM dd HH:MM:SS [Z] YYYY" zone is optional
// e.g.: Fri Oct 14 09:21:49 CEST 2005
// or: Tue Mar 23 18:00:02 2004
+// also: Tue, Feb 04, 2003 00:01:20 +0000
#include <string.h>
#include <stdio.h>
@@ -733,6 +734,7 @@ int ParseDate(const char *str, struct tm *tms, int *z)
int day=1, month=0, year=1970, hour=0, minute=0, second=0, zone=0;
int i;
+ // check for week day
for (i = 0; i < 7; i++)
if ( strncmp(str, wdays[i], 3) == 0 )
break;
@@ -740,8 +742,10 @@ int ParseDate(const char *str, struct tm *tms, int *z)
if ( i == 7 )
return -1;
+ // check for month name
+ int offset = (str[3] == ',') ? 5 : 4; // allow weekday be terminated with ","
for (i = 0; i < 12; i++)
- if ( strncmp(str+4, months[i], 3) == 0 )
+ if ( strncmp(str+offset, months[i], 3) == 0 )
break;
if ( i == 12 )
@@ -749,27 +753,39 @@ int ParseDate(const char *str, struct tm *tms, int *z)
month = i;
- if ( sscanf(str+8, "%d %d:%d:%d", &day, &hour, &minute, &second) != 4 )
- return -1;
-
- if ( isdigit(str[20]) ) { // year without zone info, as in ctime()
- if ( sscanf(str+20, "%d", &year) != 1 )
- return -1;
+ // try "dd, YYYY HH:MM:SS +ZZZZ"
+ int h, m;
+ char sign;
+ if ( sscanf(str+offset+4, "%d, %d %d:%d:%d %c%2d%2d", &day, &year, &hour, &minute, &second, &sign, &h, &m) == 8 ) {
+ // ok, worked, calculate zone
+ zone = h * 60 + m;
+ if ( sign == '-' )
+ zone = -zone;
}
else {
- if ( sscanf(str+20, "%*s %d", &year) != 1 )
+ // try "dd HH:MM:SS"
+ if ( sscanf(str+8, "%d %d:%d:%d", &day, &hour, &minute, &second) != 4 )
return -1;
- if ( strncmp(str+20, "EST" , 3) == 0 ) zone = -5 * 60;
- else if ( strncmp(str+20, "EDT" , 3) == 0 ) zone = -4 * 60;
- else if ( strncmp(str+20, "CST" , 3) == 0 ) zone = -6 * 60;
- else if ( strncmp(str+20, "CDT" , 3) == 0 ) zone = -5 * 60;
- else if ( strncmp(str+20, "MST" , 3) == 0 ) zone = -7 * 60;
- else if ( strncmp(str+20, "MDT" , 3) == 0 ) zone = -6 * 60;
- else if ( strncmp(str+20, "PST" , 3) == 0 ) zone = -8 * 60;
- else if ( strncmp(str+20, "PDT" , 3) == 0 ) zone = -7 * 60;
- else if ( strncmp(str+20, "CET" , 3) == 0 ) zone = 60;
- else if ( strncmp(str+20, "CEST", 4) == 0 ) zone = 120;
+ if ( isdigit(str[20]) ) { // year without zone info, as in ctime()
+ if ( sscanf(str+20, "%d", &year) != 1 )
+ return -1;
+ }
+ else {
+ if ( sscanf(str+20, "%*s %d", &year) != 1 )
+ return -1;
+
+ if ( strncmp(str+20, "EST" , 3) == 0 ) zone = -5 * 60;
+ else if ( strncmp(str+20, "EDT" , 3) == 0 ) zone = -4 * 60;
+ else if ( strncmp(str+20, "CST" , 3) == 0 ) zone = -6 * 60;
+ else if ( strncmp(str+20, "CDT" , 3) == 0 ) zone = -5 * 60;
+ else if ( strncmp(str+20, "MST" , 3) == 0 ) zone = -7 * 60;
+ else if ( strncmp(str+20, "MDT" , 3) == 0 ) zone = -6 * 60;
+ else if ( strncmp(str+20, "PST" , 3) == 0 ) zone = -8 * 60;
+ else if ( strncmp(str+20, "PDT" , 3) == 0 ) zone = -7 * 60;
+ else if ( strncmp(str+20, "CET" , 3) == 0 ) zone = 60;
+ else if ( strncmp(str+20, "CEST", 4) == 0 ) zone = 120;
+ }
}
if ( (day < 1) || (day > 31) ||
diff --git a/mimelib/dw_mime.cpp b/mimelib/dw_mime.cpp
index 39f75f639..cca2fdede 100644
--- a/mimelib/dw_mime.cpp
+++ b/mimelib/dw_mime.cpp
@@ -215,6 +215,9 @@ int DwSubtypeStrToEnum(const DwString& aStr)
if (DwStrcasecmp(aStr, "digest") == 0) {
type = DwMime::kSubtypeDigest;
}
+ if (DwStrcasecmp(aStr, "directory") == 0) {
+ type = DwMime::kSubtypeDirectory;
+ }
else if (DwStrcasecmp(aStr, "disposition-notification") == 0 ) {
type = DwMime::kSubtypeDispositionNotification;
}
@@ -341,6 +344,9 @@ int DwSubtypeStrToEnum(const DwString& aStr)
if (DwStrcasecmp(aStr, "x-diff") == 0) {
type = DwMime::kSubtypeXDiff;
}
+ if (DwStrcasecmp(aStr, "x-vcalendar") == 0) {
+ type = DwMime::kSubtypeVCal;
+ }
break;
}
return type;
@@ -375,6 +381,9 @@ void DwSubtypeEnumToStr(int aEnum, DwString& aStr)
case DwMime::kSubtypeXVCard:
aStr = "X-VCard";
break;
+ case DwMime::kSubtypeDirectory:
+ aStr = "Directory";
+ break;
case DwMime::kSubtypeXDiff:
aStr = "X-Diff";
break;
diff --git a/mimelib/dwstring.cpp b/mimelib/dwstring.cpp
index cd3c7b1ab..749f7c8ee 100644
--- a/mimelib/dwstring.cpp
+++ b/mimelib/dwstring.cpp
@@ -399,7 +399,7 @@ DwString::DwString(const char* aCstr)
mStart = 0;
mLength = 0;
if ( aCstr ) {
- size_t len = (aCstr) ? strlen(aCstr) : 0;
+ size_t len = strlen(aCstr);
_replace(0, mLength, aCstr, len);
}
}
diff --git a/mimelib/mimelib/address.h b/mimelib/mimelib/address.h
index c384b949c..7ed56ba8c 100644
--- a/mimelib/mimelib/address.h
+++ b/mimelib/mimelib/address.h
@@ -36,7 +36,6 @@
#endif
class DwAddressList;
-class DwMailboxList;
//=============================================================================
//+ Name DwAddress -- Abstract class representing an RFC-822 address
@@ -149,7 +148,7 @@ protected:
inline DwBool DwAddress::IsValid() const
{
- return mIsValid;
+ return mIsValid != 0;
}
#endif
diff --git a/mimelib/mimelib/enum.h b/mimelib/mimelib/enum.h
index 9e2d0ee30..93cfe0106 100644
--- a/mimelib/mimelib/enum.h
+++ b/mimelib/mimelib/enum.h
@@ -78,6 +78,7 @@ enum {
kSubtypeEnriched,
kSubtypeHtml,
kSubtypeXVCard,
+ kSubtypeDirectory,
kSubtypeVCal,
kSubtypeRtf,
kSubtypeXDiff,
diff --git a/mimelib/mimelib/headers.h b/mimelib/mimelib/headers.h
index 8f802ce50..f545a3db2 100644
--- a/mimelib/mimelib/headers.h
+++ b/mimelib/mimelib/headers.h
@@ -67,7 +67,6 @@
#endif
class DwMessage;
-class DwBodyPart;
class DwField;
class DwFieldBody;
class DwDateTime;
diff --git a/mimelib/mimelib/mailbox.h b/mimelib/mimelib/mailbox.h
index d5d376f26..7e38ae4b4 100644
--- a/mimelib/mimelib/mailbox.h
+++ b/mimelib/mimelib/mailbox.h
@@ -35,7 +35,6 @@
#include <mimelib/address.h>
#endif
-class DwGroup;
//=============================================================================
//+ Name DwMailbox -- Class representing an RFC-822 mailbox
diff --git a/mimelib/mimelib/mboxlist.h b/mimelib/mimelib/mboxlist.h
index 0487d7510..723a8c55d 100644
--- a/mimelib/mimelib/mboxlist.h
+++ b/mimelib/mimelib/mboxlist.h
@@ -35,7 +35,6 @@
#include <mimelib/address.h>
#endif
-class DwGroup;
//=============================================================================
diff --git a/mimelib/mimelib/msgcmp.h b/mimelib/mimelib/msgcmp.h
index f1b284957..c9e6707ee 100644
--- a/mimelib/mimelib/msgcmp.h
+++ b/mimelib/mimelib/msgcmp.h
@@ -256,8 +256,8 @@ public:
//. Returns a object id that is unique among all DwMessageComponent
//. objects.
- const char* partId() const { return mId.c_str(); };
- void SetPartId( DwString id ) { mId = id; };
+ const char* partId() const { return mId.c_str(); }
+ void SetPartId( DwString id ) { mId = id; }
// set or get a unique string for that part
protected:
diff --git a/mimelib/mimelib/protocol.h b/mimelib/mimelib/protocol.h
index 151a68c5d..32186a82b 100644
--- a/mimelib/mimelib/protocol.h
+++ b/mimelib/mimelib/protocol.h
@@ -38,6 +38,7 @@
class DwObserver {
public:
+ virtual ~DwObserver(){}
virtual void Notify()=0;
};
diff --git a/mimelib/test_boyermor.cpp b/mimelib/test_boyermor.cpp
index 2140c4fdf..d2dcad80f 100644
--- a/mimelib/test_boyermor.cpp
+++ b/mimelib/test_boyermor.cpp
@@ -2,6 +2,7 @@
#include <mimelib/string.h>
#include <iostream>
+#include <cstdlib>
using std::cerr;
using std::cout;
using std::endl;