- str_list_t installed_dirs;
- str_list_t *installed_files;
- str_list_elt_t *iter;
- char *file_name;
- conffile_t *conffile;
- int removed_a_dir;
- pkg_t *owner;
- int rootdirlen = 0;
-
- installed_files = pkg_get_installed_files(pkg);
- if (installed_files == NULL) {
- opkg_msg(ERROR, "Failed to determine installed "
- "files for %s. None removed.\n", pkg->name);
- return;
- }
-
- str_list_init(&installed_dirs);
-
- /* don't include trailing slash */
- if (conf->offline_root)
- rootdirlen = strlen(conf->offline_root);
-
- for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) {
- file_name = (char *)iter->data;
-
- owner = file_hash_get_file_owner(file_name);
- if (owner != pkg)
- /* File may have been claimed by another package. */
- continue;
-
- if (file_is_dir(file_name)) {
- str_list_append(&installed_dirs, file_name);
- continue;
- }
-
- conffile = pkg_get_conffile(pkg, file_name+rootdirlen);
- if (conffile) {
- if (conffile_has_been_modified(conffile)) {
- opkg_msg(NOTICE, "Not deleting modified conffile %s.\n",
- file_name);
- continue;
- }
- }
-
- if (!conf->noaction) {
- opkg_msg(INFO, "Deleting %s.\n", file_name);
- unlink(file_name);
- } else
- opkg_msg(INFO, "Not deleting %s. (noaction)\n",
- file_name);
-
- file_hash_remove(file_name);
- }
-
- /* Remove empty directories */
- if (!conf->noaction) {
- do {
- removed_a_dir = 0;
- 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_msg(INFO, "Deleting %s.\n", file_name);
- removed_a_dir = 1;
- str_list_remove(&installed_dirs, &iter);
- }
- }
- } while (removed_a_dir);
- }
-
- pkg_free_installed_files(pkg);
- pkg_remove_installed_files_list(pkg);
-
- /* Don't print warning for dirs that are provided by other packages */
- 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(file_name);
- if (owner) {
- free(iter->data);
- iter->data = NULL;
- str_list_remove(&installed_dirs, &iter);
- }
- }
-
- /* cleanup */
- while (!void_list_empty(&installed_dirs)) {
- iter = str_list_pop(&installed_dirs);
- free(iter->data);
- free(iter);
- }
- str_list_deinit(&installed_dirs);
+ str_list_t installed_dirs;
+ str_list_t *installed_files;
+ str_list_elt_t *iter;
+ char *file_name;
+ conffile_t *conffile;
+ int removed_a_dir;
+ pkg_t *owner;
+ int rootdirlen = 0;
+
+ installed_files = pkg_get_installed_files(pkg);
+ if (installed_files == NULL) {
+ opkg_msg(ERROR, "Failed to determine installed "
+ "files for %s. None removed.\n", pkg->name);
+ return;
+ }
+
+ str_list_init(&installed_dirs);
+
+ /* don't include trailing slash */
+ if (conf->offline_root)
+ rootdirlen = strlen(conf->offline_root);
+
+ for (iter = str_list_first(installed_files); iter;
+ iter = str_list_next(installed_files, iter)) {
+ file_name = (char *)iter->data;
+
+ owner = file_hash_get_file_owner(file_name);
+ if (owner != pkg)
+ /* File may have been claimed by another package. */
+ continue;
+
+ if (file_is_dir(file_name)) {
+ str_list_append(&installed_dirs, file_name);
+ continue;
+ }
+
+ conffile = pkg_get_conffile(pkg, file_name + rootdirlen);
+ if (conffile) {
+ if (conffile_has_been_modified(conffile)) {
+ opkg_msg(NOTICE,
+ "Not deleting modified conffile %s.\n",
+ file_name);
+ continue;
+ }
+ }
+
+ if (!conf->noaction) {
+ opkg_msg(INFO, "Deleting %s.\n", file_name);
+ unlink(file_name);
+ } else
+ opkg_msg(INFO, "Not deleting %s. (noaction)\n",
+ file_name);
+
+ file_hash_remove(file_name);
+ }
+
+ /* Remove empty directories */
+ if (!conf->noaction) {
+ do {
+ removed_a_dir = 0;
+ 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_msg(INFO, "Deleting %s.\n",
+ file_name);
+ removed_a_dir = 1;
+ str_list_remove(&installed_dirs, &iter);
+ }
+ }
+ } while (removed_a_dir);
+ }
+
+ pkg_free_installed_files(pkg);
+ pkg_remove_installed_files_list(pkg);
+
+ /* Don't print warning for dirs that are provided by other packages */
+ 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(file_name);
+ if (owner) {
+ free(iter->data);
+ iter->data = NULL;
+ str_list_remove(&installed_dirs, &iter);
+ }
+ }
+
+ /* cleanup */
+ while (!void_list_empty(&installed_dirs)) {
+ iter = str_list_pop(&installed_dirs);
+ free(iter->data);
+ free(iter);
+ }
+ str_list_deinit(&installed_dirs);