cvs: /php4/ext/imap php_imap.c

From: 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]=='?') {

« previous php.version4 (#14027) next »