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

Reply via email to