summaryrefslogtreecommitdiff
path: root/mailbox
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2003-02-13 16:31:09 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2003-02-13 16:31:09 +0000
commit5ccdea07bf2b7f97d015b8010774c567a22edfc7 (patch)
tree9c1c4b325709bbe573e88990d45c4f76a288fa53 /mailbox
parent100ab145052321cf5807783921cdc603581910fc (diff)
downloadmailutils-5ccdea07bf2b7f97d015b8010774c567a22edfc7.tar.gz
mailutils-5ccdea07bf2b7f97d015b8010774c567a22edfc7.tar.bz2
(stream_seek): New function.
Diffstat (limited to 'mailbox')
-rw-r--r--mailbox/stream.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/mailbox/stream.c b/mailbox/stream.c
index 5ca33e108..166ae924e 100644
--- a/mailbox/stream.c
+++ b/mailbox/stream.c
@@ -110,6 +110,9 @@ stream_close (stream_t stream)
{
if (stream == NULL)
return EINVAL;
+ if (stream->state == MU_STREAM_STATE_CLOSE)
+ return 0;
+
stream->state = MU_STREAM_STATE_CLOSE;
/* Clear the buffer of any residue left. */
if (stream->rbuffer.base)
@@ -704,6 +707,41 @@ stream_sequential_write (stream_t stream, char *buf, size_t size)
}
int
+stream_seek (stream_t stream, off_t off, int whence)
+{
+ size_t size = 0;
+ size_t pos;
+ int rc;
+
+ if ((rc = stream_size (stream, &size)))
+ return rc;
+
+ switch (whence)
+ {
+ case SEEK_SET:
+ pos = off;
+ break;
+
+ case SEEK_CUR:
+ pos = off + stream->offset;
+ break;
+
+ case SEEK_END:
+ pos = size + off;
+ break;
+
+ default:
+ return EINVAL;
+ }
+
+ if (pos > size)
+ return EIO;
+
+ stream->offset = pos;
+ return 0;
+}
+
+int
stream_strerror (stream_t stream, char **p)
{
if (stream == NULL)

Return to:

Send suggestions and report system problems to the System administrator.