## GMimeStream

GMimeStream — Abstract stream class

## Synopsis

    enum                GMimeSeekWhence;
                        GMimeStreamIOVector;
                        GMimeStream;
    void                g_mime_stream_construct             (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);
    void                g_mime_stream_ref                   (GMimeStream *stream);
    void                g_mime_stream_unref                 (GMimeStream *stream);
    ssize_t             g_mime_stream_read                  (GMimeStream *stream,
                                                             char *buf,
                                                             size_t len);
    ssize_t             g_mime_stream_write                 (GMimeStream *stream,
                                                             const char *buf,
                                                             size_t len);
    int                 g_mime_stream_flush                 (GMimeStream *stream);
    off_t               g_mime_stream_seek                  (GMimeStream *stream,
                                                             off_t offset,
                                                             GMimeSeekWhence whence);
    off_t               g_mime_stream_tell                  (GMimeStream *stream);
    int                 g_mime_stream_reset                 (GMimeStream *stream);
    gboolean            g_mime_stream_eos                   (GMimeStream *stream);
    int                 g_mime_stream_close                 (GMimeStream *stream);
    ssize_t             g_mime_stream_length                (GMimeStream *stream);
    GMimeStream*        g_mime_stream_substream             (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);
    void                g_mime_stream_set_bounds            (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);
    ssize_t             g_mime_stream_write_string          (GMimeStream *stream,
                                                             const char *string);
    ssize_t             g_mime_stream_printf                (GMimeStream *stream,
                                                             const char *fmt,
                                                             ...);
    ssize_t             g_mime_stream_write_to_stream       (GMimeStream *src,
                                                             GMimeStream *dest);
    ssize_t             g_mime_stream_writev                (GMimeStream *stream,
                                                             GMimeStreamIOVector *vector,
                                                             size_t count);

## Object Hierarchy

      GObject
       +----GMimeStream
             +----GMimeStreamBuffer
             +----GMimeStreamCat
             +----GMimeStreamFile
             +----GMimeStreamFilter
             +----GMimeStreamFs
             +----GMimeStreamMem
             +----GMimeStreamMmap
             +----GMimeStreamNull

## Description

Streams are the fundamental method for reading and writing data used by GMime. You'll probably notice that the basic API is similar to that of the low-level Unix I/O layer (`read()`, `write()`, `lseek()`, etc) with some additional nicities such as a printf-like function.

## Details

### enum GMimeSeekWhence

    typedef enum {
    	GMIME_STREAM_SEEK_SET = SEEK_SET,
    	GMIME_STREAM_SEEK_CUR = SEEK_CUR,
    	GMIME_STREAM_SEEK_END = SEEK_END
    } GMimeSeekWhence;

Relative seek position.

`GMIME_STREAM_SEEK_SET` | Seek relative to the beginning of the stream.
`GMIME_STREAM_SEEK_CUR` | Seek relative to the current position in the stream.
`GMIME_STREAM_SEEK_END` | Seek relative to the end of the stream.

### GMimeStreamIOVector

    typedef struct {
    	void *data;
    	size_t len;
    } GMimeStreamIOVector;

An I/O vector for use with `g_mime_stream_writev()`.

void *`data`; | data to pass to the I/O function.
size_t `len`; | length of the data, in bytes.

### GMimeStream

    typedef struct _GMimeStream GMimeStream;

### g_mime_stream_construct ()

    void                g_mime_stream_construct             (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);

Initializes a new stream with bounds `start` and `end`.

`stream` : | stream
`start` : | start boundary
`end` : | end boundary

### g_mime_stream_ref ()

    void                g_mime_stream_ref                   (GMimeStream *stream);

### Warning

`g_mime_stream_ref` is deprecated and should not be used in newly-written code.

Ref's a stream.

WARNING: This method is deprecated. Use `g_object_ref()` instead.

`stream` : | stream

### g_mime_stream_unref ()

    void                g_mime_stream_unref                 (GMimeStream *stream);

### Warning

`g_mime_stream_unref` is deprecated and should not be used in newly-written code.

Unref's a stream.

WARNING: This method is deprecated. Use `g_object_unref()` instead.

`stream` : | stream

### g_mime_stream_read ()

    ssize_t             g_mime_stream_read                  (GMimeStream *stream,
                                                             char *buf,
                                                             size_t len);

Attempts to read up to `len` bytes from `stream` into `buf`.

`stream` : | stream
`buf` : | buffer
`len` : | buffer length
Returns : | the number of bytes read or `-1` on fail.

### g_mime_stream_write ()

    ssize_t             g_mime_stream_write                 (GMimeStream *stream,
                                                             const char *buf,
                                                             size_t len);

Attempts to write up to `len` bytes of `buf` to `stream`.

`stream` : | stream
`buf` : | buffer
`len` : | buffer length
Returns : | the number of bytes written or `-1` on fail.

### g_mime_stream_flush ()

    int                 g_mime_stream_flush                 (GMimeStream *stream);

Sync's the stream to disk.

`stream` : | stream
Returns : | `0` on success or `-1` on fail.

### g_mime_stream_seek ()

    off_t               g_mime_stream_seek                  (GMimeStream *stream,
                                                             off_t offset,
                                                             GMimeSeekWhence whence);

Repositions the offset of the stream `stream` to the argument `offset` according to the directive `whence` as follows:

"" Seek `offset` bytes relative to the beginning (bound_start) of the stream.

"" Seek `offset` bytes relative to the current offset of the stream.

"" Seek `offset` bytes relative to the end of the stream (bound_end if non-negative).

`stream` : | stream
`offset` : | positional offset
`whence` : | seek directive
Returns : | the resultant position on success or `-1` on fail.

### g_mime_stream_tell ()

    off_t               g_mime_stream_tell                  (GMimeStream *stream);

Gets the current offset within the stream.

`stream` : | stream
Returns : | the current position within the stream or `-1` on fail.

### g_mime_stream_reset ()

    int                 g_mime_stream_reset                 (GMimeStream *stream);

Resets the stream.

`stream` : | stream
Returns : | `0` on success or `-1` on fail.

### g_mime_stream_eos ()

    gboolean            g_mime_stream_eos                   (GMimeStream *stream);

Tests the end-of-stream indicator for `stream`.

`stream` : | stream
Returns : | `TRUE` on EOS or `FALSE` otherwise.

### g_mime_stream_close ()

    int                 g_mime_stream_close                 (GMimeStream *stream);

Closes the stream.

`stream` : | stream
Returns : | `0` on success or `-1` on fail.

### g_mime_stream_length ()

    ssize_t             g_mime_stream_length                (GMimeStream *stream);

Gets the length of the stream.

`stream` : | stream
Returns : | the length of the stream or `-1` if unknown.

### g_mime_stream_substream ()

    GMimeStream*        g_mime_stream_substream             (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);

Creates a new substream of `stream` with bounds `start` and `end`.

`stream` : | stream
`start` : | start boundary
`end` : | end boundary
Returns : | a substream of `stream` with bounds `start` and `end`.

### g_mime_stream_set_bounds ()

    void                g_mime_stream_set_bounds            (GMimeStream *stream,
                                                             off_t start,
                                                             off_t end);

Set the bounds on a stream.

`stream` : | stream
`start` : | start boundary
`end` : | end boundary

### g_mime_stream_write_string ()

    ssize_t             g_mime_stream_write_string          (GMimeStream *stream,
                                                             const char *string);

Writes `string` to `stream`.

`stream` : | stream
`string` : | string to write
Returns : | the number of bytes written or `-1` on fail.

### g_mime_stream_printf ()

    ssize_t             g_mime_stream_printf                (GMimeStream *stream,
                                                             const char *fmt,
                                                             ...);

Write formatted output to a stream.

`stream` : | stream
`fmt` : | format
`...` : | arguments
Returns : | the number of bytes written or `-1` on fail.

### g_mime_stream_write_to_stream ()

    ssize_t             g_mime_stream_write_to_stream       (GMimeStream *src,
                                                             GMimeStream *dest);

Attempts to write stream `src` to stream `dest`.

`src` : | source stream
`dest` : | destination stream
Returns : | the number of bytes written or `-1` on fail.

### g_mime_stream_writev ()

    ssize_t             g_mime_stream_writev                (GMimeStream *stream,
                                                             GMimeStreamIOVector *vector,
                                                             size_t count);

Writes at most `count` blocks described by `vector` to `stream`.

`stream` : | stream
`vector` : | i/o vector
`count` : | number of vector elements
Returns : | the number of bytes written or `-1` on fail.