WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Merge iostream fixes.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Merge iostream fixes.
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Fri, 13 May 2005 15:01:20 +0000
Delivery-date: Fri, 13 May 2005 20:06:57 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1402, 2005/05/13 16:01:20+01:00, mjw@xxxxxxxxxxxxxxxxxxx

        Merge iostream fixes.
        Signed-off-by: Mike Wray <mike.wray@xxxxxx>



 b/tools/libxutil/file_stream.c   |   25 +--
 b/tools/libxutil/gzip_stream.c   |   13 -
 b/tools/libxutil/iostream.h      |   44 ++---
 b/tools/libxutil/kernel_stream.c |   49 +++---
 b/tools/libxutil/string_stream.c |   35 +++-
 tools/xfrd/http.h                |   50 ------
 tools/xfrd/xdr.c                 |  316 ---------------------------------------
 tools/xfrd/xdr.h                 |   30 ---
 8 files changed, 95 insertions(+), 467 deletions(-)


diff -Nru a/tools/libxutil/file_stream.c b/tools/libxutil/file_stream.c
--- a/tools/libxutil/file_stream.c      2005-05-13 16:07:32 -04:00
+++ b/tools/libxutil/file_stream.c      2005-05-13 16:07:32 -04:00
@@ -46,18 +46,21 @@
 static IOStream _iostdin = {
     methods: &file_methods,
     data: (void*)1,
+    nofree: 1,
 };
 
 /** IOStream for stdout. */
 static IOStream _iostdout = {
     methods: &file_methods,
     data: (void*)2,
+    nofree: 1,
 };
 
 /** IOStream for stderr. */
 static IOStream _iostderr = {
     methods: &file_methods,
     data: (void*)3,
+    nofree: 1,
 };
 
 /** IOStream for stdin. */
@@ -152,10 +155,7 @@
  */
 static int file_close(IOStream *s){
     int result = 0;
-    if (s->data){
-        result = fclose(get_file(s));
-        s->data = (void*)0;
-    }
+    result = fclose(get_file(s));
     return result;
 }
 
@@ -164,7 +164,7 @@
  * @param s file stream
  */
 static void file_free(IOStream *s){
-    file_close(s);
+    // Nothing extra to do - close did it all.
 }
 
 /** Create an IOStream for a stream.
@@ -175,8 +175,8 @@
 IOStream *file_stream_new(FILE *f){
     IOStream *io = ALLOCATE(IOStream);
     if(io){
-       io->methods = &file_methods;
-       io->data = (void*)f;
+        io->methods = &file_methods;
+        io->data = (void*)f;
     }
     return io;
 }
@@ -191,10 +191,10 @@
     IOStream *io = 0;
     FILE *fin = fopen(file, flags);
     if(fin){
-       io = file_stream_new(fin);
-       if(!io){
-           fclose(fin);
-       }
+        io = file_stream_new(fin);
+        if(!io){
+            fclose(fin);
+        }
     }
     return io;
 }
@@ -211,8 +211,9 @@
     FILE *fin = fdopen(fd, flags);
     if(fin){
         io = file_stream_new(fin);
-        if(!io)
+        if(!io){
             fclose(fin);
+        }
     }
     return io;
 }
diff -Nru a/tools/libxutil/gzip_stream.c b/tools/libxutil/gzip_stream.c
--- a/tools/libxutil/gzip_stream.c      2005-05-13 16:07:32 -04:00
+++ b/tools/libxutil/gzip_stream.c      2005-05-13 16:07:32 -04:00
@@ -39,7 +39,7 @@
 
 /** Methods used by a gzFile* IOStream. */
 static const IOMethods gzip_methods = {
-    read: gzip_read,
+    read:  gzip_read,
     write: gzip_write,
     error: gzip_error,
     close: gzip_close,
@@ -108,10 +108,7 @@
  */
 static int gzip_close(IOStream *s){
     int result = 0;
-    if (s->data){
-        result = gzclose(get_gzfile(s));
-        s->data = (void*)0;
-    }
+    result = gzclose(get_gzfile(s));
     return result;
 }
 
@@ -120,7 +117,7 @@
  * @param s gzip stream
  */
 static void gzip_free(IOStream *s){
-    gzip_close(s);
+    // Nothing to do - close did it all.
 }
 
 /** Create an IOStream for a gzip stream.
@@ -131,8 +128,8 @@
 IOStream *gzip_stream_new(gzFile *f){
     IOStream *io = ALLOCATE(IOStream);
     if(io){
-       io->methods = &gzip_methods;
-       io->data = (void*)f;
+        io->methods = &gzip_methods;
+        io->data = (void*)f;
     }
     return io;
 }
diff -Nru a/tools/libxutil/iostream.h b/tools/libxutil/iostream.h
--- a/tools/libxutil/iostream.h 2005-05-13 16:07:32 -04:00
+++ b/tools/libxutil/iostream.h 2005-05-13 16:07:32 -04:00
@@ -33,7 +33,7 @@
 
 #include "allocate.h"
 
-/** End of input return value. */
+/** End of input return value (for getc). */
 #define IOSTREAM_EOF -1
 
 /** An input/output abstraction.
@@ -82,6 +82,8 @@
     int written;
     /** Number of bytes read. */
     int read;
+    /** Flag indicating whether not to free when closed. */
+    int nofree;
 };
 
 
@@ -107,7 +109,7 @@
 static inline int IOStream_read(IOStream *stream, void *buf, size_t n){
     int result;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
         goto exit;
     }
     if(!stream->methods || !stream->methods->read){
@@ -132,7 +134,7 @@
 static inline int IOStream_write(IOStream *stream, const void *buf, size_t n){
     int result;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
         goto exit;
     }
     if(!stream->methods || !stream->methods->write){
@@ -150,15 +152,14 @@
 /** Flush the stream.
  *
  * @param stream stream
- * @return 0 on success, IOSTREAM_EOF otherwise
+ * @return 0 on success, negative error code otherwise
  */
 static inline int IOStream_flush(IOStream *stream){
     int result = 0;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
     } else if(stream->methods->flush){
         result = (stream->methods->flush)(stream);
-        if(result < 0) result = IOSTREAM_EOF;
     }
     return result;
 }
@@ -179,14 +180,25 @@
 /** Close the stream.
  *
  * @param stream to close
- * @return 1 for error, 0 otherwise
+ * @return 0 on success, negative error code otherwise
  */
 static inline int IOStream_close(IOStream *stream){
-    int err = 1;
+    int err = 0;
+    if(!stream || stream->closed){
+        err = -EIO;
+        goto exit;
+    }
     if(stream->methods && stream->methods->close){
         err = (stream->methods->close)(stream);
         stream->closed = 1;
     }
+    if(stream->nofree) goto exit;
+    if(stream->methods && stream->methods->free){
+        (stream->methods->free)(stream);
+    }
+    *stream = (IOStream){};
+    deallocate(stream);
+  exit:
     return err;
 }
 
@@ -198,22 +210,6 @@
 static inline int IOStream_is_closed(IOStream *stream){
     return stream->closed;
 }
-
-/** Free the memory used by the stream.
- *
- * @param stream to free
- */
-static inline void IOStream_free(IOStream *stream){
-    if(!stream->closed && stream->methods && stream->methods->close){
-        (stream->methods->close)(stream);
-    }
-    if(stream->methods && stream->methods->free){
-        (stream->methods->free)(stream);
-    }
-    *stream = (IOStream){};
-    deallocate(stream);
-}
-
 
 /** Print a character to a stream, like fputc().
  *
diff -Nru a/tools/libxutil/kernel_stream.c b/tools/libxutil/kernel_stream.c
--- a/tools/libxutil/kernel_stream.c    2005-05-13 16:07:32 -04:00
+++ b/tools/libxutil/kernel_stream.c    2005-05-13 16:07:32 -04:00
@@ -57,10 +57,10 @@
 
 /** Methods for a kernel stream. Output only. */
 static const IOMethods kernel_methods = {
-  write:  kernel_write,
-  free:   kernel_free,
-  lock:   kernel_stream_lock,
-  unlock: kernel_stream_unlock,
+    write:  kernel_write,
+    free:   kernel_free,
+    lock:   kernel_stream_lock,
+    unlock: kernel_stream_unlock,

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Merge iostream fixes., BitKeeper Bot <=