iliaa Sun Feb 9 15:43:06 2003 EDT
Modified files:
/php4/main streams.c php_streams.h
/php4/ext/standard file.c file.h basic_functions.c
Log:
Added feature request #9173 (added stream_get_line(), this function will
read either the specified number of bytes or until the ending string is
found).
Index: php4/main/streams.c
diff -u php4/main/streams.c:1.144 php4/main/streams.c:1.145
--- php4/main/streams.c:1.144 Fri Feb 7 16:33:35 2003
+++ php4/main/streams.c Sun Feb 9 15:43:05 2003
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streams.c,v 1.144 2003/02/07 21:33:35 iliaa Exp $ */
+/* $Id: streams.c,v 1.145 2003/02/09 20:43:05 iliaa Exp $ */
#define _GNU_SOURCE
#include "php.h"
@@ -29,6 +29,7 @@
#include "php_open_temporary_file.h"
#include "ext/standard/file.h"
#include "ext/standard/basic_functions.h" /* for BG(mmap_file) (not strictly
required) */
+#include "ext/standard/php_string.h" /* for php_memnstr, used by
+php_stream_get_record() */
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
@@ -2607,6 +2608,40 @@
PHPAPI HashTable *php_stream_get_url_stream_wrappers_hash()
{
return &url_stream_wrappers_hash;
+}
+
+PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t
+*returned_len, char *delim, size_t delim_len TSRMLS_DC)
+{
+ char *e, *buf;
+ size_t toread;
+
+ php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC);
+
+ if (delim_len == 0) {
+ toread = maxlen;
+ } else {
+ if (delim_len == 1) {
+ e = memchr(stream->readbuf, *delim, stream->readbuflen);
+ } else {
+ e = php_memnstr(stream->readbuf, delim, delim_len,
+(stream->readbuf + stream->readbuflen));
+ }
+
+ if (!e) {
+ toread = maxlen;
+ } else {
+ toread = e - (char *) stream->readbuf;
+ }
+ }
+
+ buf = emalloc(toread + 1);
+ *returned_len = php_stream_read(stream, buf, toread);
+
+ if (*returned_len >= 0) {
+ return buf;
+ } else {
+ efree(buf);
+ return NULL;
+ }
}
/*
Index: php4/main/php_streams.h
diff -u php4/main/php_streams.h:1.67 php4/main/php_streams.h:1.68
--- php4/main/php_streams.h:1.67 Fri Feb 7 17:49:21 2003
+++ php4/main/php_streams.h Sun Feb 9 15:43:05 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_streams.h,v 1.67 2003/02/07 22:49:21 iliaa Exp $ */
+/* $Id: php_streams.h,v 1.68 2003/02/09 20:43:05 iliaa Exp $ */
#ifndef PHP_STREAMS_H
#define PHP_STREAMS_H
@@ -290,6 +290,7 @@
PHPAPI php_stream_filter *php_stream_filter_remove(php_stream *stream,
php_stream_filter *filter, int call_dtor TSRMLS_DC);
PHPAPI void php_stream_filter_free(php_stream_filter *filter TSRMLS_DC);
PHPAPI php_stream_filter *_php_stream_filter_alloc(php_stream_filter_ops *fops, void
*abstract, int persistent STREAMS_DC TSRMLS_DC);
+PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t
+*returned_len, char *delim, size_t delim_len TSRMLS_DC);
#define php_stream_filter_alloc(fops, thisptr, persistent)
_php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_CC TSRMLS_CC)
#define php_stream_filter_alloc_rel(fops, thisptr, persistent)
_php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_REL_CC TSRMLS_CC)
Index: php4/ext/standard/file.c
diff -u php4/ext/standard/file.c:1.298 php4/ext/standard/file.c:1.299
--- php4/ext/standard/file.c:1.298 Sun Feb 9 15:35:54 2003
+++ php4/ext/standard/file.c Sun Feb 9 15:43:05 2003
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.298 2003/02/09 20:35:54 iliaa Exp $ */
+/* $Id: file.c,v 1.299 2003/02/09 20:43:05 iliaa Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -1128,6 +1128,37 @@
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]])
Index: php4/ext/standard/file.h
diff -u php4/ext/standard/file.h:1.73 php4/ext/standard/file.h:1.74
--- php4/ext/standard/file.h:1.73 Fri Jan 3 03:02:36 2003
+++ php4/ext/standard/file.h Sun Feb 9 15:43:05 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.h,v 1.73 2003/01/03 08:02:36 pollita Exp $ */
+/* $Id: file.h,v 1.74 2003/02/09 20:43:05 iliaa Exp $ */
/* Synced with php 3.0 revision 1.30 1999-06-16 [ssb] */
@@ -60,6 +60,7 @@
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);
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.575
php4/ext/standard/basic_functions.c:1.576
--- php4/ext/standard/basic_functions.c:1.575 Sun Feb 9 14:09:50 2003
+++ php4/ext/standard/basic_functions.c Sun Feb 9 15:43:05 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.575 2003/02/09 19:09:50 sniper Exp $ */
+/* $Id: basic_functions.c,v 1.576 2003/02/09 20:43:05 iliaa Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -681,6 +681,7 @@
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)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php