From c13969849d6d072c22ae4a2eddb40c0974b70a31 Mon Sep 17 00:00:00 2001 From: Timo Teräs Date: Fri, 23 Jul 2021 14:39:38 +0300 Subject: db: allow read-only operations without cache fixes #10748 --- src/database.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'src/database.c') diff --git a/src/database.c b/src/database.c index 80f393d..f4169ff 100644 --- a/src/database.c +++ b/src/database.c @@ -1670,7 +1670,10 @@ int apk_db_open(struct apk_database *db, struct apk_db_options *dbopts) mkdirat(db->root_fd, "var/cache", 0755); mkdirat(db->root_fd, "var/cache/apk", 0755); db->cache_fd = openat(db->root_fd, db->cache_dir, O_RDONLY | O_CLOEXEC); - if (db->cache_fd < 0) goto ret_errno; + if (db->cache_fd < 0) { + if (dbopts->open_flags & APK_OPENF_WRITE) goto ret_errno; + db->cache_fd = -EAPKCACHE; + } } } @@ -1854,16 +1857,11 @@ void apk_db_close(struct apk_database *db) db->cache_remount_dir = NULL; } - if (db->keys_fd) - close(db->keys_fd); - if (db->cache_fd) - close(db->cache_fd); - if (db->root_fd) - close(db->root_fd); - if (db->lock_fd) - close(db->lock_fd); - if (db->root != NULL) - free(db->root); + if (db->keys_fd > 0) close(db->keys_fd); + if (db->cache_fd > 0) close(db->cache_fd); + if (db->root_fd > 0) close(db->root_fd); + if (db->lock_fd > 0) close(db->lock_fd); + free(db->root); } int apk_db_get_tag_id(struct apk_database *db, apk_blob_t tag) -- cgit v1.2.3-60-g2f50