diff options
Diffstat (limited to 'procfs.c')
-rw-r--r-- | procfs.c | 24 |
1 files changed, 19 insertions, 5 deletions
@@ -75,14 +75,28 @@ err: return -1; } -int read_page(int fd, uintptr_t index, uint8_t *data) { - if (lseek(fd, index * PAGE_SIZE, SEEK_SET) == -1) - return -1; +int read_mem(int fd, uintptr_t addr, uint8_t *data, size_t size) { + if (lseek(fd, addr, SEEK_SET) == -1) return -1; size_t n = 0; - while (n < PAGE_SIZE) { - ssize_t result = read(fd, data + n, PAGE_SIZE - n); + while (n < size) { + ssize_t result = read(fd, data + n, size - n); if (result == -1) return -1; n += result; } return 0; } + +int write_mem(int fd, uintptr_t addr, uint8_t *data, size_t size) { + if (lseek(fd, addr, SEEK_SET) == -1) return -1; + size_t n = 0; + while (n < size) { + ssize_t result = write(fd, data + n, size - n); + if (result == -1) return -1; + n += result; + } + return 0; +} + +int read_page(int fd, uintptr_t index, uint8_t *data) { + return read_mem(fd, index * PAGE_SIZE, data, PAGE_SIZE); +} |