diff options
author | Wez Furlong <wez@php.net> | 2001-05-28 10:57:23 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2001-05-28 10:57:23 +0000 |
commit | 2bdef9c83ffea933d3654575d6bd38894d5856c6 (patch) | |
tree | 50e641901913cde4bb3664b8c4f27be4633ff4d7 /ext/mailparse/rfc2045cdecode.c | |
parent | 7d52787a96f55eb96594e5c5a2f6519408f7ef80 (diff) | |
download | php-git-2bdef9c83ffea933d3654575d6bd38894d5856c6.tar.gz |
Improved performance of message part extraction when using a PHP-space
callback.
Diffstat (limited to 'ext/mailparse/rfc2045cdecode.c')
-rwxr-xr-x | ext/mailparse/rfc2045cdecode.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/ext/mailparse/rfc2045cdecode.c b/ext/mailparse/rfc2045cdecode.c index 971c59d77b..858f48dfde 100755 --- a/ext/mailparse/rfc2045cdecode.c +++ b/ext/mailparse/rfc2045cdecode.c @@ -10,10 +10,15 @@ static int op_func(int c, void *dat) { - unsigned char C = (unsigned char)c; struct rfc2045 * p = (struct rfc2045*)dat; - - (*p->udecode_func)(&C, 1, p->misc_decode_ptr); + + rfc2045_add_workbufch(p, c); + + /* drain buffer */ + if (p->workbuflen >= 4096) { + (*p->udecode_func)(p->workbuf, p->workbuflen, p->misc_decode_ptr); + p->workbuflen = 0; + } return c; } @@ -57,6 +62,8 @@ int rfc2045_cdecode_end(struct rfc2045 *p) mbfl_convert_filter_flush(p->decode_filter); mbfl_convert_filter_delete(p->decode_filter); p->decode_filter = NULL; + if (p->workbuflen > 0) + (*p->udecode_func)(p->workbuf, p->workbuflen, p->misc_decode_ptr); } return 0; } |