|
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)
{
|