summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/exec.c2
-rwxr-xr-xmain/streams.c9
2 files changed, 9 insertions, 2 deletions
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index fd5076297b..7313ce6e57 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -976,7 +976,7 @@ PHP_FUNCTION(proc_open)
fp = fdopen(descriptors[i].parentend, mode_string);
#endif
if (fp) {
- stream = php_stream_fopen_from_pipe(fp, mode_string);
+ stream = php_stream_fopen_from_file(fp, mode_string);
if (stream) {
zval *retfp;
diff --git a/main/streams.c b/main/streams.c
index b8a67cfb4f..abfdd52255 100755
--- a/main/streams.c
+++ b/main/streams.c
@@ -1298,6 +1298,7 @@ PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC TSRMLS_DC)
PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC TSRMLS_DC)
{
php_stdio_stream_data *self;
+ php_stream *stream;
self = emalloc_rel_orig(sizeof(*self));
self->file = file;
@@ -1314,7 +1315,13 @@ PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STRE
}
#endif
- return php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
+ stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
+
+ if (stream && self->is_pipe) {
+ stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
+ }
+
+ return stream;
}
PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC TSRMLS_DC)