diff options
Diffstat (limited to 'main/apk-tools/0001-db-optionally-remove-dirs-when-unref.patch')
-rw-r--r-- | main/apk-tools/0001-db-optionally-remove-dirs-when-unref.patch | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/main/apk-tools/0001-db-optionally-remove-dirs-when-unref.patch b/main/apk-tools/0001-db-optionally-remove-dirs-when-unref.patch deleted file mode 100644 index e6497dda4..000000000 --- a/main/apk-tools/0001-db-optionally-remove-dirs-when-unref.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 5c4583a9027de2a26d3bff8b443f7db7f0c37074 Mon Sep 17 00:00:00 2001 -From: Natanael Copa <ncopa@alpinelinux.org> -Date: Wed, 22 Sep 2010 14:16:18 +0000 -Subject: [PATCH] db: optionally remove dirs when unref - -We want remove dirs when they are unreferenced so we remove all dirs on -apk del, but we don't want remove dirs when closing database. So we make -removing dir optional when unreferencing it. - -This partially reverts commit c7ffc96a16c6963fe0a07be7ee75e8f1f7426882. - -fixes #406 ---- - src/database.c | 28 +++++++++++++++------------- - 1 files changed, 15 insertions(+), 13 deletions(-) - -diff --git a/src/database.c b/src/database.c -index 925aa4a..0054837 100644 ---- a/src/database.c -+++ b/src/database.c -@@ -30,6 +30,11 @@ - #include "apk_archive.h" - #include "apk_print.h" - -+enum { -+ APK_DISALLOW_RMDIR = 0, -+ APK_ALLOW_RMDIR = 1 -+}; -+ - int apk_verbosity = 1; - unsigned int apk_flags = 0; - -@@ -188,16 +193,19 @@ struct apk_name *apk_db_get_name(struct apk_database *db, apk_blob_t name) - return pn; - } - --static void apk_db_dir_unref(struct apk_database *db, struct apk_db_dir *dir) -+static void apk_db_dir_unref(struct apk_database *db, struct apk_db_dir *dir, -+ int allow_rmdir) - { - dir->refs--; - if (dir->refs > 0) - return; - - db->installed.stats.dirs--; -+ if (allow_rmdir) -+ unlinkat(db->root_fd, dir->name, AT_REMOVEDIR); - - if (dir->parent != NULL) -- apk_db_dir_unref(db, dir->parent); -+ apk_db_dir_unref(db, dir->parent, allow_rmdir); - } - - static struct apk_db_dir *apk_db_dir_ref(struct apk_db_dir *dir) -@@ -307,16 +315,11 @@ static void apk_db_diri_mkdir(struct apk_database *db, struct apk_db_dir_instanc - } - } - --static void apk_db_diri_rmdir(struct apk_database *db, struct apk_db_dir_instance *diri) --{ -- if (diri->dir->refs == 1) -- unlinkat(db->root_fd, diri->dir->name, 1); --} -- - static void apk_db_diri_free(struct apk_database *db, -- struct apk_db_dir_instance *diri) -+ struct apk_db_dir_instance *diri, -+ int allow_rmdir) - { -- apk_db_dir_unref(db, diri->dir); -+ apk_db_dir_unref(db, diri->dir, allow_rmdir); - free(diri); - } - -@@ -1265,7 +1268,7 @@ void apk_db_close(struct apk_database *db) - - list_for_each_entry(ipkg, &db->installed.packages, installed_pkgs_list) { - hlist_for_each_entry_safe(diri, dc, dn, &ipkg->owned_dirs, pkg_dirs_list) { -- apk_db_diri_free(db, diri); -+ apk_db_diri_free(db, diri, APK_DISALLOW_RMDIR); - } - } - -@@ -1884,9 +1887,8 @@ static void apk_db_purge_pkg(struct apk_database *db, - db->installed.stats.files--; - } - } -- apk_db_diri_rmdir(db, diri); - __hlist_del(dc, &ipkg->owned_dirs.first); -- apk_db_diri_free(db, diri); -+ apk_db_diri_free(db, diri, APK_ALLOW_RMDIR); - } - } - --- -1.7.2.3 - |