dirkx 99/04/20 05:03:29
Modified: src/support ab.c Log: Following the change in 1.159 +4 -0 apache-1.3/src/main/util.c UUencode in ab has also been updated. Though I seriously doubt if ab has ever been tested in an EBCDIC environment :-) Does it actually work Martin ? Dw. Revision Changes Path 1.22 +34 -12 apache-1.3/src/support/ab.c Index: ab.c =================================================================== RCS file: /home/cvs/apache-1.3/src/support/ab.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- ab.c 1999/04/05 13:52:21 1.21 +++ ab.c 1999/04/20 12:03:29 1.22 @@ -248,20 +248,42 @@ char *p; char *encoded = (char *) malloc((len + 2) / 3 * 4 + 1); p = encoded; - for (i = 0; i < len; i += 3) { - *p++ = basis_64[string[i] >> 2]; - *p++ = basis_64[((string[i] & 0x3) << 4) | - ((int) (string[i + 1] & 0xF0) >> 4)]; - *p++ = basis_64[((string[i + 1] & 0xF) << 2) | - ((int) (string[i + 2] & 0xC0) >> 6)]; - *p++ = basis_64[string[i + 2] & 0x3F]; - }; - *p-- = '\0'; - *p-- = '='; - *p-- = '='; +#ifndef CHARSET_EBCDIC + for (i = 0; i < len-2; i += 3) { + *p++ = basis_64[(string[i] >> 2) & 0x3F]; + *p++ = basis_64[((string[i] & 0x3) << 4) | ((int) (string[i + 1] & 0xF0) >> 4)]; + *p++ = basis_64[((string[i + 1] & 0xF) << 2) | ((int) (string[i + 2] & 0xC0) >> 6)]; + *p++ = basis_64[string[i + 2] & 0x3F]; + } + if (i < len) { + *p++ = basis_64[(string[i] >> 2) & 0x3F]; + *p++ = basis_64[((string[i] & 0x3) << 4) | ((int) (string[i + 1] & 0xF0) >> 4)]; + if (i == (len-2)) + *p++ = basis_64[((string[i + 1] & 0xF) << 2)]; + else + *p++ = '='; + *p++ = '='; + } +#else /*CHARSET_EBCDIC*/ + for (i = 0; i < len-2; i += 3) { + *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; + *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; + *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2) | ((int) (os_toascii[string[i + 2]] & 0xC0) >> 6)]; + *p++ = basis_64[os_toascii[string[i + 2]] & 0x3F]; + } + if (i < len) { + *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; + *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; + if (i == (len-2)) + *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2)]; + else + *p++ = '='; + *p++ = '='; + } +#endif /*CHARSET_EBCDIC*/ + *p = '\0'; return encoded; } - /* --------------------------------------------------------- */