summaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/hexedit.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/miscutils/hexedit.c b/miscutils/hexedit.c
index eaf4ba5..bdb7683 100644
--- a/miscutils/hexedit.c
+++ b/miscutils/hexedit.c
@@ -159,7 +159,8 @@ static void redraw_cur_line(void)
);
}
-static void remap(unsigned cur_pos)
+/* if remappers return 0, no change was done */
+static int remap(unsigned cur_pos)
{
if (G.baseaddr)
munmap(G.baseaddr, G_mapsize);
@@ -184,14 +185,15 @@ static void remap(unsigned cur_pos)
/* we do have a mapped byte which is past eof */
G.eof_byte = G.baseaddr + (G.size - G.offset);
}
+ return 1;
}
-static void move_mapping_further(void)
+static int move_mapping_further(void)
{
unsigned pos;
unsigned pagesize;
if ((G.size - G.offset) < G_mapsize)
- return; /* can't move mapping even further, it's at the end already */
+ return 0; /* can't move mapping even further, it's at the end already */
pagesize = getpagesize(); /* constant on most arches */
pos = G.current_byte - G.baseaddr;
@@ -205,16 +207,17 @@ static void move_mapping_further(void)
}
pos -= pagesize;
} while (pos >= pagesize);
- remap(pos);
+ return remap(pos);
}
+ return 0;
}
-static void move_mapping_lower(void)
+static int move_mapping_lower(void)
{
unsigned pos;
unsigned pagesize;
if (G.offset == 0)
- return; /* we are at 0 already */
+ return 0; /* we are at 0 already */
pagesize = getpagesize(); /* constant on most arches */
pos = G.current_byte - G.baseaddr;
@@ -229,7 +232,7 @@ static void move_mapping_lower(void)
}
pos -= pagesize;
- remap(pos);
+ return remap(pos);
}
//usage:#define hexedit_trivial_usage
@@ -292,9 +295,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv)
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if (G.current_byte == G.eof_byte) {
- move_mapping_further();
- if (G.current_byte == G.eof_byte) {
- /* extend the file */
+ if (!move_mapping_further()) {
+ /* already at EOF; extend the file */
if (++G.size <= 0 /* overflow? */
|| ftruncate(G.fd, G.size) != 0 /* error extending? (e.g. block dev) */
) {
@@ -343,7 +345,7 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv)
if (G.current_byte >= G.eof_byte) {
move_mapping_further();
if (G.current_byte > G.eof_byte) {
- /* eof - don't allow going past it */
+ /* _after_ eof - don't allow this */
G.current_byte -= 16;
break;
}
@@ -368,8 +370,7 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv)
if ((0xf & (uintptr_t)G.current_byte) == 0) {
/* leftmost pos, wrap to prev line */
if (G.current_byte == G.baseaddr) {
- move_mapping_lower();
- if (G.current_byte == G.baseaddr)
+ if (!move_mapping_lower())
break; /* first line, don't do anything */
}
G.half = 1;
@@ -386,9 +387,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv)
case KEYCODE_UP:
k_up:
if ((G.current_byte - G.baseaddr) < 16) {
- move_mapping_lower();
- if ((G.current_byte - G.baseaddr) < 16)
- break;
+ if (!move_mapping_lower())
+ break; /* already at 0, stop */
}
G.current_byte -= 16;
up: