summaryrefslogtreecommitdiff
path: root/main/streams/streams.c
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2014-04-03 10:41:24 +0200
committerMichael Wallner <mike@php.net>2014-04-03 10:41:24 +0200
commit55005c86383f4616a2ca02333af9630f617a1a2e (patch)
tree6c9dfa69ce9c6c025cb0c0d18cee3d0b294f1b27 /main/streams/streams.c
parent1c2bcec68a260502b72bda9eb8a1e9c3ef4ddafe (diff)
parent60ef357ffcc0335ff728cef498bfc9e06773fd3a (diff)
downloadphp-git-55005c86383f4616a2ca02333af9630f617a1a2e.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: NEWS Fix Bug #66736 fpassthru broken
Diffstat (limited to 'main/streams/streams.c')
-rw-r--r--main/streams/streams.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c
index 5049d88df6..9f9661dbfd 100644
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -1400,11 +1400,16 @@ PHPAPI size_t _php_stream_passthru(php_stream * stream STREAMS_DC TSRMLS_DC)
p = php_stream_mmap_range(stream, php_stream_tell(stream), PHP_STREAM_MMAP_ALL, PHP_STREAM_MAP_MODE_SHARED_READONLY, &mapped);
if (p) {
- PHPWRITE(p, mapped);
+ do {
+ /* output functions return int, so pass in int max */
+ if (0 < (b = PHPWRITE(p, MIN(mapped - bcount, INT_MAX)))) {
+ bcount += b;
+ }
+ } while (b > 0 && mapped > bcount);
php_stream_mmap_unmap_ex(stream, mapped);
- return mapped;
+ return bcount;
}
}