summaryrefslogtreecommitdiff
path: root/src/vtestream-file.h
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2013-09-27 16:00:27 -0400
committerBehdad Esfahbod <behdad@behdad.org>2013-09-27 16:04:10 -0400
commit658c2d4643ec7fb0cdd1ebaedc6377c29a850d21 (patch)
treec06952097c4a88f23713426613a9b15c80bbd9eb /src/vtestream-file.h
parent6e65d90d50862ca8a9e9686b7b582f22e13e8768 (diff)
downloadvte-658c2d4643ec7fb0cdd1ebaedc6377c29a850d21.tar.gz
[stream-file] Keep head value in memory
Reduces syscalls. Part of Bug 637275 - Use pread/pwrite() in vtestream-file.h if available
Diffstat (limited to 'src/vtestream-file.h')
-rw-r--r--src/vtestream-file.h17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/vtestream-file.h b/src/vtestream-file.h
index bc92d6f8..8781e458 100644
--- a/src/vtestream-file.h
+++ b/src/vtestream-file.h
@@ -111,6 +111,7 @@ typedef struct _VteFileStream {
/* The first fd/offset is for the write head, second is for last page */
gint fd[2];
gsize offset[2];
+ gsize head;
} VteFileStream;
typedef VteStreamClass VteFileStreamClass;
@@ -169,10 +170,10 @@ _vte_file_stream_reset (VteStream *astream, gsize offset)
if (stream->fd[0]) _xtruncate (stream->fd[0], 0);
if (stream->fd[1]) _xtruncate (stream->fd[1], 0);
- stream->offset[0] = stream->offset[1] = offset;
+ stream->head = stream->offset[0] = stream->offset[1] = offset;
}
-static gsize
+static void
_vte_file_stream_append (VteStream *astream, const char *data, gsize len)
{
VteFileStream *stream = (VteFileStream *) astream;
@@ -180,10 +181,9 @@ _vte_file_stream_append (VteStream *astream, const char *data, gsize len)
_vte_file_stream_ensure_fd0 (stream);
- ret = lseek (stream->fd[0], 0, SEEK_END);
+ lseek (stream->fd[0], 0, SEEK_END);
_xwrite (stream->fd[0], data, len);
-
- return stream->offset[0] + ret;
+ stream->head += len;
}
static gboolean
@@ -233,6 +233,8 @@ _vte_file_stream_truncate (VteStream *astream, gsize offset)
} else {
_xtruncate (stream->fd[0], offset - stream->offset[0]);
}
+
+ stream->head = offset;
}
static void
@@ -252,10 +254,7 @@ _vte_file_stream_head (VteStream *astream)
{
VteFileStream *stream = (VteFileStream *) astream;
- if (stream->fd[0])
- return stream->offset[0] + lseek (stream->fd[0], 0, SEEK_END);
- else
- return stream->offset[0];
+ return stream->head;
}
static gboolean