summaryrefslogtreecommitdiff
path: root/src/cache/backings
diff options
context:
space:
mode:
Diffstat (limited to 'src/cache/backings')
-rw-r--r--src/cache/backings/file.c25
-rw-r--r--src/cache/backings/file.h1
-rw-r--r--src/cache/backings/file_common.c5
-rw-r--r--src/cache/backings/file_mapped.c20
4 files changed, 28 insertions, 23 deletions
diff --git a/src/cache/backings/file.c b/src/cache/backings/file.c
index bf62190..f421623 100644
--- a/src/cache/backings/file.c
+++ b/src/cache/backings/file.c
@@ -17,12 +17,14 @@ static void file_backing_write(struct cch_backing *backing, u8 *buf, off_t index
file->u.pointer = nn_file_seek(&file->file, index, SEEK_SET);
al_assert(file->u.pointer == index);
}
- if (file->size >= 0 && index + ((off_t)*size) >= file->size) {
- *size = MAX(file->size - index, 0L);
+ off_t n = (off_t)*size;
+ if (file->size >= 0 && index + n >= file->size) {
+ n = MAX(file->size - index, (off_t)0);
}
- nn_file_write(&file->file, buf, *size);
- file->u.pointer += *size;
- cch_backing_fill_range(&file->backing, index, *size);
+ nn_file_write(&file->file, buf, n);
+ file->u.pointer += n;
+ cch_backing_fill_range(&file->backing, index, n);
+ *size = (size_t)n;
nn_mutex_unlock(&file->mutex);
}
@@ -34,11 +36,13 @@ static void file_backing_read(struct cch_backing *backing, u8 *buf, off_t index,
file->u.pointer = nn_file_seek(&file->file, index, SEEK_SET);
al_assert(file->u.pointer == index);
}
- if (file->size >= 0 && index + ((off_t)*size) >= file->size) {
- *size = MAX(file->size - index, 0L);
+ off_t n = (off_t)*size;
+ if (file->size >= 0 && index + n >= file->size) {
+ n = MAX(file->size - index, (off_t)0);
}
- nn_file_read(&file->file, buf, *size);
- file->u.pointer += *size;
+ nn_file_read(&file->file, buf, n);
+ file->u.pointer += n;
+ *size = (size_t)n;
nn_mutex_unlock(&file->mutex);
}
@@ -53,9 +57,8 @@ static void file_backing_resize(struct cch_backing *backing, size_t size)
struct cch_backing_file *file = (struct cch_backing_file *)backing;
nn_mutex_lock(&file->mutex);
file->size = size;
- if ((off_t)size > file->filesize) {
+ if (size > file->file.size) {
nn_file_truncate(&file->file, size);
- file->filesize = size;
}
nn_mutex_unlock(&file->mutex);
}
diff --git a/src/cache/backings/file.h b/src/cache/backings/file.h
index 8a2bf7a..9ffd650 100644
--- a/src/cache/backings/file.h
+++ b/src/cache/backings/file.h
@@ -11,7 +11,6 @@ struct cch_backing_file {
struct cch_backing backing;
struct nn_file file;
off_t size;
- off_t filesize;
union {
void *map; // CACHE_BACKING_MAPPED
off_t pointer; // CACHE_BACKING_READ
diff --git a/src/cache/backings/file_common.c b/src/cache/backings/file_common.c
index 0ee2574..e8bd2ca 100644
--- a/src/cache/backings/file_common.c
+++ b/src/cache/backings/file_common.c
@@ -11,13 +11,12 @@ static bool file_open_internal(struct cch_backing_file *file, str *path, size_t
{
s32 flags = size != 0 ? NNWT_FILE_CREATE : NNWT_FILE_READONLY;
if (!nn_file_open(&file->file, path, flags)) return false;
- file->filesize = nn_file_get_filesize(&file->file);
if (!size) {
- file->size = file->filesize;
+ file->size = file->file.size;
cch_backing_fill_range(&file->backing, 0, file->size);
} else {
file->size = -1;
- if (file->filesize < (off_t)size) {
+ if (file->file.size < size) {
nn_file_truncate(&file->file, size);
}
}
diff --git a/src/cache/backings/file_mapped.c b/src/cache/backings/file_mapped.c
index 35ab267..e13d602 100644
--- a/src/cache/backings/file_mapped.c
+++ b/src/cache/backings/file_mapped.c
@@ -13,11 +13,13 @@ static void file_backing_write(struct cch_backing *backing, u8 *buf, off_t index
{
struct cch_backing_file *file = (struct cch_backing_file *)backing;
nn_mutex_lock(&file->mutex);
- if (file->size >= 0 && index + (off_t)*size >= file->size) {
- *size = MAX(file->size - index, 0L);
+ off_t n = (off_t)*size;
+ if (file->size >= 0 && index + n >= file->size) {
+ n = MAX(file->size - index, (off_t)0);
}
- al_memcpy(file->u.map + index, buf, *size);
- cch_backing_fill_range(&file->backing, index, *size);
+ al_memcpy(file->u.map + index, buf, n);
+ cch_backing_fill_range(&file->backing, index, n);
+ *size = (size_t)n;
nn_mutex_unlock(&file->mutex);
}
@@ -25,9 +27,11 @@ static u8 *file_backing_get_ptr(struct cch_backing *backing, off_t index, size_t
{
struct cch_backing_file *file = (struct cch_backing_file *)backing;
nn_mutex_lock(&file->mutex);
- if (file->size >= 0 && index + (off_t)*size >= file->size) {
- *size = MAX(file->size - index, 0L);
+ off_t n = (off_t)*size;
+ if (file->size >= 0 && index + n >= file->size) {
+ n = MAX(file->size - index, (off_t)0);
}
+ *size = (size_t)n;
return (u8 *)(file->u.map + index);
}
@@ -42,11 +46,11 @@ static void file_backing_resize(struct cch_backing *backing, size_t size)
struct cch_backing_file *file = (struct cch_backing_file *)backing;
nn_mutex_lock(&file->mutex);
file->size = size;
- if ((off_t)size > file->filesize) {
+ if (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->filesize = size;
+ file->file.size = size;
}
nn_mutex_unlock(&file->mutex);
}