[Info-vax] Mail reading/processing problem, UTF-8
Phillip Helbig---undress to reply
helbig at astro.multiCLOTHESvax.de
Sun Aug 21 03:10:45 EDT 2011
In article
<6b046c6e-8997-42f1-bd03-923f3a76b4ae at u20g2000yqj.googlegroups.com>,
Steven Schweda <sms.antinode at gmail.com> writes:
> I have no idea where I found the b64decode.c and
> b64encode.c programs in my collection (19-DEC-1999), but let
> me know if you can't find anything which works.
Might be the same as this (also no idea where I got it):
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
int decode_b64char( int ch )
{
int sextet;
if( ('A' <= ch) && (ch <= 'Z') ) sextet = ch - 'A';
else if( ('a' <= ch) && (ch <= 'z') ) sextet = (ch - 'a') + 26;
else if( ('0' <= ch) && (ch <= '9') ) sextet = (ch - '0') + 52;
else if( ch == '+' ) sextet = 62;
else if( ch == '/' ) sextet = 63;
else {
fprintf( stderr, (isprint(ch) ? "Illegal base64 character '%c'\n" :
"Illegal base64 character 0x%02x\n"),
ch );
exit( EXIT_FAILURE );
}
return( sextet );
}
main( int argc, char *argv[] )
{
FILE *fin;
FILE *fout;
int flushing = 0;
int temp = 0;
int bits = 0;
int ch;
if( argc < 2 ) {
fprintf( stderr, "Usage: b64decode <infile> [outfile]\n" );
exit( EXIT_SUCCESS );
}
fin = fopen( argv[1], "r" );
if( fin == NULL ) {
perror( "openin" );
exit( EXIT_FAILURE );
}
if( argc < 3 )
fout = stdout;
else {
fout = fopen( argv[2], "wb" );
if( fout == NULL ) {
perror( "openout" );
fclose( fin );
exit( EXIT_FAILURE );
}
}
while( (ch = fgetc( fin )) != EOF ) {
if( isspace(ch) )
continue;
if( flushing ) {
if( ch != '=' ) {
fprintf( stderr, "Illegal character in EOF padding\n" );
exit( EXIT_FAILURE );
}
}
else {
if( ch == '=' )
flushing = 1;
else {
temp <<= 6;
temp |= decode_b64char( ch );
bits += 6;
if( bits >= 8 ) {
bits -= 8;
fputc( (0xff & (temp >> bits)), fout );
}
}
}
}
fclose( fout );
fclose( fin );
}
More information about the Info-vax
mailing list