From: Bernd Moessner <berndmoessne...@gmail.com> When the region feature is active, flashdev assumes that a relative address is provided. It computes the abs. address and carries out the read / write. However, in this case it must not assign the abs. address to iop->offset. The relative address is required here to allow newlib to correctly read/write the next junk of data.
Updates #4981 --- cpukit/dev/flash/flashdev.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/cpukit/dev/flash/flashdev.c b/cpukit/dev/flash/flashdev.c index 7bc13ed70a..b908e87023 100644 --- a/cpukit/dev/flash/flashdev.c +++ b/cpukit/dev/flash/flashdev.c @@ -145,8 +145,7 @@ static int rtems_flashdev_get_abs_addr( static int rtems_flashdev_update_and_return( rtems_libio_t *iop, int status, - size_t count, - off_t new_offset + size_t count ); static uint32_t rtems_flashdev_find_unallocated_region( @@ -339,7 +338,7 @@ static int rtems_flashdev_read_write( rtems_flashdev_release( flash ); /* Update offset and return */ - return rtems_flashdev_update_and_return( iop, status, count, addr + count ); + return rtems_flashdev_update_and_return( iop, status, count ); } static int rtems_flashdev_ioctl( @@ -599,13 +598,12 @@ static int rtems_flashdev_get_abs_addr( static int rtems_flashdev_update_and_return( rtems_libio_t *iop, int status, - size_t count, - off_t new_offset + size_t count ) { /* Update offset and return */ if ( status == 0 ) { - iop->offset = new_offset; + iop->offset += count; return count; } else { rtems_set_errno_and_return_minus_one( status ); -- 2.34.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel