From: <sha...@us...> - 2003-11-21 02:32:58
|
Update of /cvsroot/binaryphp/binaryphp/functions/base In directory sc8-pr-cvs1:/tmp/cvs-serv25758/functions/base Modified Files: base64.h base64_decode.cpp base64_encode.cpp Log Message: Latest update - moving functions from header file to respective files. Index: base64.h =================================================================== RCS file: /cvsroot/binaryphp/binaryphp/functions/base/base64.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** base64.h 27 Sep 2003 05:00:31 -0000 1.1 --- base64.h 21 Nov 2003 02:32:54 -0000 1.2 *************** *** 30,129 **** }; - unsigned char *php_base64_encode(const unsigned char *str, int length) - { - const unsigned char *current = str; - int i = 0; - unsigned char *result = new unsigned char[((length + 3 - length % 3) * 4 / 3 + 1) * sizeof(char)]; - - while (length > 2) { /* keep going until we have less than 24 bits */ - result[i++] = base64_table[current[0] >> 2]; - result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)]; - result[i++] = base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)]; - result[i++] = base64_table[current[2] & 0x3f]; - - current += 3; - length -= 3; /* we just handle 3 octets of data */ - } - - /* now deal with the tail end of things */ - if (length != 0) { - result[i++] = base64_table[current[0] >> 2]; - if (length > 1) { - result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)]; - result[i++] = base64_table[(current[1] & 0x0f) << 2]; - result[i++] = base64_pad; - } - else { - result[i++] = base64_table[(current[0] & 0x03) << 4]; - result[i++] = base64_pad; - result[i++] = base64_pad; - } - } - result[i] = '\0'; - return result; - } - - unsigned char *php_base64_decode(const unsigned char *str, int length) - { - const unsigned char *current = str; - int ch, i = 0, j = 0, k; - /* this sucks for threaded environments */ - unsigned char *result; - - result = new unsigned char[(length + 1)]; - if (result == NULL) { - return NULL; - } - - /* run through the whole string, converting as we go */ - while ((ch = *current++) != '\0' && length-- > 0) { - if (ch == base64_pad) break; - - /* When Base64 gets POSTed, all pluses are interpreted as spaces. - This line changes them back. It's not exactly the Base64 spec, - but it is completely compatible with it (the spec says that - spaces are invalid). This will also save many people considerable - headache. - Turadg Aleahmad <tu...@wi...> - */ - - if (ch == ' ') ch = '+'; - - ch = base64_reverse_table[ch]; - if (ch < 0) continue; - - switch(i % 4) { - case 0: - result[j] = ch << 2; - break; - case 1: - result[j++] |= ch >> 4; - result[j] = (ch & 0x0f) << 4; - break; - case 2: - result[j++] |= ch >>2; - result[j] = (ch & 0x03) << 6; - break; - case 3: - result[j++] |= ch; - break; - } - i++; - } - - k = j; - /* mop things up if we ended on a boundary */ - if (ch == base64_pad) { - switch(i % 4) { - case 0: - case 1: - delete result; - return NULL; - case 2: - k++; - case 3: - result[k++] = 0; - } - } - result[j] = '\0'; - return result; - } \ No newline at end of file --- 30,31 ---- Index: base64_decode.cpp =================================================================== RCS file: /cvsroot/binaryphp/binaryphp/functions/base/base64_decode.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** base64_decode.cpp 27 Sep 2003 05:00:31 -0000 1.1 --- base64_decode.cpp 21 Nov 2003 02:32:54 -0000 1.2 *************** *** 1,2 **** --- 1,67 ---- + unsigned char *php_base64_decode(const unsigned char *str, int length) + { + const unsigned char *current = str; + int ch, i = 0, j = 0, k; + /* this sucks for threaded environments */ + unsigned char *result; + + result = new unsigned char[(length + 1)]; + if (result == NULL) { + return NULL; + } + + /* run through the whole string, converting as we go */ + while ((ch = *current++) != '\0' && length-- > 0) { + if (ch == base64_pad) break; + + /* When Base64 gets POSTed, all pluses are interpreted as spaces. + This line changes them back. It's not exactly the Base64 spec, + but it is completely compatible with it (the spec says that + spaces are invalid). This will also save many people considerable + headache. - Turadg Aleahmad <tu...@wi...> + */ + + if (ch == ' ') ch = '+'; + + ch = base64_reverse_table[ch]; + if (ch < 0) continue; + + switch(i % 4) { + case 0: + result[j] = ch << 2; + break; + case 1: + result[j++] |= ch >> 4; + result[j] = (ch & 0x0f) << 4; + break; + case 2: + result[j++] |= ch >>2; + result[j] = (ch & 0x03) << 6; + break; + case 3: + result[j++] |= ch; + break; + } + i++; + } + + k = j; + /* mop things up if we ended on a boundary */ + if (ch == base64_pad) { + switch(i % 4) { + case 0: + case 1: + delete result; + return NULL; + case 2: + k++; + case 3: + result[k++] = 0; + } + } + result[j] = '\0'; + return result; + } + php_var base64_decode(php_var str) { Index: base64_encode.cpp =================================================================== RCS file: /cvsroot/binaryphp/binaryphp/functions/base/base64_encode.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** base64_encode.cpp 27 Sep 2003 05:00:31 -0000 1.1 --- base64_encode.cpp 21 Nov 2003 02:32:54 -0000 1.2 *************** *** 1,2 **** --- 1,36 ---- + unsigned char *php_base64_encode(const unsigned char *str, int length) + { + const unsigned char *current = str; + int i = 0; + unsigned char *result = new unsigned char[((length + 3 - length % 3) * 4 / 3 + 1) * sizeof(char)]; + + while (length > 2) { /* keep going until we have less than 24 bits */ + result[i++] = base64_table[current[0] >> 2]; + result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)]; + result[i++] = base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)]; + result[i++] = base64_table[current[2] & 0x3f]; + + current += 3; + length -= 3; /* we just handle 3 octets of data */ + } + + /* now deal with the tail end of things */ + if (length != 0) { + result[i++] = base64_table[current[0] >> 2]; + if (length > 1) { + result[i++] = base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)]; + result[i++] = base64_table[(current[1] & 0x0f) << 2]; + result[i++] = base64_pad; + } + else { + result[i++] = base64_table[(current[0] & 0x03) << 4]; + result[i++] = base64_pad; + result[i++] = base64_pad; + } + } + result[i] = '\0'; + return result; + } + php_var base64_encode(php_var str) { |