diff options
author | unknown <patg@krsna.patg.net> | 2005-11-01 17:07:13 -0800 |
---|---|---|
committer | unknown <patg@krsna.patg.net> | 2005-11-01 17:07:13 -0800 |
commit | 02ac7bef876ba51f13c09174da7a706ea35b6613 (patch) | |
tree | ce4d0c1782e669224f1b5e469cf82f8e9655c363 /mysys | |
parent | fe11647273c1264a2c676159b2c95ef9d32f80bf (diff) | |
parent | a486b3d7c50ccf13e3a0c1a96f67ae541ec733f8 (diff) | |
download | mariadb-git-02ac7bef876ba51f13c09174da7a706ea35b6613.tar.gz |
Merge pgalbraith@bk-internal.mysql.com:/home/bk/mysql-5.0
into krsna.patg.net:/home/patg/mysql-build/mysql-5.0.test2
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/base64.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/mysys/base64.c b/mysys/base64.c index 0fcd6f096f5..0165982fb67 100644 --- a/mysys/base64.c +++ b/mysys/base64.c @@ -27,9 +27,13 @@ static char base64_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" int base64_needed_encoded_length(int length_of_data) { - return ceil(length_of_data * 4 / 3) /* base64 chars */ + - ceil(length_of_data / (76 * 3 / 4)) /* Newlines */ + - 3 /* Padding */; + int nb_base64_chars; + nb_base64_chars= (length_of_data + 2) / 3 * 4; + + return + nb_base64_chars + /* base64 char incl padding */ + (nb_base64_chars - 1)/ 76 + /* newlines */ + 1; /* NUL termination of string */ } @@ -89,6 +93,7 @@ base64_encode(const void *src, size_t src_len, char *dst) else *dst++= base64_table[(c >> 0) & 0x3f]; } + *dst= '\0'; return 0; } @@ -209,6 +214,7 @@ main(void) size_t j; size_t k, l; size_t dst_len; + size_t needed_length; for (i= 0; i < 500; i++) { @@ -227,8 +233,12 @@ main(void) } /* Encode */ - str= (char *) malloc(base64_needed_encoded_length(src_len)); + needed_length= base64_needed_encoded_length(src_len); + str= (char *) malloc(needed_length); + for (k= 0; k < needed_length; k++) + str[k]= 0xff; /* Fill memory to check correct NUL termination */ require(base64_encode(src, src_len, str) == 0); + require(needed_length == strlen(str) + 1); /* Decode */ dst= (char *) malloc(base64_needed_decoded_length(strlen(str))); |