* as we now spend allmost all of our time on en/decoding base64 we should build the...
authorWilfried Göesgens <willi@citadel.org>
Sat, 6 Oct 2007 09:31:31 +0000 (09:31 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sat, 6 Oct 2007 09:31:31 +0000 (09:31 +0000)
citadel/citadel.c
citadel/citmail.c
citadel/sendcommand.c
citadel/server_main.c
citadel/setup.c
citadel/stress.c
citadel/tools.c
citadel/tools.h
citadel/userlist.c
citadel/whobbs.c

index 7d2b7b704fcd41be7eee1a87052cd5825bc72386..1b847d57939480511cc10ae1d958efb7d829a823 100644 (file)
@@ -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
index bc3fb95d070ef6f6c39cce8e6393db20df2f176c..9217260685b1427a2d6bafd95a213e28f0b3763b 100644 (file)
@@ -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<argc; ++i) {
                if (!strcmp(argv[i], "-d")) {
                        debug = 1;
index a7d531414ae94ecdbb6f4ff0985a131987d28e92..a8fc4c992690de5fd3fc99b585429263d9fcb030 100644 (file)
@@ -150,6 +150,8 @@ int main(int argc, char **argv)
        struct timeval tv;
        int ret, err;
 
+       CtdlInitBase64Table();
+
        strcpy(ctdl_home_directory, DEFAULT_PORT);
 
        strcpy(cmd, "");
index f13a77361275d59f30c74137d8a239049fdf9a3f..80a71cc992a3bf70c35d457f285b2f70a75ab701 100644 (file)
@@ -96,6 +96,7 @@ int main(int argc, char **argv)
        /* initialise semaphores here. Patch by Matt and davew
         * its called here as they are needed by lprintf for thread safety
         */
+       CtdlInitBase64Table();
        InitialiseSemaphores();
        
        /* initialize the master context */
index bf1374d5a018e3be3ee3d41e85150c1fea856311..3dff70e1af0e4ec8d7853e2208b396c45ce88adf 100644 (file)
@@ -950,6 +950,8 @@ int main(int argc, char *argv[])
        char relhome[PATH_MAX]="";
        char ctdldir[PATH_MAX]=CTDLDIR;
        
+       CtdlInitBase64Table();
+
        /* set an invalid setup type */
        setup_type = (-1);
 
index f092aa4abeaf23c47cd503858ec2f74d6feb8c66..20c91fcff5c0024877b84eeaddd71d3fff217c5e 100644 (file)
@@ -298,6 +298,8 @@ int main(int argc, char** argv)
        int i;                  /* Counters */
        long runtime;           /* Run time for each thread */
 
+       CtdlInitBase64Table();
+
        /* Read argument list */
        for (i = 0; i < argc; i++) {
                if (!strcmp(argv[i], "-n")) {
index 4a5e4cac0fa0a24305fcdf9469e38e1840be7654..dbb8c046d5813eed324b3ea3d9590d7587d7f37c 100644 (file)
@@ -33,7 +33,8 @@
 #define FALSE 0
 
 typedef unsigned char byte;          /* Byte type */
-static byte dtable[256];             /* base64 encode / decode table */
+static byte dtable[256] = "\0";              /* base64 decode table */
+static byte etable[256] = "\0";              /* base64 encode table */
 
 /* Month strings for date conversions */
 char *ascmonths[12] = {
@@ -278,6 +279,41 @@ unsigned long extract_unsigned_long(const char *source, int parmnum)
 }
 
 
+
+void CtdlInitBase64Table(void)
+{
+       int i;
+       /*      Fill dtable with character encodings.  */
+       
+       /* Encoder Table */
+       for (i = 0; i < 26; i++) {
+               etable[i] = 'A' + i;
+               etable[26 + i] = 'a' + i;
+       }
+       for (i = 0; i < 10; i++) {
+               etable[52 + i] = '0' + i;
+       }
+       etable[62] = '+';
+       etable[63] = '/';
+       
+       /* Decoder Table */
+       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;
+}
+
 /*
  * CtdlDecodeBase64() and CtdlEncodeBase64() are adaptations of code by
  * John Walker, found in full in the file "base64.c" included with this
@@ -291,18 +327,6 @@ void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen)
     int spos = 0;
     int dpos = 0;
 
-    /* Fill dtable with character encodings.  */
-
-    for (i = 0; i < 26; i++) {
-        dtable[i] = 'A' + i;
-        dtable[26 + i] = 'a' + i;
-    }
-    for (i = 0; i < 10; i++) {
-        dtable[52 + i] = '0' + i;
-    }
-    dtable[62] = '+';
-    dtable[63] = '/';
-
     while (!hiteof) {
        byte igroup[3], ogroup[4];
        int c, n;
@@ -317,10 +341,10 @@ void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen)
            igroup[n] = (byte) c;
        }
        if (n > 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) {
index 247a91bac67d9ef29460b844085ee84dde03714e..30ae142617533f742bdbbc4547c22e1da264d097 100644 (file)
@@ -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 *);
index de102e2116303b875ad0a1b6dd58f29127b792df..f63f9a6c03d7cb7b1f4db5bfb79b106d4b8d269e 100644 (file)
@@ -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))) {
index 2b86f96a9976496d6cecd07e426784e68b4207ae..b60ebbd9f518466709dc11b2bca3f03593b8f806 100644 (file)
@@ -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);