aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-12-21 21:36:58 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-12-21 21:36:58 +0100
commit00eb23b47aa79461b913b320eba3c95b90e6eec4 (patch)
treeebeb54dcc6eb977247f5088be9cffc4deaea27e9 /miscutils
parente4202df0918e13130bb511a4ce372cbbe089068d (diff)
downloadbusybox-w32-00eb23b47aa79461b913b320eba3c95b90e6eec4.tar.gz
busybox-w32-00eb23b47aa79461b913b320eba3c95b90e6eec4.tar.bz2
busybox-w32-00eb23b47aa79461b913b320eba3c95b90e6eec4.zip
bc: do not allocate line editing state until needed
function old new delta xc_read_line 324 353 +29 free_line_input_t 34 39 +5 xc_vm_init 656 640 -16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 34/-16) Total: 18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/bc.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index f339b895c..1227e2d13 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -2545,6 +2545,8 @@ static void xc_read_line(BcVec *vec, FILE *fp)
2545# if ENABLE_FEATURE_EDITING 2545# if ENABLE_FEATURE_EDITING
2546 if (G_ttyin && fp == stdin) { 2546 if (G_ttyin && fp == stdin) {
2547 int n, i; 2547 int n, i;
2548 if (!G.line_input_state)
2549 G.line_input_state = new_line_input_t(DO_HISTORY);
2548# define line_buf bb_common_bufsiz1 2550# define line_buf bb_common_bufsiz1
2549 n = read_line_input(G.line_input_state, "", line_buf, COMMON_BUFSIZE); 2551 n = read_line_input(G.line_input_state, "", line_buf, COMMON_BUFSIZE);
2550 if (n <= 0) { // read errors or EOF, or ^D, or ^C 2552 if (n <= 0) { // read errors or EOF, or ^D, or ^C
@@ -6872,22 +6874,6 @@ static BC_STATUS zxc_program_exec(void)
6872} 6874}
6873#define zxc_program_exec(...) (zxc_program_exec(__VA_ARGS__) COMMA_SUCCESS) 6875#define zxc_program_exec(...) (zxc_program_exec(__VA_ARGS__) COMMA_SUCCESS)
6874 6876
6875static unsigned xc_vm_envLen(const char *var)
6876{
6877 char *lenv;
6878 unsigned len;
6879
6880 lenv = getenv(var);
6881 len = BC_NUM_PRINT_WIDTH;
6882 if (!lenv) return len;
6883
6884 len = bb_strtou(lenv, NULL, 10) - 1;
6885 if (errno || len < 2 || len >= INT_MAX)
6886 len = BC_NUM_PRINT_WIDTH;
6887
6888 return len;
6889}
6890
6891static BC_STATUS zxc_vm_process(const char *text) 6877static BC_STATUS zxc_vm_process(const char *text)
6892{ 6878{
6893 BcStatus s; 6879 BcStatus s;
@@ -7377,12 +7363,25 @@ static void xc_program_init(void)
7377 bc_char_vec_init(&G.input_buffer); 7363 bc_char_vec_init(&G.input_buffer);
7378} 7364}
7379 7365
7366static unsigned xc_vm_envLen(const char *var)
7367{
7368 char *lenv;
7369 unsigned len;
7370
7371 lenv = getenv(var);
7372 len = BC_NUM_PRINT_WIDTH;
7373 if (!lenv) return len;
7374
7375 len = bb_strtou(lenv, NULL, 10) - 1;
7376 if (errno || len < 2 || len >= INT_MAX)
7377 len = BC_NUM_PRINT_WIDTH;
7378
7379 return len;
7380}
7381
7380static int xc_vm_init(const char *env_len) 7382static int xc_vm_init(const char *env_len)
7381{ 7383{
7382 G.prog.len = xc_vm_envLen(env_len); 7384 G.prog.len = xc_vm_envLen(env_len);
7383#if ENABLE_FEATURE_EDITING
7384 G.line_input_state = new_line_input_t(DO_HISTORY);
7385#endif
7386 bc_vec_init(&G.files, sizeof(char *), NULL); 7385 bc_vec_init(&G.files, sizeof(char *), NULL);
7387 7386
7388 xc_program_init(); 7387 xc_program_init();