diff options
-rw-r--r-- | ext/standard/basic_functions.c | 4 | ||||
-rw-r--r-- | ext/standard/config.m4 | 3 | ||||
-rw-r--r-- | ext/standard/filters.c | 136 | ||||
-rw-r--r-- | ext/standard/php_standard.h | 3 | ||||
-rw-r--r-- | ext/standard/php_string.h | 3 | ||||
-rw-r--r-- | ext/standard/string.c | 76 | ||||
-rw-r--r-- | ext/standard/tests/file/userfilters.phpt | 2 | ||||
-rw-r--r-- | ext/standard/user_filters.c | 10 |
8 files changed, 154 insertions, 83 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index ff7418c588..f23eb6b5ba 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1031,7 +1031,7 @@ PHP_MINIT_FUNCTION(basic) PHP_MINIT(file) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(pack) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(browscap) (INIT_FUNC_ARGS_PASSTHRU); - PHP_MINIT(string_filters) (INIT_FUNC_ARGS_PASSTHRU); + PHP_MINIT(standard_filters) (INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(user_filters) (INIT_FUNC_ARGS_PASSTHRU); #if defined(HAVE_LOCALECONV) && defined(ZTS) @@ -1104,7 +1104,7 @@ PHP_MSHUTDOWN_FUNCTION(basic) PHP_MSHUTDOWN(assert) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(url_scanner_ex) (SHUTDOWN_FUNC_ARGS_PASSTHRU); PHP_MSHUTDOWN(file) (SHUTDOWN_FUNC_ARGS_PASSTHRU); - PHP_MSHUTDOWN(string_filters) (SHUTDOWN_FUNC_ARGS_PASSTHRU); + PHP_MSHUTDOWN(standard_filters) (SHUTDOWN_FUNC_ARGS_PASSTHRU); #if defined(HAVE_LOCALECONV) && defined(ZTS) PHP_MSHUTDOWN(localeconv) (SHUTDOWN_FUNC_ARGS_PASSTHRU); #endif diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index 98964bce2e..f74c7ed7e4 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -255,6 +255,7 @@ PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32. url_scanner.c var.c versioning.c assert.c strnatcmp.c levenshtein.c \ incomplete_class.c url_scanner_ex.c ftp_fopen_wrapper.c \ http_fopen_wrapper.c php_fopen_wrapper.c credits.c css.c \ - var_unserializer.c ftok.c aggregation.c sha1.c user_filters.c ) + var_unserializer.c ftok.c aggregation.c sha1.c user_filters.c \ + filters.c ) PHP_ADD_MAKEFILE_FRAGMENT diff --git a/ext/standard/filters.c b/ext/standard/filters.c new file mode 100644 index 0000000000..8a701790ce --- /dev/null +++ b/ext/standard/filters.c @@ -0,0 +1,136 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 4 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2003 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: | + | Wez Furlong (wez@thebrainroom.com) | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include "php.h" +#include "php_globals.h" +#include "ext/standard/basic_functions.h" +#include "ext/standard/file.h" + +/* {{{ rot13 stream filter implementation */ +static char rot13_from[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +static char rot13_to[] = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"; + +static size_t strfilter_rot13_write(php_stream *stream, php_stream_filter *thisfilter, + const char *buf, size_t count TSRMLS_DC) +{ + char rotbuf[1024]; + size_t chunk; + size_t wrote = 0; + + while (count > 0) { + chunk = count; + if (chunk > sizeof(rotbuf)) + chunk = sizeof(rotbuf); + + PHP_STRLCPY(rotbuf, buf, sizeof(rotbuf), chunk); + buf += chunk; + count -= chunk; + + php_strtr(rotbuf, chunk, rot13_from, rot13_to, 52); + wrote += php_stream_filter_write_next(stream, thisfilter, rotbuf, chunk); + } + + return wrote; +} + +static size_t strfilter_rot13_read(php_stream *stream, php_stream_filter *thisfilter, + char *buf, size_t count TSRMLS_DC) +{ + size_t read; + + read = php_stream_filter_read_next(stream, thisfilter, buf, count); + php_strtr(buf, read, rot13_from, rot13_to, 52); + + return read; +} + +static int strfilter_rot13_flush(php_stream *stream, php_stream_filter *thisfilter, int closing TSRMLS_DC) +{ + return php_stream_filter_flush_next(stream, thisfilter, closing); +} + +static int strfilter_rot13_eof(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC) +{ + return php_stream_filter_eof_next(stream, thisfilter); +} + +static php_stream_filter_ops strfilter_rot13_ops = { + strfilter_rot13_write, + strfilter_rot13_read, + strfilter_rot13_flush, + strfilter_rot13_eof, + NULL, + "string.rot13" +}; + +static php_stream_filter *strfilter_rot13_create(const char *filtername, const char *filterparams, + int filterparamslen, int persistent TSRMLS_DC) +{ + return php_stream_filter_alloc(&strfilter_rot13_ops, NULL, persistent); +} + +static php_stream_filter_factory strfilter_rot13_factory = { + strfilter_rot13_create +}; +/* }}} */ + +static const struct { + php_stream_filter_ops *ops; + php_stream_filter_factory *factory; +} standard_filters[] = { + { &strfilter_rot13_ops, &strfilter_rot13_factory }, + { NULL, NULL } +}; + +PHP_MINIT_FUNCTION(standard_filters) +{ + int i; + + for (i = 0; standard_filters[i].ops; i++) { + if (FAILURE == php_stream_filter_register_factory( + standard_filters[i].ops->label, + standard_filters[i].factory + TSRMLS_CC)) { + return FAILURE; + } + } + + return SUCCESS; +} + +PHP_MSHUTDOWN_FUNCTION(standard_filters) +{ + int i; + + for (i = 0; standard_filters[i].ops; i++) { + php_stream_filter_unregister_factory(standard_filters[i].ops->label TSRMLS_CC); + } + return SUCCESS; +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ diff --git a/ext/standard/php_standard.h b/ext/standard/php_standard.h index 97403571e4..c160da40cc 100644 --- a/ext/standard/php_standard.h +++ b/ext/standard/php_standard.h @@ -62,6 +62,9 @@ #include "aggregation.h" #define phpext_standard_ptr basic_functions_module_ptr +PHP_MINIT_FUNCTION(standard_filters); +PHP_MSHUTDOWN_FUNCTION(standard_filters); + /* * Local variables: diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index df2bd6376a..5f07c31ea3 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -91,9 +91,6 @@ PHP_FUNCTION(strcoll); PHP_FUNCTION(money_format); #endif -PHP_MINIT_FUNCTION(string_filters); -PHP_MSHUTDOWN_FUNCTION(string_filters); - #if defined(HAVE_LOCALECONV) && defined(ZTS) PHP_MINIT_FUNCTION(localeconv); PHP_MSHUTDOWN_FUNCTION(localeconv); diff --git a/ext/standard/string.c b/ext/standard/string.c index 8842b24145..722812c56e 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -4167,82 +4167,6 @@ PHP_FUNCTION(money_format) { /* }}} */ #endif -/* {{{ rot13 stream filter implementation */ -static size_t strfilter_rot13_write(php_stream *stream, php_stream_filter *thisfilter, - const char *buf, size_t count TSRMLS_DC) -{ - char rotbuf[1024]; - size_t chunk; - size_t wrote = 0; - - while (count > 0) { - chunk = count; - if (chunk > sizeof(rotbuf)) - chunk = sizeof(rotbuf); - - PHP_STRLCPY(rotbuf, buf, sizeof(rotbuf), chunk); - buf += chunk; - count -= chunk; - - php_strtr(rotbuf, chunk, rot13_from, rot13_to, 52); - wrote += php_stream_filter_write_next(stream, thisfilter, rotbuf, chunk); - } - - return wrote; -} - -static size_t strfilter_rot13_read(php_stream *stream, php_stream_filter *thisfilter, - char *buf, size_t count TSRMLS_DC) -{ - size_t read; - - read = php_stream_filter_read_next(stream, thisfilter, buf, count); - php_strtr(buf, read, rot13_from, rot13_to, 52); - - return read; -} - -static int strfilter_rot13_flush(php_stream *stream, php_stream_filter *thisfilter, int closing TSRMLS_DC) -{ - return php_stream_filter_flush_next(stream, thisfilter, closing); -} - -static int strfilter_rot13_eof(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC) -{ - return php_stream_filter_eof_next(stream, thisfilter); -} - - -static php_stream_filter_ops strfilter_rot13_ops = { - strfilter_rot13_write, - strfilter_rot13_read, - strfilter_rot13_flush, - strfilter_rot13_eof, - NULL, - "string.rot13" -}; - -static php_stream_filter *strfilter_rot13_create(const char *filtername, const char *filterparams, - int filterparamslen, int persistent TSRMLS_DC) -{ - return php_stream_filter_alloc(&strfilter_rot13_ops, NULL, persistent); -} - -static php_stream_filter_factory strfilter_rot13_factory = { - strfilter_rot13_create -}; - -PHP_MINIT_FUNCTION(string_filters) -{ - return php_stream_filter_register_factory("string.rot13", &strfilter_rot13_factory TSRMLS_CC); -} - -PHP_MSHUTDOWN_FUNCTION(string_filters) -{ - return php_stream_filter_unregister_factory("string.rot13" TSRMLS_CC); -} -/* }}} */ - /* * Local variables: * tab-width: 4 diff --git a/ext/standard/tests/file/userfilters.phpt b/ext/standard/tests/file/userfilters.phpt index 543e6a3db7..817c48b4ee 100644 --- a/ext/standard/tests/file/userfilters.phpt +++ b/ext/standard/tests/file/userfilters.phpt @@ -45,7 +45,7 @@ rewind($fp); var_dump(stream_filter_prepend($fp, "string.uppercase")); var_dump(fgets($fp)); - +fclose($fp); ?> --EXPECT-- bool(true) diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index 0edca81425..ed04223ef5 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -445,3 +445,13 @@ PHP_FUNCTION(stream_register_filter) efree(fdat); } /* }}} */ + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ |