[libgsf] OLE seek: refactor.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgsf] OLE seek: refactor.
- Date: Fri, 21 Dec 2012 00:22:13 +0000 (UTC)
commit 727473fe1b0afc335ce25b2e36a2c107f5cd7266
Author: Morten Welinder <terra gnome org>
Date: Thu Dec 20 19:21:37 2012 -0500
OLE seek: refactor.
https://bugzilla.gnome.org/show_bug.cgi?id=690524
ChangeLog | 5 +++++
gsf/gsf-infile-msole.c | 27 +++++++++++++++++----------
2 files changed, 22 insertions(+), 10 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1a15aba..76048af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-12-20 =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre lureau gmail com>
+
+ * gsf/gsf-infile-msole.c (ole_seek_block): Factor out from
+ gsf_infile_msole_read.
+
2012-12-05 Morten Welinder <terra gnome org>
* gsf/gsf-infile-msole.c (gsf_infile_msole_child_by_index)
diff --git a/gsf/gsf-infile-msole.c b/gsf/gsf-infile-msole.c
index e445d38..b00fe6a 100644
--- a/gsf/gsf-infile-msole.c
+++ b/gsf/gsf-infile-msole.c
@@ -104,6 +104,21 @@ static GsfInput *gsf_infile_msole_new_child (GsfInfileMSOle *parent,
MSOleDirent *dirent, GError **err);
static void ole_info_unref (MSOleInfo *info);
+static gboolean
+ole_seek_block (GsfInfileMSOle const *ole, guint32 block, gsf_off_t offset)
+{
+ g_return_val_if_fail (block < ole->info->max_block, FALSE);
+
+ /* OLE_HEADER_SIZE is fixed at 512, but the sector containing the
+ * header is padded out to bb.size (sector size) when bb.size > 512. */
+ if (gsf_input_seek (ole->input,
+ (gsf_off_t)(MAX (OLE_HEADER_SIZE, ole->info->bb.size) + (block << ole->info->bb.shift)) + offset,
+ G_SEEK_SET) < 0)
+ return FALSE;
+
+ return TRUE;
+}
+
/**
* ole_get_block :
* @ole: the infile
@@ -119,13 +134,7 @@ static void ole_info_unref (MSOleInfo *info);
static guint8 const *
ole_get_block (GsfInfileMSOle const *ole, guint32 block, guint8 *buffer)
{
- g_return_val_if_fail (block < ole->info->max_block, NULL);
-
- /* OLE_HEADER_SIZE is fixed at 512, but the sector containing the
- * header is padded out to bb.size (sector size) when bb.size > 512. */
- if (gsf_input_seek (ole->input,
- (gsf_off_t)(MAX (OLE_HEADER_SIZE, ole->info->bb.size) + (block << ole->info->bb.shift)),
- G_SEEK_SET) < 0)
+ if (!ole_seek_block (ole, block, 0))
return NULL;
return gsf_input_read (ole->input, ole->info->bb.size, buffer);
@@ -677,9 +686,7 @@ gsf_infile_msole_read (GsfInput *input, size_t num_bytes, guint8 *buffer)
if (i > last_block) {
/* optimization don't seek if we don't need to */
if (ole->cur_block != first_block) {
- if (gsf_input_seek (ole->input,
- (gsf_off_t)(MAX (OLE_HEADER_SIZE, ole->info->bb.size) + (ole->bat.block [first_block] << ole->info->bb.shift) + offset),
- G_SEEK_SET) < 0)
+ if (!ole_seek_block (ole, ole->bat.block [first_block], offset))
return NULL;
}
ole->cur_block = last_block;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]