#include <libetpan/libetpan.h> struct mailstream_low_driver { ssize_t (* mailstream_read)(mailstream_low *, void *, size_t); ssize_t (* mailstream_write)(mailstream_low *, void *, size_t); int (* mailstream_close)(mailstream_low *); int (* mailstream_get_fd)(mailstream_low *); void (* mailstream_free)(mailstream_low *); }; typedef struct mailstream_low_driver mailstream_low_driver; struct _mailstream_low { void * data; mailstream_low_driver * driver; };
mailstream_low is a non-buffered stream.
The mailstream_low_driver is a set of functions used to access the stream.
mailstream_read/write/close() is the same interface as read/write/close() system calls, except that the file descriptor is replaced with the mailstream_low structure.
mailstream_get_fd() returns the file descriptor used for this non-buffered stream.
mailstream_free() is in charge to free the internal structure of the mailstream_low and the mailstream_low itself.
mailstream_low * mailstream_low_new(void * data, mailstream_low_driver * driver);
mailstream_low_new() creates a low-level mailstream with the given internal structure (data) and using the given set of functions (driver).
ssize_t mailstream_low_write(mailstream_low * s, void * buf, size_t count); ssize_t mailstream_low_read(mailstream_low * s, void * buf, size_t count); int mailstream_low_close(mailstream_low * s); int mailstream_low_get_fd(mailstream_low * s); void mailstream_low_free(mailstream_low * s);
Each of these calls will call the corresponding function defined in the driver.