Re: [PHP4BETA] cvs: /php4/ext/imap php_imap.c
| From: | Andi Gutmans | Date: | Mon, 24 Apr 2000 22:31:15 +0000 |
| Subject: | Re: [PHP4BETA] cvs: /php4/ext/imap php_imap.c | ||
| References: | 1 | Groups: | php.version4 |
| Request: | Send a blank email to php-version4+get-14028@lists.php.net to get a copy of this message | ||
Can you elaborate on that suggestion?
Andi
At 10:22 PM 4/24/00 +0000, Andrew Skalski wrote:
--- Andi Gutmans <andi@zend.com> http://www.zend.com/askalski Mon Apr 24 15:22:04 2000 EDTModified files:/php4/ext/imap php_imap.cLog: * 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 driversmanuallyIndex: 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_WIN32mail_link(&unixdriver); /* link in the unix driver */#endif @@ -405,6 +406,11 @@auth_link(&auth_log); /* link in the log authenticator */#endifmail_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]=='?') {-- PHP 4.0 Beta Mailing List <http://www.php.net/version4/> To unsubscribe, e-mail: php4beta-unsubscribe@lists.php.net For additional commands, e-mail: php4beta-help@lists.php.net To contact the list administrators, e-mail: php4beta-admin@lists.php.net