cvs: /php4/ext/imap php_imap.c
| From: | Andrew Skalski | Date: | Mon, 24 Apr 2000 22:22:04 +0000 |
| Subject: | cvs: /php4/ext/imap php_imap.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-14027@lists.php.net to get a copy of this message | ||
askalski Mon Apr 24 15:22:04 2000 EDT
Modified files:
/php4/ext/imap php_imap.c
Log:
* typecast fs_give parameter to void**
* removed wide-character treatment from imap_utf7_encode
* suggestion to #include "linkage.c" rather than link in auth/mail drivers
manually
Index: php4/ext/imap/php_imap.c
diff -u php4/ext/imap/php_imap.c:1.18 php4/ext/imap/php_imap.c:1.19
--- php4/ext/imap/php_imap.c:1.18 Sat Apr 22 13:54:07 2000
+++ php4/ext/imap/php_imap.c Mon Apr 24 15:21:34 2000
@@ -23,7 +23,7 @@
| PHP 4.0 updates: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_imap.c,v 1.18 2000/04/22 20:54:07 chagenbu Exp $ */
+/* $Id: php_imap.c,v 1.19 2000/04/24 22:21:34 askalski Exp $ */
#define IMAP41
@@ -385,6 +385,7 @@
ZEND_INIT_MODULE_GLOBALS(imap, php_imap_init_globals, NULL)
+#if 1
#ifndef PHP_WIN32
mail_link(&unixdriver); /* link in the unix driver */
#endif
@@ -405,6 +406,11 @@
auth_link(&auth_log); /* link in the log authenticator */
#endif
mail_link(&dummydriver); /* link in the dummy driver */
+#else
+ /* link in the c-client mail and auth drivers */
+#include "linkage.c"
+#endif
+
/* lets allow NIL */
REGISTER_MAIN_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);
@@ -1973,7 +1979,7 @@
decode = (char *) rfc822_base64((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text),
&newlength);
RETVAL_STRINGL(decode, newlength, 1);
- fs_give(&decode);
+ fs_give((void**) &decode);
}
/* }}} */
@@ -1995,7 +2001,7 @@
decode = (char *) rfc822_qprint((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text),
&newlength);
RETVAL_STRINGL(decode, newlength, 1);
- fs_give(&decode);
+ fs_give((void**) &decode);
}
/* }}} */
@@ -2017,7 +2023,7 @@
decode = (char *) rfc822_8bit((unsigned char *) Z_STRVAL_PP(text), Z_STRLEN_PP(text),
&newlength);
RETVAL_STRINGL(decode, newlength, 1);
- fs_give(&decode);
+ fs_give((void**) &decode);
}
/* }}} */
@@ -2036,7 +2042,7 @@
convert_to_string_ex(text);
decode = rfc822_binary(Z_STRVAL_PP(text), Z_STRLEN_PP(text), &len);
RETVAL_STRINGL(decode, len, 1);
- fs_give(&decode);
+ fs_give((void**) &decode);
}
/* }}} */
@@ -2217,11 +2223,11 @@
PHP_FUNCTION(imap_utf7_decode)
{
/* author: Andrew Skalski <askalski@chek.com> */
- int argc;
+ int argc;
zval **arg;
const unsigned char *in, *inp, *endp;
unsigned char *out, *outp;
- int inlen, outlen;
+ int inlen, outlen;
enum {
ST_NORMAL, /* printable text */
ST_DECODE0, /* encoded text rotation... */
@@ -2229,7 +2235,7 @@
ST_DECODE2,
ST_DECODE3
} state;
-
+
/* collect arguments */
argc = ZEND_NUM_ARGS();
if (argc != 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
@@ -2372,11 +2378,11 @@
PHP_FUNCTION(imap_utf7_encode)
{
/* author: Andrew Skalski <askalski@chek.com> */
- int argc;
+ int argc;
zval **arg;
- const unsigned char *in, *inp, *endp;
+ const unsigned char *in, *inp, *endp;
unsigned char *out, *outp;
- int inlen, outlen, slen;
+ int inlen, outlen;
enum {
ST_NORMAL, /* printable text */
ST_ENCODE0, /* encoded text rotation... */
@@ -2389,7 +2395,7 @@
if (argc != 1 || zend_get_parameters_ex(argc, &arg) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
- convert_to_writable_string_ex(arg); /* Is this string really modified? */
+ convert_to_string_ex(arg);
in = (const unsigned char *) Z_STRVAL_PP(arg);
inlen = Z_STRLEN_PP(arg);
@@ -2400,23 +2406,28 @@
while (inp < endp) {
if (state == ST_NORMAL) {
if (SPECIAL(*inp)) {
- state = ST_ENCODE1;
- slen=1;
- } else if (*inp == '&') {
+ state = ST_ENCODE0;
outlen++;
+ } else if (*inp++ == '&') {
+ outlen++;
}
outlen++;
} else if (!SPECIAL(*inp)) {
state = ST_NORMAL;
- outlen+=2+slen*3-slen/3;
- slen=0;
} else {
- slen++;
+ /* ST_ENCODE0 -> ST_ENCODE1 - two chars
+ * ST_ENCODE1 -> ST_ENCODE2 - one char
+ * ST_ENCODE2 -> ST_ENCODE0 - one char
+ */
+ if (state == ST_ENCODE2) {
+ state = ST_ENCODE0;
+ }
+ else if (state++ == ST_ENCODE0) {
+ outlen++;
+ }
+ outlen++;
+ inp++;
}
- inp++;
- }
- if (state!=ST_NORMAL) {
- outlen+=1+slen*3-slen/3;
}
/* allocate output buffer */
@@ -2450,41 +2461,22 @@
/* encode input character */
switch (state) {
case ST_ENCODE0:
- *outp++ = B64((*inp>>8) >> 2);
- *outp = (*inp>>8) << 4;
+ *outp++ = B64(*inp >> 2);
+ *outp = *inp++ << 4;
state = ST_ENCODE1;
break;
case ST_ENCODE1:
- *outp++ = B64(*outp | (*inp>>8) >> 4);
- *outp = (*inp>>8) << 2;
+ *outp++ = B64(*outp | *inp >> 4);
+ *outp = *inp++ << 2;
state = ST_ENCODE2;
break;
case ST_ENCODE2:
- *outp++ = B64(*outp | (*inp>>8) >> 6);
- *outp++ = B64((*inp>>8));
+ *outp++ = B64(*outp | *inp >> 6);
+ *outp++ = B64(*inp++);
state = ST_ENCODE0;
case ST_NORMAL:
break;
}
- switch (state) {
- case ST_ENCODE0:
- *outp++ = B64((*inp&0xff) >> 2);
- *outp = (*inp&0xff) << 4;
- state = ST_ENCODE1;
- break;
- case ST_ENCODE1:
- *outp++ = B64(*outp | (*inp&0xff) >> 4);
- *outp = (*inp&0xff) << 2;
- state = ST_ENCODE2;
- break;
- case ST_ENCODE2:
- *outp++ = B64(*outp | (*inp&0xff) >> 6);
- *outp++ = B64((*inp&0xff));
- state = ST_ENCODE0;
- case ST_NORMAL:
- break;
- }
- inp++;
}
}
@@ -3487,7 +3479,7 @@
add_property_string(myobject, "charset", charset, 1);
add_property_string(myobject, "text", decode, 1);
zend_hash_next_index_insert(return_value->value.ht,(void *)&myobject,sizeof(zval
*),NULL);
- fs_give(&decode);
+ fs_give((void**) &decode);
offset+=end_token+2;
if (string[offset]==' ' && string[offset+1]=='=' &&
string[offset+2]=='?') {