void CtdlInitBase64Table(void);
size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
int CtdlDecodeBase64(char *dest, const char *source, size_t length);
+inline unsigned int decode_hex(char *Source);
int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen);
void striplt(char *);
int haschar(const char *st, int ch);
}
+inline unsigned int decode_hex(char *Source)
+{
+ int ret = 0;
+ if (*Source < 'A') {
+ ret += (*Source - '0');
+ }
+ else {
+ ret += (*Source - 'A' + 10);
+ }
+ ret = ret << 4;
+ if (*(Source + 1) < 'A') {
+ ret += (*(Source + 1) - '0');
+ }
+ else {
+ ret += (*(Source + 1) - 'A' + 10);
+ }
+ if (ret > 255)
+ return 0;
+ return ret;
+}
/*
* Convert "quoted-printable" to binary. Returns number of bytes decoded.
else if (encoded[pos] == '=')
{
ch = 0;
- sscanf(&encoded[pos+1], "%02x", &ch);
+ ch = decode_hex(&encoded[pos+1]);
pos += 3;
decoded[decoded_length++] = ch;
}