summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@src.gnome.org>2001-09-18 06:46:30 +0000
committerJeffrey Stedfast <fejj@src.gnome.org>2001-09-18 06:46:30 +0000
commit1cfab9c2b7ba4949890acf7cdc7e901b75c08a22 (patch)
treea5490a5ff7cd3afac48057457ada676ce18883f3
parent8f7a758c343939dbbc168ce071a1b09fefe19d4c (diff)
downloadgmime-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.c8
-rw-r--r--gmime-stream-fs.c20
-rw-r--r--gmime-stream-fs.h1
-rw-r--r--gmime/gmime-stream-file.c8
-rw-r--r--gmime/gmime-stream-fs.c20
-rw-r--r--gmime/gmime-stream-fs.h1
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;