user_io: don't write beyond existing file size if not savefile.

This commit is contained in:
sorgelig
2021-05-20 07:30:29 +08:00
parent 19b91c7abc
commit b21f0a032e

View File

@@ -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;