From 81e4798dd1abe0d4441f90de98ab7b5822aeb7ac Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sat, 6 Oct 2007 09:31:31 +0000 Subject: [PATCH] * as we now spend allmost all of our time on en/decoding base64 we should build the table once on startup. --- citadel/citadel.c | 2 +- citadel/citmail.c | 2 ++ citadel/sendcommand.c | 2 ++ citadel/server_main.c | 1 + citadel/setup.c | 2 ++ citadel/stress.c | 2 ++ citadel/tools.c | 73 ++++++++++++++++++++++++------------------- citadel/tools.h | 1 + citadel/userlist.c | 1 + citadel/whobbs.c | 1 + 10 files changed, 54 insertions(+), 33 deletions(-) diff --git a/citadel/citadel.c b/citadel/citadel.c index 7d2b7b704..1b847d579 100644 --- a/citadel/citadel.c +++ b/citadel/citadel.c @@ -1410,7 +1410,7 @@ int main(int argc, char **argv) eCrashParameters params; // eCrashSymbolTable symbol_table; #endif - + CtdlInitBase64Table(); calc_dirs_n_files(relh, home, relhome, ctdldir); #ifdef HAVE_BACKTRACE diff --git a/citadel/citmail.c b/citadel/citmail.c index bc3fb95d0..921726068 100644 --- a/citadel/citmail.c +++ b/citadel/citmail.c @@ -184,6 +184,8 @@ int main(int argc, char **argv) { int read_recipients_from_headers = 0; char *add_these_recipients = NULL; + CtdlInitBase64Table(); + for (i=1; i 0) { - ogroup[0] = dtable[igroup[0] >> 2]; - ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; - ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; - ogroup[3] = dtable[igroup[2] & 0x3F]; + ogroup[0] = etable[igroup[0] >> 2]; + ogroup[1] = etable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; + ogroup[2] = etable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; + ogroup[3] = etable[igroup[2] & 0x3F]; /* Replace characters in output stream with "=" pad characters if fewer than three characters were @@ -351,21 +375,6 @@ int CtdlDecodeBase64(char *dest, const char *source, size_t length) int dpos = 0; int spos = 0; - for (i = 0; i < 255; i++) { - dtable[i] = 0x80; - } - for (i = 'A'; i <= 'Z'; i++) { - dtable[i] = 0 + (i - 'A'); - } - for (i = 'a'; i <= 'z'; i++) { - dtable[i] = 26 + (i - 'a'); - } - for (i = '0'; i <= '9'; i++) { - dtable[i] = 52 + (i - '0'); - } - dtable['+'] = 62; - dtable['/'] = 63; - dtable['='] = 0; /*CONSTANTCONDITION*/ while (TRUE) { diff --git a/citadel/tools.h b/citadel/tools.h index 247a91bac..30ae14261 100644 --- a/citadel/tools.h +++ b/citadel/tools.h @@ -6,6 +6,7 @@ long grab_token(char **dest, const char *source, int parmnum, char separator); int extract_int (const char *source, int parmnum); long extract_long (const char *source, int parmnum); unsigned long extract_unsigned_long(const char *source, int parmnum); +void CtdlInitBase64Table(void); void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen); int CtdlDecodeBase64(char *dest, const char *source, size_t length); void striplt(char *); diff --git a/citadel/userlist.c b/citadel/userlist.c index de102e211..f63f9a6c0 100644 --- a/citadel/userlist.c +++ b/citadel/userlist.c @@ -72,6 +72,7 @@ int main(int argc, char **argv) char hostbuf[SIZ], portbuf[SIZ]; CtdlIPC *ipc = NULL; + CtdlInitBase64Table(); ipc = CtdlIPC_new(argc, argv, hostbuf, portbuf); CtdlIPC_chat_recv(ipc, buf); if ((buf[0]!='2')&&(strncmp(buf,"551",3))) { diff --git a/citadel/whobbs.c b/citadel/whobbs.c index 2b86f96a9..b60ebbd9f 100644 --- a/citadel/whobbs.c +++ b/citadel/whobbs.c @@ -75,6 +75,7 @@ int main(int argc, char **argv) char relhome[PATH_MAX]=""; char ctdldir[PATH_MAX]=CTDLDIR; + CtdlInitBase64Table(); calc_dirs_n_files(relh, home, relhome, ctdldir); -- 2.39.2