[git commit] hexdump: code shrink

Denys Vlasenko vda.linux at googlemail.com
Thu Sep 14 09:01:37 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=8838c6d53ecf9491d862ee090c9bf1579fa64eed
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
remap                                                173     178      +5
move_mapping_lower                                   107     109      +2
move_mapping_further                                 141     143      +2
hexedit_main                                        1191    1176     -15
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 9/-15)              Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/hexedit.c | 32 ++++++++++++++++----------------
 1 file 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:


More information about the busybox-cvs mailing list