user_io: don't write beyond existing file size if not savefile.
This commit is contained in:
15
user_io.cpp
15
user_io.cpp
@@ -40,6 +40,7 @@ static char core_path[1024] = {};
|
||||
static char rbf_path[1024] = {};
|
||||
|
||||
static fileTYPE sd_image[4] = {};
|
||||
static int sd_image_cangrow[4] = {};
|
||||
static uint64_t buffer_lba[4] = { ULLONG_MAX,ULLONG_MAX,ULLONG_MAX,ULLONG_MAX };
|
||||
|
||||
static int use_save = 0;
|
||||
@@ -1521,6 +1522,8 @@ int user_io_file_mount(const char *name, unsigned char index, char pre)
|
||||
int ret = 0;
|
||||
int len = strlen(name);
|
||||
|
||||
sd_image_cangrow[index] = (pre != 0);
|
||||
|
||||
if (len)
|
||||
{
|
||||
if (!strcasecmp(user_io_get_core_name(), "apple-ii"))
|
||||
@@ -2680,14 +2683,20 @@ void user_io_poll()
|
||||
{
|
||||
// ... and write it to disk
|
||||
__off64_t size = sd_image[disk].size >> 9;
|
||||
if (size && size >= lba)
|
||||
if (size && lba <= size)
|
||||
{
|
||||
diskled_on();
|
||||
if (FileSeekLBA(&sd_image[disk], lba))
|
||||
{
|
||||
if (FileWriteSec(&sd_image[disk], buffer[disk]))
|
||||
int sz = 512;
|
||||
if (!sd_image_cangrow[disk])
|
||||
{
|
||||
if (size == lba)
|
||||
__off64_t rem = sd_image[disk].size - sd_image[disk].offset;
|
||||
sz = (rem >= 512) ? 512 : (int)rem;
|
||||
}
|
||||
if(sz && FileWriteAdv(&sd_image[disk], buffer[disk], sz))
|
||||
{
|
||||
if (size == lba && sd_image_cangrow[disk])
|
||||
{
|
||||
size++;
|
||||
sd_image[disk].size = size << 9;
|
||||
|
||||
Reference in New Issue
Block a user