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;
}
-
/* --------------------------------------------------------- */