[git commit] bc: use '\0' insteads of 0xff (BC_PARSE_STREND) as name terminator

Denys Vlasenko vda.linux at googlemail.com
Wed Dec 26 19:02:27 UTC 2018


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

function                                             old     new   delta
zdc_program_printStream                                -     146    +146
zbc_program_exec                                    4003    4016     +13
zdc_parse_expr                                       473     470      -3
bc_parse_pushName                                     31      20     -11
bc_program_name                                       63      34     -29
zbc_program_pushArray                                147       -    -147
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/3 up/down: 159/-190)          Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/bc.c | 34 ++++++++++------------------------
 1 file changed, 10 insertions(+), 24 deletions(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index 5b79b2db1..2569967d6 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -803,8 +803,6 @@ struct globals {
 #define IS_BC (ENABLE_BC && (!ENABLE_DC || applet_name[0] == 'b'))
 #define IS_DC (ENABLE_DC && (!ENABLE_BC || applet_name[0] != 'b'))
 
-#define BC_PARSE_STREND         (0xff)
-
 #if ENABLE_BC
 # define BC_PARSE_REL           (1 << 0)
 # define BC_PARSE_PRINT         (1 << 1)
@@ -3434,16 +3432,16 @@ static BC_STATUS zdc_lex_token(void)
 
 static void bc_parse_push(char i)
 {
-	BcParse *p = &G.prs;
-	dbg_compile("%s:%d pushing bytecode %zd:%d", __func__, __LINE__, p->func->code.len, i);
-	bc_vec_pushByte(&p->func->code, i);
+	BcVec *code = &G.prs.func->code;
+	dbg_compile("%s:%d pushing bytecode %zd:%d", __func__, __LINE__, code->len, i);
+	bc_vec_pushByte(code, i);
 }
 
 static void bc_parse_pushName(char *name)
 {
-	while (*name)
-		bc_parse_push(*name++);
-	bc_parse_push(BC_PARSE_STREND);
+	do {
+		bc_parse_push(*name);
+	} while (*name++);
 }
 
 static void bc_parse_pushIndex(size_t idx)
@@ -4895,7 +4893,7 @@ static BC_STATUS zdc_parse_cond(uint8_t inst)
 		if (s) RETURN_STATUS(s);
 		s = zbc_lex_next();
 	} else {
-		bc_parse_push(BC_PARSE_STREND);
+		bc_parse_push('\0');
 	}
 
 	RETURN_STATUS(s);
@@ -5271,22 +5269,10 @@ static size_t bc_program_index(char *code, size_t *bgn)
 
 static char *bc_program_name(char *code, size_t *bgn)
 {
-	size_t i;
-	char *s;
-
 	code += *bgn;
-	s = xmalloc(strchr(code, BC_PARSE_STREND) - code + 1);
-	i = 0;
-	for (;;) {
-		char c = *code++;
-		if (c == BC_PARSE_STREND)
-			break;
-		s[i++] = c;
-	}
-	s[i] = '\0';
-	*bgn += i + 1;
+	*bgn += strlen(code) + 1;
 
-	return s;
+	return xstrdup(code);
 }
 
 static void bc_program_printString(const char *str)
@@ -6305,7 +6291,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond)
 		char *then_name = bc_program_name(code, bgn);
 		char *else_name = NULL;
 
-		if (code[*bgn] == BC_PARSE_STREND)
+		if (code[*bgn] == '\0')
 			(*bgn) += 1;
 		else
 			else_name = bc_program_name(code, bgn);


More information about the busybox-cvs mailing list