diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/file.c | 41 | ||||
-rw-r--r-- | ext/standard/ftp_fopen_wrapper.c | 13 | ||||
-rw-r--r-- | ext/standard/http_fopen_wrapper.c | 14 | ||||
-rw-r--r-- | ext/standard/php_fopen_wrapper.c | 2 | ||||
-rw-r--r-- | ext/zlib/zlib_fopen_wrapper.c | 3 |
5 files changed, 48 insertions, 25 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c index 4d3e952406..fcd50a3cbd 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1529,9 +1529,8 @@ PHP_NAMED_FUNCTION(php_if_fstat) zval *stat_dev, *stat_ino, *stat_mode, *stat_nlink, *stat_uid, *stat_gid, *stat_rdev, *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks; int type; - void *what; - struct stat stat_sb; - int fd; + php_stream *stream; + php_stream_statbuf stat_ssb; char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev", "size", "atime", "mtime", "ctime", "blksize", "blocks"}; @@ -1540,41 +1539,37 @@ PHP_NAMED_FUNCTION(php_if_fstat) WRONG_PARAM_COUNT; } - what = zend_fetch_resource(fp TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream); - ZEND_VERIFY_RESOURCE(what); + stream = (php_stream *) zend_fetch_resource(fp TSRMLS_CC,-1, "File-Handle", &type, 1, le_stream); + ZEND_VERIFY_RESOURCE(stream); - if (FAILURE == php_stream_cast((php_stream*)what, PHP_STREAM_AS_FD, (void*)&fd, 1)) { - RETURN_FALSE; - } - - if (fstat(fd, &stat_sb)) { + if (php_stream_stat(stream, &stat_ssb)) { RETURN_FALSE; } array_init(return_value); - MAKE_LONG_ZVAL_INCREF(stat_dev, stat_sb.st_dev); - MAKE_LONG_ZVAL_INCREF(stat_ino, stat_sb.st_ino); - MAKE_LONG_ZVAL_INCREF(stat_mode, stat_sb.st_mode); - MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_sb.st_nlink); - MAKE_LONG_ZVAL_INCREF(stat_uid, stat_sb.st_uid); - MAKE_LONG_ZVAL_INCREF(stat_gid, stat_sb.st_gid); + MAKE_LONG_ZVAL_INCREF(stat_dev, stat_ssb.sb.st_dev); + MAKE_LONG_ZVAL_INCREF(stat_ino, stat_ssb.sb.st_ino); + MAKE_LONG_ZVAL_INCREF(stat_mode, stat_ssb.sb.st_mode); + MAKE_LONG_ZVAL_INCREF(stat_nlink, stat_ssb.sb.st_nlink); + MAKE_LONG_ZVAL_INCREF(stat_uid, stat_ssb.sb.st_uid); + MAKE_LONG_ZVAL_INCREF(stat_gid, stat_ssb.sb.st_gid); #ifdef HAVE_ST_RDEV - MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_sb.st_rdev); + MAKE_LONG_ZVAL_INCREF(stat_rdev, stat_ssb.sb.st_rdev); #else MAKE_LONG_ZVAL_INCREF(stat_rdev, -1); #endif - MAKE_LONG_ZVAL_INCREF(stat_size, stat_sb.st_size); - MAKE_LONG_ZVAL_INCREF(stat_atime, stat_sb.st_atime); - MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_sb.st_mtime); - MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_sb.st_ctime); + MAKE_LONG_ZVAL_INCREF(stat_size, stat_ssb.sb.st_size); + MAKE_LONG_ZVAL_INCREF(stat_atime, stat_ssb.sb.st_atime); + MAKE_LONG_ZVAL_INCREF(stat_mtime, stat_ssb.sb.st_mtime); + MAKE_LONG_ZVAL_INCREF(stat_ctime, stat_ssb.sb.st_ctime); #ifdef HAVE_ST_BLKSIZE - MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_sb.st_blksize); + MAKE_LONG_ZVAL_INCREF(stat_blksize, stat_ssb.sb.st_blksize); #else MAKE_LONG_ZVAL_INCREF(stat_blksize,-1); #endif #ifdef HAVE_ST_BLOCKS - MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_sb.st_blocks); + MAKE_LONG_ZVAL_INCREF(stat_blocks, stat_ssb.sb.st_blocks); #else MAKE_LONG_ZVAL_INCREF(stat_blocks,-1); #endif diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index 70bf9e68ae..e7f6eef638 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -77,8 +77,21 @@ static int php_get_ftp_result(php_stream *stream TSRMLS_DC) return strtol(tmp_line, NULL, 10); } +static int php_stream_ftp_stream_stat(php_stream_wrapper *wrapper, + php_stream *stream, + php_stream_statbuf *ssb + TSRMLS_DC) +{ + /* For now, we return with a failure code to prevent the underlying + * file's details from being used instead. */ + return -1; +} + + static php_stream_wrapper_ops ftp_stream_wops = { php_stream_url_wrap_ftp, + NULL, + php_stream_ftp_stream_stat, NULL }; diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 2f566bd1b3..c96f43ddff 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -70,7 +70,6 @@ #define HTTP_HEADER_BLOCK_SIZE 1024 - php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path STREAMS_DC TSRMLS_DC) { php_stream *stream = NULL; @@ -309,8 +308,21 @@ out: return stream; } +static int php_stream_http_stream_stat(php_stream_wrapper *wrapper, + php_stream *stream, + php_stream_statbuf *ssb + TSRMLS_DC) +{ + /* one day, we could fill in the details based on Date: and Content-Length: + * headers. For now, we return with a failure code to prevent the underlying + * file's details from being used instead. */ + return -1; +} + static php_stream_wrapper_ops http_stream_wops = { php_stream_url_wrap_http, + NULL, + php_stream_http_stream_stat, NULL }; diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c index 842df5fcee..e7f07a9e9b 100644 --- a/ext/standard/php_fopen_wrapper.c +++ b/ext/standard/php_fopen_wrapper.c @@ -57,6 +57,8 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch static php_stream_wrapper_ops php_stdio_wops = { php_stream_url_wrap_php, + NULL, + NULL, NULL }; diff --git a/ext/zlib/zlib_fopen_wrapper.c b/ext/zlib/zlib_fopen_wrapper.c index c6e60e3638..c345241aa6 100644 --- a/ext/zlib/zlib_fopen_wrapper.c +++ b/ext/zlib/zlib_fopen_wrapper.c @@ -88,8 +88,9 @@ static int php_gziop_flush(php_stream *stream TSRMLS_DC) php_stream_ops php_stream_gzio_ops = { php_gziop_write, php_gziop_read, php_gziop_close, php_gziop_flush, + "ZLIB", php_gziop_seek, php_gziop_gets, - NULL, "ZLIB" + NULL, NULL }; php_stream *php_stream_gzopen(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path STREAMS_DC TSRMLS_DC) |