[gvfs] archive: Use archive_errno() the correct way
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs] archive: Use archive_errno() the correct way
- Date: Fri, 26 Feb 2010 15:33:18 +0000 (UTC)
commit 483db9169ab96b0599a94b3f5887fb320b84175d
Author: Benjamin Otte <otte redhat com>
Date: Thu Feb 25 12:09:36 2010 +0100
archive: Use archive_errno() the correct way
Previous code was assuming that archive_errno() would report the last
error that happened or SUCCESS if none. This is not true, however as the
return value of archive_errno() is undefined if no error happened.
This patch changes it to only call archive_errno() after errors.
https://bugzilla.gnome.org/show_bug.cgi?id=611057
daemon/gvfsbackendarchive.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
---
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c
index 43fe999..2454744 100644
--- a/daemon/gvfsbackendarchive.c
+++ b/daemon/gvfsbackendarchive.c
@@ -160,6 +160,18 @@ gvfs_archive_close (struct archive *archive,
#define gvfs_archive_in_error(archive) ((archive)->error != NULL)
+static void
+gvfs_archive_set_error_from_errno (GVfsArchive *archive)
+{
+ if (gvfs_archive_in_error (archive))
+ return;
+
+ g_vfs_job_failed_literal (archive->job,
+ G_IO_ERROR,
+ g_io_error_from_errno (archive_errno (archive->archive)),
+ archive_error_string (archive->archive));
+}
+
static void
gvfs_archive_push_job (GVfsArchive *archive, GVfsJob *job)
{
@@ -178,13 +190,6 @@ gvfs_archive_pop_job (GVfsArchive *archive)
g_vfs_job_failed_from_error (archive->job, archive->error);
g_clear_error (&archive->error);
}
- else if (archive_errno (archive->archive))
- {
- g_vfs_job_failed_literal (archive->job,
- G_IO_ERROR,
- archive_errno (archive->archive),
- archive_error_string (archive->archive));
- }
else
g_vfs_job_succeeded (archive->job);
@@ -479,6 +484,8 @@ create_file_tree (GVfsBackendArchive *ba, GVfsJob *job)
}
while (result != ARCHIVE_FATAL && result != ARCHIVE_EOF);
+ if (result == ARCHIVE_FATAL)
+ gvfs_archive_set_error_from_errno (archive);
fixup_dirs (ba->files);
gvfs_archive_finish (archive);
@@ -688,6 +695,8 @@ do_read (GVfsBackend *backend,
bytes_read = archive_read_data (archive->archive, buffer, bytes_requested);
if (bytes_read >= 0)
g_vfs_job_read_set_size (job, bytes_read);
+ else
+ gvfs_archive_set_error_from_errno (archive);
gvfs_archive_pop_job (archive);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]