aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-stream-fs.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-12-05 19:50:32 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-12-05 19:50:32 +0800
commita8d65409decc86cf8d9f9ebadea28be551b3a4d2 (patch)
tree757a46fc3ee25686150e2bcdeb2a6954574d0ba3 /camel/camel-stream-fs.c
parent90feaa4ad02462c8e91d27070e7d8ae178771a06 (diff)
downloadgsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar.gz
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar.bz2
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar.lz
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar.xz
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.tar.zst
gsoc2013-evolution-a8d65409decc86cf8d9f9ebadea28be551b3a4d2.zip
stream_flush does make sense for a substream afterall (if you have a
2000-12-05 Not Zed <NotZed@HelixCode.com> * camel-seekable-substream.c (stream_flush): stream_flush does make sense for a substream afterall (if you have a stream_write). (stream_write): Implement this. (stream_seek): Change the STREAM_END behaviour to be more sane. if bounded go from the end of the bound, if unbounded, go from the end of the parent stream. * camel-stream-mem.c (stream_read): Dont return error if reading past the end of data, just return 0. * camel-stream-fs.c (camel_stream_fs_init): Initialise the stream to be unbound. (stream_seek): Fix the logic when seeking from the end of an unbounded stream. (camel_stream_fs_new_with_fd): If the fd is invalid (-1), then return NULL immediately. (stream_seek): Range check a SEEK_END so it fits within bound_start. 2000-12-01 Not Zed <NotZed@HelixCode.com> * tests/lib/folders.c (test_folder_basic): New test to perform basic store operations on folders (taken from folders/test1). (test_folder_message_ops): Tkane the guts out of folders/test2. svn path=/trunk/; revision=6790
Diffstat (limited to 'camel/camel-stream-fs.c')
-rw-r--r--camel/camel-stream-fs.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/camel/camel-stream-fs.c b/camel/camel-stream-fs.c
index 17c6b98e08..59082ec531 100644
--- a/camel/camel-stream-fs.c
+++ b/camel/camel-stream-fs.c
@@ -69,6 +69,7 @@ camel_stream_fs_init (gpointer object, gpointer klass)
CamelStreamFs *stream = CAMEL_STREAM_FS (object);
stream->fd = -1;
+ ((CamelSeekableStream *)stream)->bound_end = CAMEL_STREAM_UNBOUND;
}
static void
@@ -114,6 +115,9 @@ camel_stream_fs_new_with_fd (int fd)
CamelStreamFs *stream_fs;
off_t offset;
+ if (fd == -1)
+ return NULL;
+
stream_fs = CAMEL_STREAM_FS (camel_object_new (camel_stream_fs_get_type ()));
stream_fs->fd = fd;
offset = lseek (fd, 0, SEEK_CUR);
@@ -271,10 +275,13 @@ stream_seek (CamelSeekableStream *stream, off_t offset, CamelStreamSeekPolicy po
real = stream->position + offset;
break;
case CAMEL_STREAM_END:
- if (stream->bound_end != CAMEL_STREAM_UNBOUND) {
+ if (stream->bound_end == CAMEL_STREAM_UNBOUND) {
real = lseek(stream_fs->fd, offset, SEEK_END);
- if (real != -1)
+ if (real != -1) {
+ if (real<stream->bound_start)
+ real = stream->bound_start;
stream->position = real;
+ }
return real;
}
real = stream->bound_end + offset;