From 829b4f67bfb15ae6cc8e6287a23c909cad2bbe3d Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Tue, 10 Jun 2014 20:40:11 -0700 Subject: [PATCH] ReadFile EOF. --- src/xenia/kernel/fs/devices/disc_image_file.cc | 3 +++ src/xenia/kernel/fs/devices/host_path_file.cc | 2 +- src/xenia/kernel/fs/devices/stfs_container_file.cc | 3 +++ src/xenia/xbox.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/xenia/kernel/fs/devices/disc_image_file.cc b/src/xenia/kernel/fs/devices/disc_image_file.cc index d98919c62..c094dbef7 100644 --- a/src/xenia/kernel/fs/devices/disc_image_file.cc +++ b/src/xenia/kernel/fs/devices/disc_image_file.cc @@ -63,6 +63,9 @@ X_STATUS DiscImageFile::ReadSync( size_t* out_bytes_read) { GDFXEntry* gdfx_entry = entry_->gdfx_entry(); xe_mmap_ref mmap = entry_->mmap(); + if (byte_offset >= gdfx_entry->size) { + return X_STATUS_END_OF_FILE; + } size_t real_offset = gdfx_entry->offset + byte_offset; size_t real_length = MIN(buffer_length, gdfx_entry->size - byte_offset); xe_copy_memory( diff --git a/src/xenia/kernel/fs/devices/host_path_file.cc b/src/xenia/kernel/fs/devices/host_path_file.cc index cf75e69e9..b36f9f890 100644 --- a/src/xenia/kernel/fs/devices/host_path_file.cc +++ b/src/xenia/kernel/fs/devices/host_path_file.cc @@ -71,6 +71,6 @@ X_STATUS HostPathFile::ReadSync( *out_bytes_read = bytes_read; return X_STATUS_SUCCESS; } else { - return X_STATUS_UNSUCCESSFUL; + return X_STATUS_END_OF_FILE; } } diff --git a/src/xenia/kernel/fs/devices/stfs_container_file.cc b/src/xenia/kernel/fs/devices/stfs_container_file.cc index 05b1a21a8..4f9f25a53 100644 --- a/src/xenia/kernel/fs/devices/stfs_container_file.cc +++ b/src/xenia/kernel/fs/devices/stfs_container_file.cc @@ -64,6 +64,9 @@ X_STATUS STFSContainerFile::ReadSync( STFSEntry* stfs_entry = entry_->stfs_entry(); xe_mmap_ref mmap = entry_->mmap(); uint8_t* map_ptr = xe_mmap_get_addr(mmap); + if (byte_offset >= stfs_entry->size) { + return X_STATUS_END_OF_FILE; + } // Each block is 4096. // Blocks may not be sequential, so we need to read by blocks and handle the diff --git a/src/xenia/xbox.h b/src/xenia/xbox.h index ebf2f816f..aab667584 100644 --- a/src/xenia/xbox.h +++ b/src/xenia/xbox.h @@ -43,6 +43,7 @@ typedef uint32_t X_STATUS; #define X_STATUS_INVALID_HANDLE ((X_STATUS)0xC0000008L) #define X_STATUS_INVALID_PARAMETER ((X_STATUS)0xC000000DL) #define X_STATUS_NO_SUCH_FILE ((X_STATUS)0xC000000FL) +#define X_STATUS_END_OF_FILE ((X_STATUS)0xC0000011L) #define X_STATUS_NO_MEMORY ((X_STATUS)0xC0000017L) #define X_STATUS_ALREADY_COMMITTED ((X_STATUS)0xC0000021L) #define X_STATUS_ACCESS_DENIED ((X_STATUS)0xC0000022L)