From 4d0eca89fcdb8633769ba38d196b18a840c72635 Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 30 Apr 2002 17:55:41 +0000 Subject: [PATCH] add base64 scanner --- t.c | 34 +++++++++++----------------------- textcode/fmt_base64.c | 4 ---- textcode/scan_base64.c | 34 ++++++++++++++++++++++++++++++++++ textcode/scan_uuencoded.c | 1 - 4 files changed, 45 insertions(+), 28 deletions(-) create mode 100644 textcode/scan_base64.c diff --git a/t.c b/t.c index 6dbc76f..aa407b4 100644 --- a/t.c +++ b/t.c @@ -17,30 +17,18 @@ __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx") int main(int argc,char* argv[]) { - unsigned long size; - char* buf=mmap_read(argv[1],&size); - if (buf) { - const char* c=buf; - const char* max=buf+size; - while (c='A' && x<='Z') return x-'A'; + if (x>='a' && x<='z') return x-'a'+26; + if (x>='0' && x<='9') return x-'0'+26+26; + switch (x) { + case '+': return 62; + case '/': return 63; + default: return -1; + } +} + +unsigned int scan_base64(const char *src,char *dest,unsigned int *destlen) { + unsigned short tmp=0,bits=0; + register const unsigned char* s=(const unsigned char*) src; + const char* orig=dest; + for (;;) { + int a=dec(*s); + if (a<0) { + while (*s=='=') ++s; + break; + } + tmp=(tmp<<6)|a; bits+=6; + ++s; + if (bits>=8) { + *dest=(tmp>>(bits-=8)); + ++dest; + } + } + *destlen=dest-orig; + return (const char*)s-src; +} diff --git a/textcode/scan_uuencoded.c b/textcode/scan_uuencoded.c index 13e38b0..c09ae16 100644 --- a/textcode/scan_uuencoded.c +++ b/textcode/scan_uuencoded.c @@ -1,5 +1,4 @@ #include "textcode.h" -#include "haveinline.h" unsigned int scan_uuencoded(const char *src,char *dest,unsigned int *destlen) { unsigned int len;