summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/basic_functions.c1
-rw-r--r--ext/standard/file.c31
-rw-r--r--ext/standard/file.h1
3 files changed, 33 insertions, 0 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index dd743bd79d..5c2f1880a4 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -681,6 +681,7 @@ function_entry basic_functions[] = {
PHP_FALIAS(socket_set_blocking, stream_set_blocking, NULL)
PHP_FE(stream_get_meta_data, NULL)
+ PHP_FE(stream_get_line, NULL)
PHP_FE(stream_register_wrapper, NULL)
PHP_FE(stream_get_wrappers, NULL)
PHP_FE(get_headers, NULL)
diff --git a/ext/standard/file.c b/ext/standard/file.c
index b369ed179e..af486081b6 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -1128,6 +1128,37 @@ PHP_FUNCTION(stream_filter_append)
apply_filter_to_stream(1, INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
/* }}} */
+
+/* {{{ proto string stream_get_line(resource stream, int maxlen, string ending)
+ Read up to maxlen bytes from a stream or until the ending string is found */
+PHP_FUNCTION(stream_get_line)
+{
+ char *str;
+ int str_len;
+ long max_length;
+ zval *zstream;
+ char *buf;
+ size_t buf_size;
+ php_stream *stream;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &zstream, &max_length, &str, &str_len) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ if (max_length < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "The maximum allowed length must be greater then or equal to zero.");
+ RETURN_FALSE;
+ }
+
+ php_stream_from_zval(stream, &zstream);
+
+ if ((buf = php_stream_get_record(stream, max_length, &buf_size, str, str_len TSRMLS_CC))) {
+ RETURN_STRINGL(buf, buf_size, 0);
+ } else {
+ RETURN_FALSE;
+ }
+}
+
/* }}} */
/* {{{ proto resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
diff --git a/ext/standard/file.h b/ext/standard/file.h
index 28fca3b304..ae379cb6a1 100644
--- a/ext/standard/file.h
+++ b/ext/standard/file.h
@@ -60,6 +60,7 @@ PHP_FUNCTION(stream_select);
PHP_FUNCTION(stream_set_timeout);
PHP_FUNCTION(stream_set_write_buffer);
PHP_FUNCTION(stream_get_wrappers);
+PHP_FUNCTION(stream_get_line);
PHP_FUNCTION(get_meta_tags);
PHP_FUNCTION(flock);
PHP_FUNCTION(fd_set);