changeset 21658:110286e8bbec

implemented STREAM_CTRL_GET_SIZE
author nicodvb
date Mon, 18 Dec 2006 20:55:12 +0000
parents 5f5ed194b54b
children da09e69a0f01
files stream/stream_file.c
diffstat 1 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/stream/stream_file.c	Mon Dec 18 20:54:38 2006 +0000
+++ b/stream/stream_file.c	Mon Dec 18 20:55:12 2006 +0000
@@ -68,6 +68,22 @@
   return 1;
 }
 
+static int control(stream_t *s, int cmd, void *arg) {
+  switch(cmd) {
+    case STREAM_CTRL_GET_SIZE: {
+      off_t size;
+
+      size = lseek(s->fd, 0, SEEK_END);
+      lseek(s->fd, s->pos, SEEK_SET);
+      if(size != (off_t)-1) {
+        *((off_t*)arg) = size;
+        return 1;
+      }
+    }
+  }
+  return STREAM_UNSUPORTED;
+}
+
 static int open_f(stream_t *stream,int mode, void* opts, int* file_format) {
   int f;
   mode_t m = 0;
@@ -148,6 +164,7 @@
   stream->fd = f;
   stream->fill_buffer = fill_buffer;
   stream->write_buffer = write_buffer;
+  stream->control = control;
 
   m_struct_free(&stream_opts,opts);
   return STREAM_OK;