dmitry Fri Nov 10 13:18:47 2006 UTC
Modified files:
/php-src/main/streams plain_wrapper.c
Log:
Removed unnecessary ftell() calls (one call for each included PHP file)
http://cvs.php.net/viewvc.cgi/php-src/main/streams/plain_wrapper.c?r1=1.76&r2=1.77&diff_format=u
Index: php-src/main/streams/plain_wrapper.c
diff -u php-src/main/streams/plain_wrapper.c:1.76
php-src/main/streams/plain_wrapper.c:1.77
--- php-src/main/streams/plain_wrapper.c:1.76 Fri Nov 10 13:10:28 2006
+++ php-src/main/streams/plain_wrapper.c Fri Nov 10 13:18:46 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: plain_wrapper.c,v 1.76 2006/11/10 13:10:28 dmitry Exp $ */
+/* $Id: plain_wrapper.c,v 1.77 2006/11/10 13:18:46 dmitry Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -39,6 +39,11 @@
#include "php_streams_int.h"
+#define php_stream_fopen_from_fd_int(fd, mode, persistent_id)
_php_stream_fopen_from_fd_int((fd), (mode), (persistent_id) STREAMS_CC
TSRMLS_CC)
+#define php_stream_fopen_from_fd_int_rel(fd, mode, persistent_id)
_php_stream_fopen_from_fd_int((fd), (mode), (persistent_id) STREAMS_REL_CC
TSRMLS_CC)
+#define php_stream_fopen_from_file_int(file, mode)
_php_stream_fopen_from_file_int((file), (mode) STREAMS_CC TSRMLS_CC)
+#define php_stream_fopen_from_file_int_rel(file, mode)
_php_stream_fopen_from_file_int((file), (mode) STREAMS_REL_CC TSRMLS_CC)
+
/* parse standard "fopen" modes into open() flags */
PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags)
{
@@ -128,12 +133,44 @@
return 0;
}
+static php_stream *_php_stream_fopen_from_fd_int(int fd, const char *mode,
const char *persistent_id STREAMS_DC TSRMLS_DC)
+{
+ php_stdio_stream_data *self;
+
+ self = pemalloc_rel_orig(sizeof(*self), persistent_id);
+ memset(self, 0, sizeof(*self));
+ self->file = NULL;
+ self->is_pipe = 0;
+ self->lock_flag = LOCK_UN;
+ self->is_process_pipe = 0;
+ self->temp_file_name = NULL;
+ self->fd = fd;
+
+ return php_stream_alloc_rel(&php_stream_stdio_ops, self, persistent_id,
mode);
+}
+
+static php_stream *_php_stream_fopen_from_file_int(FILE *file, const char
*mode STREAMS_DC TSRMLS_DC)
+{
+ php_stdio_stream_data *self;
+
+ self = emalloc_rel_orig(sizeof(*self));
+ memset(self, 0, sizeof(*self));
+ self->file = file;
+ self->is_pipe = 0;
+ self->lock_flag = LOCK_UN;
+ self->is_process_pipe = 0;
+ self->temp_file_name = NULL;
+ self->fd = fileno(file);
+
+ return php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
+}
+
PHPAPI php_stream *_php_stream_fopen_temporary_file(const char *dir, const
char *pfx, char **opened_path STREAMS_DC TSRMLS_DC)
{
int fd = php_open_temporary_fd(dir, pfx, opened_path TSRMLS_CC);
if (fd != -1) {
- php_stream *stream = php_stream_fopen_from_fd_rel(fd, "r+b",
NULL);
+ php_stream *stream = php_stream_fopen_from_fd_int_rel(fd,
"r+b", NULL);
if (stream) {
return stream;
}
@@ -152,7 +189,7 @@
int fd = php_open_temporary_fd(NULL, "php", &opened_path TSRMLS_CC);
if (fd != -1) {
- php_stream *stream = php_stream_fopen_from_fd_rel(fd, "r+b",
NULL);
+ php_stream *stream = php_stream_fopen_from_fd_int_rel(fd,
"r+b", NULL);
if (stream) {
php_stdio_stream_data *self =
(php_stdio_stream_data*)stream->abstract;
stream->wrapper = &php_plain_files_wrapper;
@@ -174,36 +211,26 @@
PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const
char *persistent_id STREAMS_DC TSRMLS_DC)
{
- php_stdio_stream_data *self;
- php_stream *stream;
-
- self = pemalloc_rel_orig(sizeof(*self), persistent_id);
- memset(self, 0, sizeof(*self));
- self->file = NULL;
- self->is_pipe = 0;
- self->lock_flag = LOCK_UN;
- self->is_process_pipe = 0;
- self->temp_file_name = NULL;
- self->fd = fd;
+ php_stream *stream = php_stream_fopen_from_fd_int_rel(fd, mode,
persistent_id);
+
+ if (stream) {
+ php_stdio_stream_data *self =
(php_stdio_stream_data*)stream->abstract;
#ifdef S_ISFIFO
- /* detect if this is a pipe */
- if (self->fd >= 0) {
- self->is_pipe = (do_fstat(self, 0) == 0 &&
S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
- }
+ /* detect if this is a pipe */
+ if (self->fd >= 0) {
+ self->is_pipe = (do_fstat(self, 0) == 0 &&
S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
+ }
#elif defined(PHP_WIN32)
- {
- long handle = _get_osfhandle(self->fd);
+ {
+ long handle = _get_osfhandle(self->fd);
- if (handle != 0xFFFFFFFF) {
- self->is_pipe = GetFileType((HANDLE)handle) ==
FILE_TYPE_PIPE;
+ if (handle != 0xFFFFFFFF) {
+ self->is_pipe = GetFileType((HANDLE)handle) ==
FILE_TYPE_PIPE;
+ }
}
- }
#endif
- stream = php_stream_alloc_rel(&php_stream_stdio_ops, self,
persistent_id, mode);
-
- if (stream) {
if (self->is_pipe) {
stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
} else {
@@ -223,36 +250,26 @@
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));
- memset(self, 0, sizeof(*self));
- self->file = file;
- self->is_pipe = 0;
- self->lock_flag = LOCK_UN;
- self->is_process_pipe = 0;
- self->temp_file_name = NULL;
- self->fd = fileno(file);
+ php_stream *stream = php_stream_fopen_from_file_int_rel(file, mode);
+
+ if (stream) {
+ php_stdio_stream_data *self =
(php_stdio_stream_data*)stream->abstract;
#ifdef S_ISFIFO
- /* detect if this is a pipe */
- if (self->fd >= 0) {
- self->is_pipe = (do_fstat(self, 0) == 0 &&
S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
- }
+ /* detect if this is a pipe */
+ if (self->fd >= 0) {
+ self->is_pipe = (do_fstat(self, 0) == 0 &&
S_ISFIFO(self->sb.st_mode)) ? 1 : 0;
+ }
#elif defined(PHP_WIN32)
- {
- long handle = _get_osfhandle(self->fd);
+ {
+ long handle = _get_osfhandle(self->fd);
- if (handle != 0xFFFFFFFF) {
- self->is_pipe = GetFileType((HANDLE)handle) ==
FILE_TYPE_PIPE;
+ if (handle != 0xFFFFFFFF) {
+ self->is_pipe = GetFileType((HANDLE)handle) ==
FILE_TYPE_PIPE;
+ }
}
- }
#endif
- stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode);
-
- if (stream) {
if (self->is_pipe) {
stream->flags |= PHP_STREAM_FLAG_NO_SEEK;
} else {
@@ -880,7 +897,11 @@
if (fd != -1) {
- ret = php_stream_fopen_from_fd_rel(fd, mode, persistent_id);
+ if (options & STREAM_OPEN_FOR_INCLUDE) {
+ ret = php_stream_fopen_from_fd_int_rel(fd, mode,
persistent_id);
+ } else {
+ ret = php_stream_fopen_from_fd_rel(fd, mode,
persistent_id);
+ }
if (ret) {
if (opened_path) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php