summaryrefslogtreecommitdiff
path: root/src/database.c
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2021-07-23 14:39:38 +0300
committerTimo Teräs <timo.teras@iki.fi>2021-07-23 15:08:40 +0300
commitc13969849d6d072c22ae4a2eddb40c0974b70a31 (patch)
tree49b62b736c4e045f80ddf1d8556c04b999029b64 /src/database.c
parent6854da9271bf30dc8273ca446dd5f18b4036c7a9 (diff)
downloadapk-tools-c13969849d6d072c22ae4a2eddb40c0974b70a31.tar.gz
apk-tools-c13969849d6d072c22ae4a2eddb40c0974b70a31.tar.bz2
apk-tools-c13969849d6d072c22ae4a2eddb40c0974b70a31.tar.xz
apk-tools-c13969849d6d072c22ae4a2eddb40c0974b70a31.zip
db: allow read-only operations without cache
fixes #10748
Diffstat (limited to 'src/database.c')
-rw-r--r--src/database.c20
1 files changed, 9 insertions, 11 deletions
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)