archive_plugin: use GError in the open() method

This commit is contained in:
Max Kellermann 2009-12-16 16:40:22 +01:00
parent f9af1a445e
commit 71fee09744
7 changed files with 23 additions and 14 deletions

View File

@ -98,7 +98,7 @@ bz2_destroy(struct bz2_archive_file *data)
/* archive open && listing routine */ /* archive open && listing routine */
static struct archive_file * static struct archive_file *
bz2_open(const char *pathname) bz2_open(const char *pathname, GError **error_r)
{ {
struct bz2_archive_file *context; struct bz2_archive_file *context;
int len; int len;
@ -107,8 +107,7 @@ bz2_open(const char *pathname)
archive_file_init(&context->base, &bz2_archive_plugin); archive_file_init(&context->base, &bz2_archive_plugin);
//open archive //open archive
if (!input_stream_open(&context->istream, pathname, NULL)) { if (!input_stream_open(&context->istream, pathname, error_r)) {
g_warning("failed to open an bzip2 archive %s\n",pathname);
g_free(context); g_free(context);
return NULL; return NULL;
} }

View File

@ -90,7 +90,7 @@ listdir_recur(const char *psz_path, struct iso9660_archive_file *context)
} }
static struct archive_file * static struct archive_file *
iso9660_archive_open(const char *pathname) iso9660_archive_open(const char *pathname, GError **error_r)
{ {
struct iso9660_archive_file *context = struct iso9660_archive_file *context =
g_new(struct iso9660_archive_file, 1); g_new(struct iso9660_archive_file, 1);
@ -102,7 +102,8 @@ iso9660_archive_open(const char *pathname)
/* open archive */ /* open archive */
context->iso = iso9660_open (pathname); context->iso = iso9660_open (pathname);
if (context->iso == NULL) { if (context->iso == NULL) {
g_warning("iso %s open failed\n", pathname); g_set_error(error_r, iso9660_quark(), 0,
"Failed to open ISO9660 file %s", pathname);
return NULL; return NULL;
} }

View File

@ -52,7 +52,7 @@ zzip_quark(void)
/* archive open && listing routine */ /* archive open && listing routine */
static struct archive_file * static struct archive_file *
zzip_archive_open(const char *pathname) zzip_archive_open(const char *pathname, GError **error_r)
{ {
struct zzip_archive *context = g_malloc(sizeof(*context)); struct zzip_archive *context = g_malloc(sizeof(*context));
ZZIP_DIRENT dirent; ZZIP_DIRENT dirent;
@ -63,7 +63,8 @@ zzip_archive_open(const char *pathname)
context->list = NULL; context->list = NULL;
context->dir = zzip_dir_open(pathname, NULL); context->dir = zzip_dir_open(pathname, NULL);
if (context->dir == NULL) { if (context->dir == NULL) {
g_warning("zipfile %s open failed\n", pathname); g_set_error(error_r, zzip_quark(), 0,
"Failed to open ZIP file %s", pathname);
return NULL; return NULL;
} }

View File

@ -23,15 +23,17 @@
#include <assert.h> #include <assert.h>
struct archive_file * struct archive_file *
archive_file_open(const struct archive_plugin *plugin, const char *path) archive_file_open(const struct archive_plugin *plugin, const char *path,
GError **error_r)
{ {
struct archive_file *file; struct archive_file *file;
assert(plugin != NULL); assert(plugin != NULL);
assert(plugin->open != NULL); assert(plugin->open != NULL);
assert(path != NULL); assert(path != NULL);
assert(error_r == NULL || *error_r == NULL);
file = plugin->open(path); file = plugin->open(path, error_r);
if (file != NULL) { if (file != NULL) {
assert(file->plugin != NULL); assert(file->plugin != NULL);
@ -39,6 +41,9 @@ archive_file_open(const struct archive_plugin *plugin, const char *path)
assert(file->plugin->scan_reset != NULL); assert(file->plugin->scan_reset != NULL);
assert(file->plugin->scan_next != NULL); assert(file->plugin->scan_next != NULL);
assert(file->plugin->open_stream != NULL); assert(file->plugin->open_stream != NULL);
assert(error_r == NULL || *error_r == NULL);
} else {
assert(error_r == NULL || *error_r != NULL);
} }
return file; return file;

View File

@ -48,7 +48,7 @@ struct archive_plugin {
* returns pointer to handle used is all operations with this archive * returns pointer to handle used is all operations with this archive
* or NULL when opening fails * or NULL when opening fails
*/ */
struct archive_file *(*open)(const char *path_fs); struct archive_file *(*open)(const char *path_fs, GError **error_r);
/** /**
* reset routine will move current read index in archive to default * reset routine will move current read index in archive to default
@ -90,7 +90,8 @@ struct archive_plugin {
}; };
struct archive_file * struct archive_file *
archive_file_open(const struct archive_plugin *plugin, const char *path); archive_file_open(const struct archive_plugin *plugin, const char *path,
GError **error_r);
void void
archive_file_close(struct archive_file *file); archive_file_close(struct archive_file *file);

View File

@ -61,7 +61,7 @@ input_archive_open(struct input_stream *is, const char *pathname,
return false; return false;
} }
file = archive_file_open(arplug, archive); file = archive_file_open(arplug, archive, error_r);
if (file == NULL) if (file == NULL)
return false; return false;

View File

@ -394,6 +394,7 @@ update_archive_file(struct directory *parent, const char *name,
const struct stat *st, const struct stat *st,
const struct archive_plugin *plugin) const struct archive_plugin *plugin)
{ {
GError *error = NULL;
char *path_fs; char *path_fs;
struct archive_file *file; struct archive_file *file;
struct directory *directory; struct directory *directory;
@ -409,10 +410,11 @@ update_archive_file(struct directory *parent, const char *name,
path_fs = map_directory_child_fs(parent, name); path_fs = map_directory_child_fs(parent, name);
/* open archive */ /* open archive */
file = archive_file_open(plugin, path_fs); file = archive_file_open(plugin, path_fs, &error);
if (file == NULL) { if (file == NULL) {
g_warning("unable to open archive %s", path_fs);
g_free(path_fs); g_free(path_fs);
g_warning("%s", error->message);
g_error_free(error);
return; return;
} }