diff options
author | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-09-18 06:46:30 +0000 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-09-18 06:46:30 +0000 |
commit | 1cfab9c2b7ba4949890acf7cdc7e901b75c08a22 (patch) | |
tree | a5490a5ff7cd3afac48057457ada676ce18883f3 | |
parent | 8f7a758c343939dbbc168ce071a1b09fefe19d4c (diff) | |
download | gmime-1cfab9c2b7ba4949890acf7cdc7e901b75c08a22.tar.gz |
minor fixes...forgot to increment the position when reading data.
also no equiv for feof() for fd's
-rw-r--r-- | gmime-stream-file.c | 8 | ||||
-rw-r--r-- | gmime-stream-fs.c | 20 | ||||
-rw-r--r-- | gmime-stream-fs.h | 1 | ||||
-rw-r--r-- | gmime/gmime-stream-file.c | 8 | ||||
-rw-r--r-- | gmime/gmime-stream-fs.c | 20 | ||||
-rw-r--r-- | gmime/gmime-stream-fs.h | 1 |
6 files changed, 48 insertions, 10 deletions
diff --git a/gmime-stream-file.c b/gmime-stream-file.c index c0b46861..48141eaa 100644 --- a/gmime-stream-file.c +++ b/gmime-stream-file.c @@ -62,6 +62,7 @@ static ssize_t stream_read (GMimeStream *stream, char *buf, size_t len) { GMimeStreamFile *fstream = (GMimeStreamFile *) stream; + ssize_t nread; if (stream->bound_end == -1 && stream->position > stream->bound_end) return -1; @@ -72,7 +73,12 @@ stream_read (GMimeStream *stream, char *buf, size_t len) /* make sure we are at the right position */ fseek (fstream->fp, stream->position, SEEK_SET); - return fread (buf, 1, len, fstream->fp); + nread = fread (buf, 1, len, fstream->fp); + + if (nread > 0) + stream->position += nread; + + return nread; } static ssize_t diff --git a/gmime-stream-fs.c b/gmime-stream-fs.c index ca6e7c24..d344ea48 100644 --- a/gmime-stream-fs.c +++ b/gmime-stream-fs.c @@ -79,9 +79,14 @@ stream_read (GMimeStream *stream, char *buf, size_t len) lseek (fstream->fd, stream->position, SEEK_SET); do { - nread = read (stream_fs->fd, buf, len); + nread = read (fstream->fd, buf, len); } while (nread == -1 && errno == EINTR); + if (nread > 0) + stream->position += nread; + else if (nread == 0) + fstream->eos = TRUE; + return nread; } @@ -138,17 +143,22 @@ stream_eos (GMimeStream *stream) g_return_val_if_fail (fstream->fd != -1, TRUE); - return feof (fstream->fd) ? TRUE : FALSE; + return fstream->eos; } static int stream_reset (GMimeStream *stream) { GMimeStreamFs *fstream = (GMimeStreamFs *) stream; + off_t ret; g_return_val_if_fail (fstream->fd != -1, -1); - return lseek (fstream->fd, stream->bound_start, SEEK_SET); + ret = lseek (fstream->fd, stream->bound_start, SEEK_SET); + if (ret != -1) + fstream->eos = FALSE; + + return ret; } static off_t @@ -237,7 +247,8 @@ g_mime_stream_fs_new (int fd) fstream = g_new (GMimeStreamFs, 1); fstream->owner = TRUE; - fstream->fd = fp; + fstream->eos = FALSE; + fstream->fd = fd; start = lseek (fd, 0, SEEK_CUR); @@ -262,6 +273,7 @@ g_mime_stream_fs_new_with_bounds (int fd, off_t start, off_t end) fstream = g_new (GMimeStreamFs, 1); fstream->owner = TRUE; + fstream->eos = FALSE; fstream->fd = fd; g_mime_stream_construct (GMIME_STREAM (fstream), &template, GMIME_STREAM_FS_TYPE, start, end); diff --git a/gmime-stream-fs.h b/gmime-stream-fs.h index 54a4cd39..1184c5ee 100644 --- a/gmime-stream-fs.h +++ b/gmime-stream-fs.h @@ -38,6 +38,7 @@ typedef struct _GMimeStreamFs { GMimeStream parent; gboolean owner; + gboolean eos; int fd; } GMimeStreamFs; diff --git a/gmime/gmime-stream-file.c b/gmime/gmime-stream-file.c index c0b46861..48141eaa 100644 --- a/gmime/gmime-stream-file.c +++ b/gmime/gmime-stream-file.c @@ -62,6 +62,7 @@ static ssize_t stream_read (GMimeStream *stream, char *buf, size_t len) { GMimeStreamFile *fstream = (GMimeStreamFile *) stream; + ssize_t nread; if (stream->bound_end == -1 && stream->position > stream->bound_end) return -1; @@ -72,7 +73,12 @@ stream_read (GMimeStream *stream, char *buf, size_t len) /* make sure we are at the right position */ fseek (fstream->fp, stream->position, SEEK_SET); - return fread (buf, 1, len, fstream->fp); + nread = fread (buf, 1, len, fstream->fp); + + if (nread > 0) + stream->position += nread; + + return nread; } static ssize_t diff --git a/gmime/gmime-stream-fs.c b/gmime/gmime-stream-fs.c index ca6e7c24..d344ea48 100644 --- a/gmime/gmime-stream-fs.c +++ b/gmime/gmime-stream-fs.c @@ -79,9 +79,14 @@ stream_read (GMimeStream *stream, char *buf, size_t len) lseek (fstream->fd, stream->position, SEEK_SET); do { - nread = read (stream_fs->fd, buf, len); + nread = read (fstream->fd, buf, len); } while (nread == -1 && errno == EINTR); + if (nread > 0) + stream->position += nread; + else if (nread == 0) + fstream->eos = TRUE; + return nread; } @@ -138,17 +143,22 @@ stream_eos (GMimeStream *stream) g_return_val_if_fail (fstream->fd != -1, TRUE); - return feof (fstream->fd) ? TRUE : FALSE; + return fstream->eos; } static int stream_reset (GMimeStream *stream) { GMimeStreamFs *fstream = (GMimeStreamFs *) stream; + off_t ret; g_return_val_if_fail (fstream->fd != -1, -1); - return lseek (fstream->fd, stream->bound_start, SEEK_SET); + ret = lseek (fstream->fd, stream->bound_start, SEEK_SET); + if (ret != -1) + fstream->eos = FALSE; + + return ret; } static off_t @@ -237,7 +247,8 @@ g_mime_stream_fs_new (int fd) fstream = g_new (GMimeStreamFs, 1); fstream->owner = TRUE; - fstream->fd = fp; + fstream->eos = FALSE; + fstream->fd = fd; start = lseek (fd, 0, SEEK_CUR); @@ -262,6 +273,7 @@ g_mime_stream_fs_new_with_bounds (int fd, off_t start, off_t end) fstream = g_new (GMimeStreamFs, 1); fstream->owner = TRUE; + fstream->eos = FALSE; fstream->fd = fd; g_mime_stream_construct (GMIME_STREAM (fstream), &template, GMIME_STREAM_FS_TYPE, start, end); diff --git a/gmime/gmime-stream-fs.h b/gmime/gmime-stream-fs.h index 54a4cd39..1184c5ee 100644 --- a/gmime/gmime-stream-fs.h +++ b/gmime/gmime-stream-fs.h @@ -38,6 +38,7 @@ typedef struct _GMimeStreamFs { GMimeStream parent; gboolean owner; + gboolean eos; int fd; } GMimeStreamFs; |