dev_mem: Fix range and pos of region

Test:
  fastboot oem filedump /dev/mem 0 748544
  fastboot get_staged mem1.txt
  fastboot oem memdump 0x44000000 0xb6c00
  fastboot get_staged mem2.txt
  diff mem1.txt mem2.txt

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
This commit is contained in:
wangjianyu3 2024-07-17 21:21:13 +08:00 committed by Xiang Xiao
parent 10ee7ffb46
commit 9553506b1f

View file

@ -101,11 +101,12 @@ static ssize_t devmem_read(FAR struct file *filep, FAR char *buffer,
}
start = MAX(src, region[i].start);
end = MIN(src + buflen, region[i].end);
end = MIN(start + buflen, region[i].end);
len = end - start;
if (len > 0 && (region[i].flags & PROT_READ))
{
memcpy(buffer, (FAR const void *)start, len);
filep->f_pos = end;
return len;
}
}
@ -137,11 +138,12 @@ static ssize_t devmem_write(FAR struct file *filep, FAR const char *buffer,
}
start = MAX(dest, region[i].start);
end = MIN(dest + buflen, region[i].end);
end = MIN(start + buflen, region[i].end);
len = end - start;
if (len > 0 && (region[i].flags & PROT_WRITE))
{
memcpy((FAR void *)start, buffer, len);
filep->f_pos = end;
return len;
}
}