- decoded_length = 0;
- memset(buf, '\0', SIZ);
- buf_length = 0;
-
- for (i = 0; i < sourcelen; ++i) {
- size_t buflen = strlen(buf);
- buf[buf_length++] = encoded[i];
-
- if ( (encoded[i] == '\n')
- || (encoded[i] == 0)
- || (i == (sourcelen-1)) ) {
- buf[buf_length++] = 0;
-
- /*** begin -- process one line ***/
-
- if (buf[buflen-1] == '\n') {
- buf[buflen-1] = 0;
- buflen --;
- }
- if (buf[buflen-1] == '\r') {
- buf[buflen-1] = 0;
- buflen --;
- }
- while (isspace(buf[buflen-1])) {
- buf[buflen-1] = 0;
- buflen --;
- }
- soft_line_break = 0;
-
- while (buflen > 0) {
- if ((buf[0] == '=') && (buf[1] == '\0')) {
- soft_line_break = 1;
- buf[0] = '\0';
- buflen = 0;
- } else if ((buflen>=3) && (buf[0]=='=')) {
- sscanf(&buf[1], "%02x", &ch);
- decoded[decoded_length++] = ch;
- strcpy(buf, &buf[3]);
- buflen -=3;
- } else {
- decoded[decoded_length++] = buf[0];
- strcpy(buf, &buf[1]);
- buflen --;
- }
+ if (sourcelen >0)
+ decoded[0] = encoded[0];
+ while (sourcepos <= sourcelen){
+ check = &decoded[destpos];
+ decoded[destpos] = encoded[sourcepos];
+ if ((ignore_last == 0) && (decoded[destpos-1] == '='))
+ {
+ if ((*check == '\0') ||
+ (*check == '\n') ||
+ (*check == '\r'))
+ {
+ decoded[destpos - 1] = '\0';
+ destpos-=2;