-/* opkg_remove.c - the itsy package management system
+/* opkg_remove.c - the opkg package management system
Carl D. Worth
General Public License for more details.
*/
-#include "opkg.h"
+#include "includes.h"
#include "opkg_message.h"
#include <glob.h>
#include "opkg_remove.h"
+#include "opkg_error.h"
+#include "opkg_cmd.h"
#include "file_util.h"
#include "sprintf_alloc.h"
/* if caller requested the set of installed dependents */
if (pdependents) {
int p = 0;
- abstract_pkg_t **dependents = (abstract_pkg_t **)malloc((n_installed_dependents+1)*sizeof(abstract_pkg_t *));
+ abstract_pkg_t **dependents = (abstract_pkg_t **)calloc((n_installed_dependents+1), sizeof(abstract_pkg_t *));
if ( dependents == NULL ){
fprintf(stderr,"%s Unable to allocate memory. REPORT THIS BUG IN BUGZILLA PLEASE\n", __FUNCTION__);
int i;
int a;
int count;
- pkg_vec_t *dependent_pkgs = pkg_vec_alloc();
+ pkg_vec_t *dependent_pkgs;
abstract_pkg_t * ab_pkg;
if((ab_pkg = pkg->parent) == NULL){
i = 0;
count = 1;
+ dependent_pkgs = pkg_vec_alloc();
+
while (dependents [i] != NULL) {
abstract_pkg_t *dep_ab_pkg = dependents[i];
* 2 - to keep track of pkgs whose deps have been checked alrdy - Karthik */
}
- if (count == 1)
- return 0;
+ if (count == 1) {
+ free(dependent_pkgs);
+ return 0;
+ }
+ int err=0;
for (i = 0; i < dependent_pkgs->len; i++) {
- int err = opkg_remove_pkg(conf, dependent_pkgs->pkgs[i],0);
+ err = opkg_remove_pkg(conf, dependent_pkgs->pkgs[i],0);
if (err)
- return err;
+ break;
}
- return 0;
+ free(dependent_pkgs);
+ return err;
}
static int user_prefers_removing_dependents(opkg_conf_t *conf, abstract_pkg_t *abpkg, pkg_t *pkg, abstract_pkg_t **dependents)
int x = 0;
pkg_t *p;
d_str = pkg->depends_str[i];
- buffer = malloc (strlen (d_str) + 1);
+ buffer = calloc (1, strlen (d_str) + 1);
if (!buffer)
{
fprintf(stderr,"%s Unable to allocate memory.\n", __FUNCTION__);
if (!conf->force_removal_of_dependent_packages
&& !user_prefers_removing_dependents(conf, parent_pkg, pkg, dependents)) {
+ free(dependents);
return OPKG_PKG_HAS_DEPENDENTS;
}
/* remove packages depending on this package - Karthik */
err = opkg_remove_dependent_pkgs (conf, pkg, dependents);
- free(dependents);
- if (err) return err;
+ if (err) {
+ free(dependents);
+ return err;
+ }
}
+ if (dependents)
+ free(dependents);
}
if ( message==0 ){
str_list_init(&installed_dirs);
installed_files = pkg_get_installed_files(pkg);
- for (iter = installed_files->head; iter; iter = iter->next) {
- file_name = iter->data;
+ for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) {
+ file_name = (char *)iter->data;
if (file_is_dir(file_name)) {
- str_list_append(&installed_dirs, strdup(file_name));
+ str_list_append(&installed_dirs, file_name);
continue;
}
if (!conf->noaction) {
do {
removed_a_dir = 0;
- for (iter = installed_dirs.head; iter; iter = iter->next) {
- file_name = iter->data;
+ for (iter = str_list_first(&installed_dirs); iter; iter = str_list_next(&installed_dirs, iter)) {
+ file_name = (char *)iter->data;
if (rmdir(file_name) == 0) {
opkg_message(conf, OPKG_INFO, " deleting %s\n", file_name);
pkg_remove_installed_files_list(conf, pkg);
/* Don't print warning for dirs that are provided by other packages */
- for (iter = installed_dirs.head; iter; iter = iter->next) {
- file_name = iter->data;
+ for (iter = str_list_first(&installed_dirs); iter; iter = str_list_next(&installed_dirs, iter)) {
+ file_name = (char *)iter->data;
owner = file_hash_get_file_owner(conf, file_name);
if (owner) {
}
/* cleanup */
- for (iter = installed_dirs.head; iter; iter = iter->next) {
- free(iter->data);
- iter->data = NULL;
+ while (!void_list_empty(&installed_dirs)) {
+ iter = str_list_pop(&installed_dirs);
+ free(iter->data);
+ free(iter);
}
str_list_deinit(&installed_dirs);