Fix some leaks detected by valgrind.

--HG--
extra : convert_revision : 15f7c0f673c4f46e36de82f5e55c7bcd370093e9
This commit is contained in:
Juan RP 2008-12-23 13:05:01 +01:00
parent 26c054d773
commit 0c0e796fc5
4 changed files with 28 additions and 12 deletions

View File

@ -211,6 +211,7 @@ main(int argc, char **argv)
printf("Added repository at %s (%s) with %ju packages.\n", printf("Added repository at %s (%s) with %ju packages.\n",
rinfo->location_local, rinfo->index_version, rinfo->location_local, rinfo->index_version,
rinfo->total_pkgs); rinfo->total_pkgs);
prop_object_release(dict); prop_object_release(dict);
free(rinfo); free(rinfo);
@ -260,6 +261,7 @@ main(int argc, char **argv)
dict = getrepolist_dict(); dict = getrepolist_dict();
if (!xbps_callback_array_iter_in_dict(dict, "repository-list", if (!xbps_callback_array_iter_in_dict(dict, "repository-list",
xbps_show_pkg_info_from_repolist, argv[2])) { xbps_show_pkg_info_from_repolist, argv[2])) {
prop_object_release(dict);
printf("ERROR: unable to locate package '%s'.\n", printf("ERROR: unable to locate package '%s'.\n",
argv[2]); argv[2]);
exit(EINVAL); exit(EINVAL);

View File

@ -149,13 +149,13 @@ bool xbps_show_pkg_namedesc(prop_object_t, void *, bool *);
bool xbps_search_string_in_pkgs(prop_object_t, void *, bool *); bool xbps_search_string_in_pkgs(prop_object_t, void *, bool *);
int xbps_install_binary_pkg(const char *, const char *); int xbps_install_binary_pkg(const char *, const char *);
int xbps_unpack_binary_pkg(const char *, int (*cb)(struct archive *)); int xbps_unpack_binary_pkg(const char *, int (*cb)(struct archive *));
int xbps_cmpver_packages(const char *, const char *);
int xbps_cmpver_versions(const char *, const char *);
int xbps_check_reqdeps_in_pkg(const char *, prop_dictionary_t); int xbps_check_reqdeps_in_pkg(const char *, prop_dictionary_t);
/* Utils */ /* Utils */
bool xbps_append_full_path(char *, const char *, const char *);
int xbps_cmpver_packages(const char *, const char *);
int xbps_cmpver_versions(const char *, const char *);
const char * xbps_get_pkg_version(const char *); const char * xbps_get_pkg_version(const char *);
char * xbps_get_pkg_name(const char *); char * xbps_get_pkg_name(const char *);
bool xbps_append_full_path(char *, const char *, const char *);
#endif /* !_XBPS_PLIST_H_ */ #endif /* !_XBPS_PLIST_H_ */

View File

@ -44,8 +44,10 @@ xbps_add_obj_to_dict(prop_dictionary_t dict, prop_object_t obj,
{ {
assert(dict != NULL || obj != NULL || key != NULL); assert(dict != NULL || obj != NULL || key != NULL);
if (!prop_dictionary_set(dict, key, obj)) if (!prop_dictionary_set(dict, key, obj)) {
prop_object_release(dict);
return false; return false;
}
prop_object_release(obj); prop_object_release(obj);
return true; return true;
@ -264,29 +266,30 @@ xbps_register_repository(const char *uri)
/* Append into the array, the plist file exists. */ /* Append into the array, the plist file exists. */
array = prop_dictionary_get(dict, "repository-list"); array = prop_dictionary_get(dict, "repository-list");
if (array == NULL) if (array == NULL)
return false; goto fail;
assert(prop_object_type(array) == PROP_TYPE_ARRAY); assert(prop_object_type(array) == PROP_TYPE_ARRAY);
/* It seems that this object is already there */ /* It seems that this object is already there */
if (xbps_find_string_in_array(array, uri)) { if (xbps_find_string_in_array(array, uri)) {
errno = EEXIST; errno = EEXIST;
return false; goto fail;
} }
obj = prop_string_create_cstring(uri); obj = prop_string_create_cstring(uri);
if (!xbps_add_obj_to_array(array, obj)) { if (!xbps_add_obj_to_array(array, obj)) {
prop_object_release(obj); prop_object_release(obj);
return false; goto fail;
} }
/* Write dictionary into plist file. */ /* Write dictionary into plist file. */
if (!prop_dictionary_externalize_to_file(dict, plist)) { if (!prop_dictionary_externalize_to_file(dict, plist)) {
prop_object_release(obj); prop_object_release(obj);
return false; goto fail;
} }
prop_object_release(obj); prop_object_release(obj);
prop_object_release(dict);
} }
return true; return true;
@ -317,13 +320,16 @@ xbps_unregister_repository(const char *uri)
return false; return false;
array = prop_dictionary_get(dict, "repository-list"); array = prop_dictionary_get(dict, "repository-list");
if (array == NULL) if (array == NULL) {
prop_object_release(dict);
return false; return false;
}
assert(prop_object_type(array) == PROP_TYPE_ARRAY); assert(prop_object_type(array) == PROP_TYPE_ARRAY);
cb = malloc(sizeof(*cb)); cb = malloc(sizeof(*cb));
if (cb == NULL) { if (cb == NULL) {
prop_object_release(dict);
errno = ENOMEM; errno = ENOMEM;
return false; return false;
} }
@ -340,6 +346,7 @@ xbps_unregister_repository(const char *uri)
/* Update plist file. */ /* Update plist file. */
if (prop_dictionary_externalize_to_file(dict, plist)) { if (prop_dictionary_externalize_to_file(dict, plist)) {
free(cb); free(cb);
prop_object_release(dict);
return true; return true;
} }
} else { } else {
@ -347,6 +354,7 @@ xbps_unregister_repository(const char *uri)
errno = ENODEV; errno = ENODEV;
} }
prop_object_release(dict);
free(cb); free(cb);
return false; return false;
} }
@ -476,6 +484,7 @@ xbps_search_string_in_pkgs(prop_object_t obj, void *arg, bool *loop_done)
printf("From %s repository ...\n", repofile); printf("From %s repository ...\n", repofile);
xbps_callback_array_iter_in_dict(dict, "packages", xbps_callback_array_iter_in_dict(dict, "packages",
xbps_show_pkg_namedesc, arg); xbps_show_pkg_namedesc, arg);
prop_object_release(dict);
return true; return true;
} }
@ -502,8 +511,10 @@ xbps_show_pkg_info_from_repolist(prop_object_t obj, void *arg, bool *loop_done)
return false; return false;
pkgdict = xbps_find_pkg_in_dict(dict, arg); pkgdict = xbps_find_pkg_in_dict(dict, arg);
if (pkgdict == NULL) if (pkgdict == NULL) {
prop_object_release(dict);
return false; return false;
}
oloc = prop_dictionary_get(dict, "location-remote"); oloc = prop_dictionary_get(dict, "location-remote");
if (oloc == NULL) if (oloc == NULL)
@ -511,12 +522,15 @@ xbps_show_pkg_info_from_repolist(prop_object_t obj, void *arg, bool *loop_done)
if (oloc && prop_object_type(oloc) == PROP_TYPE_STRING) if (oloc && prop_object_type(oloc) == PROP_TYPE_STRING)
repoloc = prop_string_cstring_nocopy(oloc); repoloc = prop_string_cstring_nocopy(oloc);
else else {
prop_object_release(dict);
return false; return false;
}
printf("Repository: %s\n", repoloc); printf("Repository: %s\n", repoloc);
xbps_show_pkg_info(pkgdict); xbps_show_pkg_info(pkgdict);
*loop_done = true; *loop_done = true;
prop_object_release(dict);
return true; return true;
} }

View File

@ -6,4 +6,4 @@ LIBDIR ?= $(PREFIX)/lib
CPPFLAGS += -I../include CPPFLAGS += -I../include
CFLAGS += -Wstack-protector -fstack-protector-all CFLAGS += -Wstack-protector -fstack-protector-all
CFLAGS += -O2 -Wall -Werror -fPIC -DPIC CFLAGS += -ggdb -O2 -Wall -Werror -fPIC -DPIC