summaryrefslogtreecommitdiff
path: root/ext/standard/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/file.c')
-rw-r--r--ext/standard/file.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c
index a651c8744c..d0f574f224 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -586,7 +586,7 @@ PHP_FUNCTION(file_put_contents)
char *filename;
size_t filename_len;
zval *data;
- size_t numbytes = 0;
+ ssize_t numbytes = 0;
zend_long flags = 0;
zval *zcontext = NULL;
php_stream_context *context = NULL;
@@ -669,7 +669,7 @@ PHP_FUNCTION(file_put_contents)
case IS_ARRAY:
if (zend_hash_num_elements(Z_ARRVAL_P(data))) {
- size_t bytes_written;
+ ssize_t bytes_written;
zval *tmp;
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), tmp) {
@@ -710,7 +710,7 @@ PHP_FUNCTION(file_put_contents)
}
php_stream_close(stream);
- if (numbytes == (size_t)-1) {
+ if (numbytes < 0) {
RETURN_FALSE;
}
@@ -1184,14 +1184,14 @@ PHP_FUNCTION(fscanf)
}
/* }}} */
-/* {{{ proto int fwrite(resource fp, string str [, int length])
+/* {{{ proto int|false fwrite(resource fp, string str [, int length])
Binary-safe file write */
PHPAPI PHP_FUNCTION(fwrite)
{
zval *res;
char *input;
size_t inputlen;
- size_t ret;
+ ssize_t ret;
size_t num_bytes;
zend_long maxlen = 0;
php_stream *stream;
@@ -1218,6 +1218,9 @@ PHPAPI PHP_FUNCTION(fwrite)
PHP_STREAM_TO_ZVAL(stream, res);
ret = php_stream_write(stream, input, num_bytes);
+ if (ret < 0) {
+ RETURN_FALSE;
+ }
RETURN_LONG(ret);
}
@@ -1783,13 +1786,14 @@ safe_to_copy:
}
/* }}} */
-/* {{{ proto string fread(resource fp, int length)
+/* {{{ proto string|false fread(resource fp, int length)
Binary-safe file read */
PHPAPI PHP_FUNCTION(fread)
{
zval *res;
zend_long len;
php_stream *stream;
+ zend_string *str;
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_RESOURCE(res)
@@ -1803,15 +1807,13 @@ PHPAPI PHP_FUNCTION(fread)
RETURN_FALSE;
}
- ZVAL_NEW_STR(return_value, zend_string_alloc(len, 0));
- Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len);
-
- /* needed because recv/read/gzread doesn't put a null at the end*/
- Z_STRVAL_P(return_value)[Z_STRLEN_P(return_value)] = 0;
-
- if (Z_STRLEN_P(return_value) < len / 2) {
- Z_STR_P(return_value) = zend_string_truncate(Z_STR_P(return_value), Z_STRLEN_P(return_value), 0);
+ str = php_stream_read_to_str(stream, len);
+ if (!str) {
+ zval_ptr_dtor_str(return_value);
+ RETURN_FALSE;
}
+
+ RETURN_STR(str);
}
/* }}} */
@@ -1864,7 +1866,7 @@ PHP_FUNCTION(fputcsv)
int escape_char = (unsigned char) '\\'; /* allow this to be set as parameter */
php_stream *stream;
zval *fp = NULL, *fields = NULL;
- size_t ret;
+ ssize_t ret;
char *delimiter_str = NULL, *enclosure_str = NULL, *escape_str = NULL;
size_t delimiter_str_len = 0, enclosure_str_len = 0, escape_str_len = 0;
@@ -1916,12 +1918,15 @@ PHP_FUNCTION(fputcsv)
PHP_STREAM_TO_ZVAL(stream, fp);
ret = php_fputcsv(stream, fields, delimiter, enclosure, escape_char);
+ if (ret < 0) {
+ RETURN_FALSE;
+ }
RETURN_LONG(ret);
}
/* }}} */
/* {{{ PHPAPI size_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, int escape_char) */
-PHPAPI size_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, int escape_char)
+PHPAPI ssize_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, int escape_char)
{
int count, i = 0;
size_t ret;