]> code.citadel.org Git - citadel.git/blobdiff - citadel/tools.c
* moved CtdlDecodeQuotedPrintable() into tools.c
[citadel.git] / citadel / tools.c
index 725b9daed1508c20ef9d2cb9d203e9b4acb77095..b864642591c6cb205475f3e673129545ac81920b 100644 (file)
@@ -416,6 +416,43 @@ int CtdlDecodeBase64(char *dest, const char *source, size_t length)
     }
 }
 
+/*
+ * Convert "quoted-printable" to binary.  Returns number of bytes decoded.
+ * according to RFC2045 section 6.7
+ */
+int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen) {
+       unsigned int ch;
+       int decoded_length = 0;
+       int pos = 0;
+
+       while (pos < sourcelen)
+       {
+               if (!strncmp(&encoded[pos], "=\r\n", 3))
+               {
+                       pos += 3;
+               }
+               else if (!strncmp(&encoded[pos], "=\n", 2))
+               {
+                       pos += 2;
+               }
+               else if (encoded[pos] == '=')
+               {
+                       ch = 0;
+                       sscanf(&encoded[pos+1], "%02x", &ch);
+                       pos += 3;
+                       decoded[decoded_length++] = ch;
+               }
+               else
+               {
+                       decoded[decoded_length++] = encoded[pos];
+                       pos += 1;
+               }
+       }
+       decoded[decoded_length] = 0;
+       return(decoded_length);
+}
+
+
 /*
  * if we send out non ascii subjects, we encode it this way.
  */