From f81d8ac1f072b0e564d203c1d279e191c7a126f3 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 11 Nov 2012 10:03:14 +0100 Subject: [PATCH] xbps_pkgdb_update: if pkgdb cannot be internalized, create it to simplify code. --- lib/package_state.c | 48 ++++++++++----------------------------------- lib/pkgdb.c | 7 +++++-- 2 files changed, 15 insertions(+), 40 deletions(-) diff --git a/lib/package_state.c b/lib/package_state.c index 67f6dece..427958b6 100644 --- a/lib/package_state.c +++ b/lib/package_state.c @@ -162,63 +162,35 @@ xbps_set_pkg_state_installed(struct xbps_handle *xhp, pkg_state_t state) { prop_dictionary_t pkgd; - bool newpkg = false; - int rv; + int rv = 0; assert(pkgname != NULL); - if (xhp->pkgdb == NULL) { - xhp->pkgdb = prop_array_create(); - if (xhp->pkgdb == NULL) + pkgd = xbps_pkgdb_get_pkgd(xhp, pkgname, false); + if (pkgd == NULL) { + pkgd = prop_dictionary_create(); + if (pkgd == NULL) return ENOMEM; - pkgd = prop_dictionary_create(); - if (pkgd == NULL) { - prop_object_release(xhp->pkgdb); - xhp->pkgdb = NULL; - return ENOMEM; - } if ((rv = set_pkg_objs(pkgd, pkgname, version)) != 0) { - prop_object_release(xhp->pkgdb); prop_object_release(pkgd); - xhp->pkgdb = NULL; return rv; } if ((rv = set_new_state(pkgd, state)) != 0) { - prop_object_release(xhp->pkgdb); prop_object_release(pkgd); - xhp->pkgdb = NULL; return rv; } if (!xbps_add_obj_to_array(xhp->pkgdb, pkgd)) { - prop_object_release(xhp->pkgdb); prop_object_release(pkgd); - xhp->pkgdb = NULL; return EINVAL; } } else { - pkgd = xbps_pkgdb_get_pkgd(xhp, pkgname, false); - if (pkgd == NULL) { - newpkg = true; - pkgd = prop_dictionary_create(); - if ((rv = set_pkg_objs(pkgd, pkgname, version)) != 0) - return rv; - } - if ((rv = set_new_state(pkgd, state)) != 0) { - if (newpkg) - prop_object_release(pkgd); + if ((rv = set_new_state(pkgd, state)) != 0) + return rv; + + if ((rv = xbps_array_replace_dict_by_name(xhp->pkgdb, + pkgd, pkgname)) != 0) return rv; - } - if (newpkg) { - if (!xbps_add_obj_to_array(xhp->pkgdb, pkgd)) { - prop_object_release(pkgd); - return EINVAL; - } - } else { - if ((rv = xbps_array_replace_dict_by_name(xhp->pkgdb, - pkgd, pkgname)) != 0) - return rv; - } } return rv; diff --git a/lib/pkgdb.c b/lib/pkgdb.c index ddb17495..75de7685 100644 --- a/lib/pkgdb.c +++ b/lib/pkgdb.c @@ -106,9 +106,12 @@ xbps_pkgdb_update(struct xbps_handle *xhp, bool flush) cached_rv = 0; } /* update copy in memory */ - if ((xhp->pkgdb = prop_array_internalize_from_zfile(plist)) == NULL) - cached_rv = rv = errno; + if ((xhp->pkgdb = prop_array_internalize_from_zfile(plist)) == NULL) { + if (errno == ENOENT) + xhp->pkgdb = prop_array_create(); + cached_rv = rv = errno; + } free(plist); return rv;