brasero r1798 - in trunk: . src/plugins/checksum
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r1798 - in trunk: . src/plugins/checksum
- Date: Wed, 21 Jan 2009 08:36:04 +0000 (UTC)
Author: philippr
Date: Wed Jan 21 08:36:04 2009
New Revision: 1798
URL: http://svn.gnome.org/viewvc/brasero?rev=1798&view=rev
Log:
2009-01-21 Philippe Rouquier <ykw localhost localdomain>
Improvements and code fixing (offset did not get updated properly)
* src/plugins/checksum/burn-volume-read.c
(brasero_volume_file_fill_buffer),
(brasero_volume_file_next_extent),
(brasero_volume_file_rewind_real),
(brasero_volume_file_check_state):
Modified:
trunk/ChangeLog
trunk/src/plugins/checksum/burn-volume-read.c
Modified: trunk/src/plugins/checksum/burn-volume-read.c
==============================================================================
--- trunk/src/plugins/checksum/burn-volume-read.c (original)
+++ trunk/src/plugins/checksum/burn-volume-read.c Wed Jan 21 08:36:04 2009
@@ -30,7 +30,7 @@
#include "burn-volume-read.h"
struct _BraseroVolFileHandle {
- guchar buffer [2048];
+ guchar buffer [2048 * 4];
guint buffer_max;
/* position in buffer */
@@ -58,12 +58,38 @@
}
static gboolean
-brasero_volume_file_rewind_real (BraseroVolFileHandle *handle)
+brasero_volume_file_fill_buffer (BraseroVolFileHandle *handle)
{
- GSList *node;
- gint res_seek;
+ guint blocks;
gboolean result;
+
+ blocks = MIN (sizeof (handle->buffer) / 2048,
+ handle->extent_last - handle->position);
+
+ result = BRASERO_VOL_SRC_READ (handle->src,
+ (char *) handle->buffer,
+ blocks,
+ NULL);
+ if (!result)
+ return FALSE;
+
+ handle->offset = 0;
+ handle->position += blocks;
+
+ if (handle->position == handle->extent_last)
+ handle->buffer_max = (blocks - 1) * 2048 + handle->extent_size % 2048;
+ else
+ handle->buffer_max = sizeof (handle->buffer);
+
+ return TRUE;
+}
+
+static gboolean
+brasero_volume_file_next_extent (BraseroVolFileHandle *handle)
+{
BraseroVolFileExtent *extent;
+ gint res_seek;
+ GSList *node;
node = handle->extents_forward;
extent = node->data;
@@ -76,24 +102,20 @@
handle->extent_size = extent->size;
handle->extent_last = BRASERO_BYTES_TO_SECTORS (extent->size, 2048) + extent->block;
- /* start loading first block */
res_seek = BRASERO_VOL_SRC_SEEK (handle->src, handle->position, SEEK_SET, NULL);
if (res_seek == -1)
return FALSE;
- result = BRASERO_VOL_SRC_READ (handle->src, (gchar *) handle->buffer, 1, NULL);
- if (!result)
- return FALSE;
-
- handle->offset = 0;
- handle->position ++;
+ return TRUE;
+}
- if (handle->position == handle->extent_last)
- handle->buffer_max = handle->extent_size % 2048;
- else
- handle->buffer_max = sizeof (handle->buffer);
+static gboolean
+brasero_volume_file_rewind_real (BraseroVolFileHandle *handle)
+{
+ if (!brasero_volume_file_next_extent (handle))
+ return FALSE;
- return TRUE;
+ return brasero_volume_file_fill_buffer (handle);
}
BraseroVolFileHandle *
@@ -137,52 +159,26 @@
BraseroBurnResult
brasero_volume_file_check_state (BraseroVolFileHandle *handle)
{
- gboolean result;
-
/* check if we need to load a new block */
if (handle->offset < handle->buffer_max)
return BRASERO_BURN_RETRY;
/* check if we need to change our extent */
if (handle->position >= handle->extent_last) {
- BraseroVolFileExtent *extent;
- gint res_seek;
- GSList *node;
-
/* we are at the end of current extent try to find another */
if (!handle->extents_forward) {
/* we reached the end of our file */
return BRASERO_BURN_OK;
}
- node = handle->extents_forward;
- extent = node->data;
-
- handle->extents_forward = g_slist_remove_link (handle->extents_forward, node);
- node->next = handle->extents_backward;
- handle->extents_backward = node;
-
- handle->position = extent->block;
- handle->extent_size = extent->size;
- handle->extent_last = BRASERO_BYTES_TO_SECTORS (extent->size, 2048) + extent->block;
-
- res_seek = BRASERO_VOL_SRC_SEEK (handle->src, handle->position, SEEK_SET, NULL);
- if (res_seek == -1)
+ if (!brasero_volume_file_next_extent (handle))
return BRASERO_BURN_ERR;
}
- result = BRASERO_VOL_SRC_READ (handle->src, (char *) handle->buffer, 1, NULL);
- if (!result)
+ /* Refill buffer */
+ if (!brasero_volume_file_fill_buffer (handle))
return BRASERO_BURN_ERR;
- handle->offset = 0;
- handle->position ++;
-
- if (handle->position == handle->extent_last)
- handle->buffer_max = handle->extent_size % 2048;
- else
- handle->buffer_max = sizeof (handle->buffer);
-
return BRASERO_BURN_RETRY;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]