From 197d41a3e23cab35848f623c6133baccc62aacbe Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Wed, 26 Aug 2026 17:56:52 -0400 Subject: OSD stuff and Android fixes Signed-off-by: Andrew Opalach --- src/cache/backings/file.c | 2 +- src/cache/backings/file_common.h | 14 +++++++++++++- src/cache/backings/file_mapped.c | 4 +--- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src/cache/backings') diff --git a/src/cache/backings/file.c b/src/cache/backings/file.c index 06cc600..c98c8d5 100644 --- a/src/cache/backings/file.c +++ b/src/cache/backings/file.c @@ -63,7 +63,7 @@ static void file_backing_set_size(struct cch_backing *backing, off_t size, bool struct cch_backing_file *file = (struct cch_backing_file *)backing; nn_mutex_lock(&file->mutex); file->backing.size = size; - if (expand_to_size && (size_t)size > file->file.size) { + if (expand_to_size || (size > 0 && size < file->file.size)) { nn_file_truncate(&file->file, size); } nn_mutex_unlock(&file->mutex); diff --git a/src/cache/backings/file_common.h b/src/cache/backings/file_common.h index 6650dd1..6dd4e96 100644 --- a/src/cache/backings/file_common.h +++ b/src/cache/backings/file_common.h @@ -27,7 +27,19 @@ static void file_backing_finalize(struct cch_backing *backing) static bool file_open_internal(struct cch_backing_file *file, str *path, size_t size) { s32 flags = (size != 0) ? NNWT_FILE_CREATE : NNWT_FILE_READONLY; - if (!nn_file_open(&file->file, path, flags)) return false; + if (al_str_cmp(path, &al_str_c("fd://"), 0, 5) == 0) { + str fd_str = al_str_substr(path, 5, path->length); + bool error; + s32 fd = (s32)al_str_to_long(&fd_str, 10, &error); + if (error) return false; + if (!nn_file_wrap_fd(&file->file, fd)) { + return false; + } + } else { + if (!nn_file_open(&file->file, path, flags)) { + return false; + } + } size_t filesize = file->file.size; if (!size) { file->backing.size = filesize; diff --git a/src/cache/backings/file_mapped.c b/src/cache/backings/file_mapped.c index 7657a21..24ac005 100644 --- a/src/cache/backings/file_mapped.c +++ b/src/cache/backings/file_mapped.c @@ -46,14 +46,12 @@ static void file_backing_unlock(struct cch_backing *backing) static void file_backing_set_size(struct cch_backing *backing, off_t size, bool expand_to_size) { struct cch_backing_file *file = (struct cch_backing_file *)backing; - al_assert(expand_to_size || size == 0); nn_mutex_lock(&file->mutex); file->backing.size = size; - if ((size_t)size > file->file.size) { + if (expand_to_size || (size > 0 && size < file->file.size)) { nn_file_munmap(&file->file, file->u.map); nn_file_truncate(&file->file, size); file->u.map = nn_file_mmap(&file->file); - file->file.size = size; } nn_mutex_unlock(&file->mutex); } -- cgit v1.2.3-101-g0448