summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/backend/vobject.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/library/backend/vobject.cpp b/library/backend/vobject.cpp
index 2f22c20..2c5b577 100644
--- a/library/backend/vobject.cpp
+++ b/library/backend/vobject.cpp
@@ -1008,110 +1008,136 @@ static int writeBase64(OFile *fp, unsigned char *s, long len)
1008static const char *replaceChar(unsigned char c) 1008static const char *replaceChar(unsigned char c)
1009{ 1009{
1010 if (c == '\n') { 1010 if (c == '\n') {
1011 return "=0A=\n"; 1011 return "=0A=\n";
1012 } else if ( 1012 } else if (
1013 (c >= 'A' && c <= 'Z') 1013 (c >= 'A' && c <= 'Z')
1014 || 1014 ||
1015 (c >= 'a' && c <= 'z') 1015 (c >= 'a' && c <= 'z')
1016 || 1016 ||
1017 (c >= '0' && c <= '9') 1017 (c >= '0' && c <= '9')
1018 || 1018 ||
1019 (c >= '\'' && c <= ')') 1019 (c >= '\'' && c <= ')')
1020 || 1020 ||
1021 (c >= '+' && c <= '-') 1021 (c >= '+' && c <= '-')
1022 || 1022 ||
1023 (c == '/') 1023 (c == '/')
1024 || 1024 ||
1025 (c == '?') 1025 (c == '?')
1026 || 1026 ||
1027 (c == ' ')) 1027 (c == ' '))
1028 { 1028 {
1029 return 0; 1029 return 0;
1030 } 1030 }
1031 1031
1032#warning "Bug-Workaround must be fixed !"
1033 // IF THIS FUNCTION RETURNES TRUE, THE DATA IS EXPORTED
1034 // AS QUOTED PRINTABLE.
1035 // BUT THE PARSER IS UNABLE TO IMPORT THIS, THEREFORE
1036 // I DECIDED TO DISABLE IT UNTIL TROLLTECH FIXES THIS BUG
1037 // SEE ALSO includesUnprintable(VObject *o)
1038 // (se)
1039
1040 return 0;
1041
1042#if 0
1032 static char trans[4]; 1043 static char trans[4];
1033 trans[0] = '='; 1044 trans[0] = '=';
1034 trans[3] = '\0'; 1045 trans[3] = '\0';
1035 int rem = c % 16; 1046 int rem = c % 16;
1036 int div = c / 16; 1047 int div = c / 16;
1037 1048
1038 if (div < 10) 1049 if (div < 10)
1039 trans[1] = '0' + div; 1050 trans[1] = '0' + div;
1040 else 1051 else
1041 trans[1] = 'A' + (div - 10); 1052 trans[1] = 'A' + (div - 10);
1042 1053
1043 if (rem < 10) 1054 if (rem < 10)
1044 trans[2] = '0' + rem; 1055 trans[2] = '0' + rem;
1045 else 1056 else
1046 trans[2] = 'A' + (rem - 10); 1057 trans[2] = 'A' + (rem - 10);
1047 1058
1048 return trans; 1059 return trans;
1060#endif
1049} 1061}
1050 1062
1051static void writeQPString(OFile *fp, const char *s) 1063static void writeQPString(OFile *fp, const char *s)
1052{ 1064{
1053 /* 1065 /*
1054 only A-Z, 0-9 and 1066 only A-Z, 0-9 and
1055 "'" (ASCII code 39) 1067 "'" (ASCII code 39)
1056 "(" (ASCII code 40) 1068 "(" (ASCII code 40)
1057 ")" (ASCII code 41) 1069 ")" (ASCII code 41)
1058 "+" (ASCII code 43) 1070 "+" (ASCII code 43)
1059 "," (ASCII code 44) 1071 "," (ASCII code 44)
1060 "-" (ASCII code 45) 1072 "-" (ASCII code 45)
1061 "/" (ASCII code 47) 1073 "/" (ASCII code 47)
1062 "?" (ASCII code 63) 1074 "?" (ASCII code 63)
1063 1075
1064 should remain un-encoded. 1076 should remain un-encoded.
1065 '=' needs to be encoded as it is the escape character. 1077 '=' needs to be encoded as it is the escape character.
1066 ';' needs to be as it is a field separator. 1078 ';' needs to be as it is a field separator.
1067 1079
1068 */ 1080 */
1069 const char *p = s; 1081 const char *p = s;
1070 while (*p) { 1082 while (*p) {
1071 const char *rep = replaceChar(*p); 1083 const char *rep = replaceChar(*p);
1072 if (rep) 1084 if (rep)
1073 appendsOFile(fp, rep); 1085 appendsOFile(fp, rep);
1074 else 1086 else
1075 appendcOFile(fp, *p); 1087 appendcOFile(fp, *p);
1076 p++; 1088 p++;
1077 } 1089 }
1078} 1090}
1079 1091
1080static bool includesUnprintable(VObject *o) 1092static bool includesUnprintable(VObject *o)
1081{ 1093{
1094
1095#if 0
1096
1097 // IF THIS FUNCTION RETURNES TRUE, THE DATA IS EXPORTED
1098 // AS QUOTED PRINTABLE.
1099 // BUT THE PARSER IS UNABLE TO IMPORT THIS, THEREFORE
1100 // I DECIDED TO DISABLE IT UNTIL TROLLTECH FIXES THIS BUG
1101 // SEE ALSO *replaceChar(unsigned char c)
1102 // (se)
1103
1082 if (o) { 1104 if (o) {
1083 if (VALUE_TYPE(o) == VCVT_STRINGZ) { 1105 if (VALUE_TYPE(o) == VCVT_STRINGZ) {
1084 const char *p = STRINGZ_VALUE_OF(o); 1106 const char *p = STRINGZ_VALUE_OF(o);
1085 if (p) { 1107 if (p) {
1086 while (*p) { 1108 while (*p) {
1087 if (replaceChar(*p)) 1109 if (replaceChar(*p))
1088 return TRUE; 1110 return TRUE;
1089 p++; 1111 p++;
1090 } 1112 }
1091 } 1113 }
1092 } 1114 }
1093 } 1115 }
1116
1117#endif
1118#warning "Bug-Workaround must be fixed !"
1119
1094 return FALSE; 1120 return FALSE;
1095} 1121}
1096 1122
1097static void writeVObject_(OFile *fp, VObject *o); 1123static void writeVObject_(OFile *fp, VObject *o);
1098 1124
1099static void writeValue(OFile *fp, VObject *o, unsigned long size) 1125static void writeValue(OFile *fp, VObject *o, unsigned long size)
1100{ 1126{
1101 if (o == 0) return; 1127 if (o == 0) return;
1102 switch (VALUE_TYPE(o)) { 1128 switch (VALUE_TYPE(o)) {
1103 case VCVT_STRINGZ: { 1129 case VCVT_STRINGZ: {
1104 writeQPString(fp, STRINGZ_VALUE_OF(o)); 1130 writeQPString(fp, STRINGZ_VALUE_OF(o));
1105 break; 1131 break;
1106 } 1132 }
1107 case VCVT_UINT: { 1133 case VCVT_UINT: {
1108 char buf[16]; 1134 char buf[16];
1109 sprintf(buf,"%u", INTEGER_VALUE_OF(o)); 1135 sprintf(buf,"%u", INTEGER_VALUE_OF(o));
1110 appendsOFile(fp,buf); 1136 appendsOFile(fp,buf);
1111 break; 1137 break;
1112 } 1138 }
1113 case VCVT_ULONG: { 1139 case VCVT_ULONG: {
1114 char buf[16]; 1140 char buf[16];
1115 sprintf(buf,"%lu", LONG_VALUE_OF(o)); 1141 sprintf(buf,"%lu", LONG_VALUE_OF(o));
1116 appendsOFile(fp,buf); 1142 appendsOFile(fp,buf);
1117 break; 1143 break;