diff options
| author | the lemons <citrons@mondecitronne.com> | 2023-02-07 15:15:00 -0600 |
|---|---|---|
| committer | the lemons <citrons@mondecitronne.com> | 2023-02-07 15:15:58 -0600 |
| commit | 285025ee086b7631cb102c20300c8da7f2d9a52e (patch) | |
| tree | 199de44aa15d3147eb15f38a42519b2f3ed91f1f /core.c | |
| parent | 2f4f1462488a867dddae15802ba7dff94279fb9f (diff) | |
change behavior of jumping between maps
Diffstat (limited to 'core.c')
| -rw-r--r-- | core.c | 36 |
1 files changed, 15 insertions, 21 deletions
@@ -50,25 +50,18 @@ static void goto_addr(uintptr_t addr) { pos_y -= (double) screen_height / 2 * scale; } -static size_t closest_map(struct procfs_map *maps, size_t n, uintptr_t addr) { - uintptr_t min = -1; - size_t closest; - for (size_t i = 0; i < n; i++) { - uintptr_t base = maps[i].base; - uintptr_t diff = base > addr ? base - addr : addr - base; - if (diff < min) { - min = diff; closest = i; - } - } - return closest; -} +static size_t current_map = 0; static void next_map() { struct procfs_map *maps; int n = procfs_maps(pid, &maps); if (n < 1) return; - size_t m = closest_map(maps, n, current_addr()); - goto_addr(maps[(m + 1) % n].base); + for (int i = 0; i < n; i++) { + current_map = (current_map + 1) % n; + if (maps[current_map].prot & PROT_READ) + break; + } + goto_addr(maps[current_map].base); free(maps); } @@ -76,11 +69,12 @@ static void prev_map() { struct procfs_map *maps; int n = procfs_maps(pid, &maps); if (n < 1) return; - size_t m = closest_map(maps, n, current_addr()); - if (m != 0) - goto_addr(maps[m - 1].base); - else - goto_addr(maps[n - 1].base); + for (int i = 0; i < n; i++) { + current_map = current_map > 1 ? current_map - 1 : n - 1; + if (maps[current_map].prot & PROT_READ) + break; + } + goto_addr(maps[current_map].base); free(maps); } @@ -184,12 +178,12 @@ int main(int argc, char *argv[]) { char title[1024]; snprintf(title, 1024, "%s [%d]", argv[0], pid); - init_sdl(argv[0]); + init_sdl(title); viewer = create_viewer(mem_fd, renderer); if (!viewer) abort(); atexit(cleanup); - next_map(); + prev_map(); int last_time = 0; int current_time = 0; |
