From d519356c416223aaa3887a6ac3a593d25bcf7c28 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lab Date: Mon, 19 Jan 2026 11:02:48 +0100 Subject: [PATCH 1/2] Do not write entire file when vmem_write(), seek to correct offset instead --- src/vmem/vmem_file.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/vmem/vmem_file.c b/src/vmem/vmem_file.c index 981a8ac3..2bfa0ac3 100644 --- a/src/vmem/vmem_file.c +++ b/src/vmem/vmem_file.c @@ -21,13 +21,15 @@ void vmem_file_init(vmem_t * vmem) { if (fd != -1) { driver->stream = fdopen(fd, "r+"); } - } - if(driver->stream) { - /* Read in file data if any (fread will fail if the file was just created, leaving the content of driver->physaddr alone to what it currently is) */ - int read = fread(driver->physaddr, 1, vmem->size, driver->stream); - (void) read; - } else { - printf("\nWARNING: vmem[%s]: permission/path issues for associated filename: \"%s\"\n", vmem->name, driver->filename); + if(driver->stream) { + /* Read in file data if any (fread will fail if the file was just created, leaving the content of driver->physaddr alone to what it currently is) */ + int res = fseek(driver->stream, 0, SEEK_SET); + (void)res; + int read = fread(driver->physaddr, 1, vmem->size, driver->stream); + (void) read; + } else { + printf("\nWARNING: vmem[%s]: permission/path issues for associated filename: \"%s\"\n", vmem->name, driver->filename); + } } } @@ -43,9 +45,9 @@ void vmem_file_write(vmem_t * vmem, uint64_t addr, const void * datain, uint32_t vmem_file_init(vmem); if(driver->stream ) { /* Flush back to file */ - int res = fseek(driver->stream, 0, SEEK_SET); + int res = fseek(driver->stream, addr, SEEK_SET); (void)res; - int written = fwrite(driver->physaddr, 1, vmem->size, driver->stream); + int written = fwrite(driver->physaddr + addr, len, 1, driver->stream); fflush(driver->stream); (void) written; } From 34f862571dd9fdf5aee46c13052355d2a84472a3 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lab Date: Mon, 19 Jan 2026 11:33:38 +0100 Subject: [PATCH 2/2] Remove superfluous initial seek to start --- src/vmem/vmem_file.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/vmem/vmem_file.c b/src/vmem/vmem_file.c index 2bfa0ac3..a357c8c9 100644 --- a/src/vmem/vmem_file.c +++ b/src/vmem/vmem_file.c @@ -22,9 +22,6 @@ void vmem_file_init(vmem_t * vmem) { driver->stream = fdopen(fd, "r+"); } if(driver->stream) { - /* Read in file data if any (fread will fail if the file was just created, leaving the content of driver->physaddr alone to what it currently is) */ - int res = fseek(driver->stream, 0, SEEK_SET); - (void)res; int read = fread(driver->physaddr, 1, vmem->size, driver->stream); (void) read; } else {