diff options
author | Behdad Esfahbod <behdad@behdad.org> | 2013-09-27 16:00:27 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2013-09-27 16:04:10 -0400 |
commit | 658c2d4643ec7fb0cdd1ebaedc6377c29a850d21 (patch) | |
tree | c06952097c4a88f23713426613a9b15c80bbd9eb /src/vtestream-file.h | |
parent | 6e65d90d50862ca8a9e9686b7b582f22e13e8768 (diff) | |
download | vte-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.h | 17 |
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 |