From 22c49cfc3ab148240fcedf61c37aa8f2022d5d56 Mon Sep 17 00:00:00 2001 From: "graham.gower" Date: Wed, 25 Nov 2009 23:23:22 +0000 Subject: [PATCH] Propagate errors upwards. git-svn-id: http://opkg.googlecode.com/svn/trunk@379 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- libopkg/opkg_conf.c | 34 ++++++++++++++++++++++++---------- libopkg/pkg.c | 4 +++- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c index 238754c..f6d6868 100644 --- a/libopkg/opkg_conf.c +++ b/libopkg/opkg_conf.c @@ -318,19 +318,27 @@ int opkg_conf_init(opkg_conf_t *conf, const args_t *args) /* Pigi: added a flag to disable the checking of structures if the command does not need to read anything from there. */ - if ( !(args->nocheckfordirorfile)){ - /* need to run load the source list before dest list -Jamey */ - if ( !(args->noreadfeedsfile)) - set_and_load_pkg_src_list(conf, &conf->pkg_src_list); + if (!(args->nocheckfordirorfile)) { + + if (!(args->noreadfeedsfile)) { + if (set_and_load_pkg_src_list(conf, &conf->pkg_src_list)) { + nv_pair_list_deinit(&tmp_dest_nv_pair_list); + return -1; + } + } /* Now that we have resolved conf->offline_root, we can commit to the directory names for the dests and load in all the package lists. */ - set_and_load_pkg_dest_list(conf, &tmp_dest_nv_pair_list); + if (set_and_load_pkg_dest_list(conf, &tmp_dest_nv_pair_list)) { + nv_pair_list_deinit(&tmp_dest_nv_pair_list); + return -1; + } if (args->dest) { err = opkg_conf_set_default_dest(conf, args->dest); if (err) { + nv_pair_list_deinit(&tmp_dest_nv_pair_list); return OPKG_CONF_ERR_DEFAULT_DEST; } } @@ -423,7 +431,8 @@ static int opkg_conf_set_default_dest(opkg_conf_t *conf, return 1; } -static int set_and_load_pkg_src_list(opkg_conf_t *conf, pkg_src_list_t *pkg_src_list) +static int +set_and_load_pkg_src_list(opkg_conf_t *conf, pkg_src_list_t *pkg_src_list) { pkg_src_list_elt_t *iter; pkg_src_t *src; @@ -440,7 +449,10 @@ static int set_and_load_pkg_src_list(opkg_conf_t *conf, pkg_src_list_t *pkg_src_ src->name); if (file_exists(list_file)) { - pkg_hash_add_from_file(conf, list_file, src, NULL, 0); + if (pkg_hash_add_from_file(conf, list_file, src, NULL, 0)) { + free(list_file); + return -1; + } } free(list_file); } @@ -448,7 +460,8 @@ static int set_and_load_pkg_src_list(opkg_conf_t *conf, pkg_src_list_t *pkg_src_ return 0; } -static int set_and_load_pkg_dest_list(opkg_conf_t *conf, nv_pair_list_t *nv_pair_list) +static int +set_and_load_pkg_dest_list(opkg_conf_t *conf, nv_pair_list_t *nv_pair_list) { nv_pair_list_elt_t *iter; nv_pair_t *nv_pair; @@ -472,8 +485,9 @@ static int set_and_load_pkg_dest_list(opkg_conf_t *conf, nv_pair_list_t *nv_pair conf->default_dest = dest; } if (file_exists(dest->status_file_name)) { - pkg_hash_add_from_file(conf, dest->status_file_name, - NULL, dest, 1); + if (pkg_hash_add_from_file(conf, dest->status_file_name, + NULL, dest, 1)) + return -1; } } diff --git a/libopkg/pkg.c b/libopkg/pkg.c index 093c132..111ac7a 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -314,7 +314,9 @@ pkg_init_from_file(opkg_conf_t *conf, pkg_t *pkg, const char *filename) goto err2; rewind(control_file); - pkg_parse_from_stream(pkg, control_file, PFM_ALL); + + if (pkg_parse_from_stream(pkg, control_file, PFM_ALL)) + err = -1; err2: fclose(control_file); -- 2.25.1