summaryrefslogtreecommitdiff
path: root/procfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'procfs.c')
-rw-r--r--procfs.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/procfs.c b/procfs.c
index 2558f03..1e70274 100644
--- a/procfs.c
+++ b/procfs.c
@@ -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);
+}