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