At 18:58 16.03.2002, Marcus Boerger wrote:
>At the moment i am working at memory-streams....
>
>If have the following problem left:
>I must extend
>struct _php_stream_ops
>with ftell....
>
>by the way php_stream_tell is wrong because it relies on seek and
>that does return either 0 on success or an erroecode....
The following patch adds ftell as a stream function and changes the default
implementation.
diff -u -w -r1.13 php_streams.h
--- main/php_streams.h 16 Mar 2002 14:39:51 -0000 1.13
+++ main/php_streams.h 16 Mar 2002 18:48:47 -0000
@@ -47,6 +47,7 @@
int (*flush)(php_stream *stream);
/* these are optional */
int (*seek)(php_stream *stream, off_t offset, int whence);
+ long (*tell)(php_stream *stream);
char *(*gets)(php_stream *stream, char *buf, size_t size);
int (*cast)(php_stream *stream, int castas, void **ret);
const char *label; /* label for this ops structure */
@@ -90,7 +91,7 @@
PHPAPI int php_stream_seek(php_stream *stream, off_t offset, int whence);
#define php_stream_rewind(stream) php_stream_seek(stream, 0L, SEEK_SET)
-PHPAPI off_t php_stream_tell(php_stream *stream);
+PHPAPI long php_stream_tell(php_stream *stream);
PHPAPI size_t php_stream_read(php_stream *stream, char *buf, size_t count);
PHPAPI size_t php_stream_write(php_stream *stream, const char *buf,
size_t count);
#define php_stream_write_string(stream, str) php_stream_write(stream,
str, strlen(str))
diff -u -w -r1.21 streams.c
--- main/streams.c 16 Mar 2002 16:06:18 -0000 1.21
+++ main/streams.c 16 Mar 2002 18:48:48 -0000
@@ -197,12 +197,12 @@
return stream->ops->write(stream, buf, count);
}
-PHPAPI off_t php_stream_tell(php_stream *stream)
+PHPAPI long php_stream_tell(php_stream *stream)
{
off_t ret = -1;
- if (stream->ops->seek) {
- ret = stream->ops->seek(stream, 0, SEEK_CUR);
+ if (stream->ops->tell) {
+ ret = stream->ops->tell(stream);
}
return ret;
}
@@ -539,6 +539,15 @@
return fseek(data->file, offset, whence);
}
+static long php_stdio_tell(php_stream *stream)
+{
+ php_stdio_stream_data *data = (php_stdio_stream_data*)stream->abstract;
+
+ assert(data != NULL);
+
+ return ftell(data->file);
+}
+
static char *php_stdiop_gets(php_stream *stream, char *buf, size_t size)
{
php_stdio_stream_data *data =
(php_stdio_stream_data*)stream->abstract;
@@ -583,7 +592,8 @@
php_stream_ops php_stream_stdio_ops = {
php_stdiop_write, php_stdiop_read,
- php_stdiop_close, php_stdiop_flush, php_stdiop_seek,
+ php_stdiop_close, php_stdiop_flush,
+ php_stdiop_seek, php_stdio_tell,
php_stdiop_gets, php_stdiop_cast,
"STDIO"
};
>regards
>marcus
>
>
>
>--------->>> mailto:[EMAIL PROTECTED] <<<------------
> I don't want to start any blashphemous rumours
> but i think that god's got a sick sense of humor
> and when i die i expect to find him laughing.
> Depeche Mode
>--------------->>> http://www.marcus-boerger.de <<<-------------------
>
>
>--
>PHP Development Mailing List <http://www.php.net/>
>To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php