bc: if ^C handling is not selected, there is no interactive mode
function old new delta packed_usage 33023 33076 +53 bc_num_s 252 246 -6 bc_vm_run 1859 1850 -9 bc_error_fmt 36 20 -16 bc_posix_error_fmt 58 41 -17 bc_read_line 202 168 -34 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/5 up/down: 53/-82) Total: -29 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
54214c38db
commit
1a6a482d19
@ -116,7 +116,7 @@
|
|||||||
|
|
||||||
//See www.gnu.org/software/bc/manual/bc.html
|
//See www.gnu.org/software/bc/manual/bc.html
|
||||||
//usage:#define bc_trivial_usage
|
//usage:#define bc_trivial_usage
|
||||||
//usage: "[-sqli] FILE..."
|
//usage: "[-sqliw] FILE..."
|
||||||
//usage:
|
//usage:
|
||||||
//usage:#define bc_full_usage "\n"
|
//usage:#define bc_full_usage "\n"
|
||||||
//usage: "\nArbitrary precision calculator"
|
//usage: "\nArbitrary precision calculator"
|
||||||
@ -127,6 +127,7 @@
|
|||||||
//usage: "\n -q Quiet"
|
//usage: "\n -q Quiet"
|
||||||
//usage: "\n -w Warn if extensions are used"
|
//usage: "\n -w Warn if extensions are used"
|
||||||
///////: "\n -v Version"
|
///////: "\n -v Version"
|
||||||
|
//usage: "\n$BC_LINE_LENGTH changes output width"
|
||||||
//usage:
|
//usage:
|
||||||
//usage:#define bc_example_usage
|
//usage:#define bc_example_usage
|
||||||
//usage: "3 + 4.129\n"
|
//usage: "3 + 4.129\n"
|
||||||
@ -734,7 +735,7 @@ static void bc_program_reset(void);
|
|||||||
#define BC_MAX_VARS ((unsigned long) SIZE_MAX - 1)
|
#define BC_MAX_VARS ((unsigned long) SIZE_MAX - 1)
|
||||||
|
|
||||||
struct globals {
|
struct globals {
|
||||||
smallint ttyin;
|
IF_FEATURE_BC_SIGNALS(smallint ttyin;)
|
||||||
smallint eof;
|
smallint eof;
|
||||||
char sbgn;
|
char sbgn;
|
||||||
char send;
|
char send;
|
||||||
@ -761,7 +762,11 @@ struct globals {
|
|||||||
#define G_warn (ENABLE_BC && (option_mask32 & BC_FLAG_W))
|
#define G_warn (ENABLE_BC && (option_mask32 & BC_FLAG_W))
|
||||||
#define G_exreg (ENABLE_DC && (option_mask32 & BC_FLAG_X))
|
#define G_exreg (ENABLE_DC && (option_mask32 & BC_FLAG_X))
|
||||||
#define G_interrupt (ENABLE_FEATURE_BC_SIGNALS ? bb_got_signal : 0)
|
#define G_interrupt (ENABLE_FEATURE_BC_SIGNALS ? bb_got_signal : 0)
|
||||||
|
#if ENABLE_FEATURE_BC_SIGNALS
|
||||||
|
# define G_ttyin G.ttyin
|
||||||
|
#else
|
||||||
|
# define G_ttyin 0
|
||||||
|
#endif
|
||||||
#define IS_BC (ENABLE_BC && (!ENABLE_DC || applet_name[0] == 'b'))
|
#define IS_BC (ENABLE_BC && (!ENABLE_DC || applet_name[0] == 'b'))
|
||||||
|
|
||||||
#if ENABLE_BC
|
#if ENABLE_BC
|
||||||
@ -904,7 +909,7 @@ static void fflush_and_check(void)
|
|||||||
#if ENABLE_FEATURE_CLEAN_UP
|
#if ENABLE_FEATURE_CLEAN_UP
|
||||||
#define quit_or_return_for_exit() \
|
#define quit_or_return_for_exit() \
|
||||||
do { \
|
do { \
|
||||||
G.ttyin = 0; /* do not loop in main loop anymore */ \
|
IF_FEATURE_BC_SIGNALS(G_ttyin = 0;) /* do not loop in main loop anymore */ \
|
||||||
return BC_STATUS_FAILURE; \
|
return BC_STATUS_FAILURE; \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
@ -942,7 +947,7 @@ static NOINLINE int bc_error_fmt(const char *fmt, ...)
|
|||||||
bc_verror_msg(fmt, p);
|
bc_verror_msg(fmt, p);
|
||||||
va_end(p);
|
va_end(p);
|
||||||
|
|
||||||
if (!ENABLE_FEATURE_CLEAN_UP && !G.ttyin)
|
if (!ENABLE_FEATURE_CLEAN_UP && !G_ttyin)
|
||||||
exit(1);
|
exit(1);
|
||||||
return BC_STATUS_FAILURE;
|
return BC_STATUS_FAILURE;
|
||||||
}
|
}
|
||||||
@ -962,7 +967,7 @@ static NOINLINE int bc_posix_error_fmt(const char *fmt, ...)
|
|||||||
// Do we treat non-POSIX constructs as errors?
|
// Do we treat non-POSIX constructs as errors?
|
||||||
if (!(option_mask32 & BC_FLAG_S))
|
if (!(option_mask32 & BC_FLAG_S))
|
||||||
return BC_STATUS_SUCCESS; // no, it's a warning
|
return BC_STATUS_SUCCESS; // no, it's a warning
|
||||||
if (!ENABLE_FEATURE_CLEAN_UP && !G.ttyin)
|
if (!ENABLE_FEATURE_CLEAN_UP && !G_ttyin)
|
||||||
exit(1);
|
exit(1);
|
||||||
return BC_STATUS_FAILURE;
|
return BC_STATUS_FAILURE;
|
||||||
}
|
}
|
||||||
@ -1211,7 +1216,7 @@ static BcStatus bc_read_line(BcVec *vec, const char *prompt)
|
|||||||
, stderr);
|
, stderr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (G.ttyin && !G_posix)
|
if (G_ttyin && !G_posix)
|
||||||
fputs(prompt, stderr);
|
fputs(prompt, stderr);
|
||||||
|
|
||||||
#if ENABLE_FEATURE_BC_SIGNALS
|
#if ENABLE_FEATURE_BC_SIGNALS
|
||||||
@ -7034,7 +7039,7 @@ static BcStatus bc_vm_stdin(void)
|
|||||||
bc_vec_concat(&buffer, buf.v);
|
bc_vec_concat(&buffer, buf.v);
|
||||||
s = bc_vm_process(buffer.v);
|
s = bc_vm_process(buffer.v);
|
||||||
if (s) {
|
if (s) {
|
||||||
if (ENABLE_FEATURE_CLEAN_UP && !G.ttyin) {
|
if (ENABLE_FEATURE_CLEAN_UP && !G_ttyin) {
|
||||||
// Debug config, non-interactive mode:
|
// Debug config, non-interactive mode:
|
||||||
// return all the way back to main.
|
// return all the way back to main.
|
||||||
// Non-debug builds do not come here, they exit.
|
// Non-debug builds do not come here, they exit.
|
||||||
@ -7263,7 +7268,7 @@ static BcStatus bc_vm_exec(void)
|
|||||||
for (i = 0; !s && i < G.files.len; ++i)
|
for (i = 0; !s && i < G.files.len; ++i)
|
||||||
s = bc_vm_file(*((char **) bc_vec_item(&G.files, i)));
|
s = bc_vm_file(*((char **) bc_vec_item(&G.files, i)));
|
||||||
if (s) {
|
if (s) {
|
||||||
if (ENABLE_FEATURE_CLEAN_UP && !G.ttyin) {
|
if (ENABLE_FEATURE_CLEAN_UP && !G_ttyin) {
|
||||||
// Debug config, non-interactive mode:
|
// Debug config, non-interactive mode:
|
||||||
// return all the way back to main.
|
// return all the way back to main.
|
||||||
// Non-debug builds do not come here, they exit.
|
// Non-debug builds do not come here, they exit.
|
||||||
@ -7391,9 +7396,9 @@ static BcStatus bc_vm_run(char **argv, const char *env_len)
|
|||||||
bc_vm_init();
|
bc_vm_init();
|
||||||
bc_args(argv);
|
bc_args(argv);
|
||||||
|
|
||||||
G.ttyin = isatty(0);
|
if (isatty(0)) {
|
||||||
if (G.ttyin) {
|
|
||||||
#if ENABLE_FEATURE_BC_SIGNALS
|
#if ENABLE_FEATURE_BC_SIGNALS
|
||||||
|
G_ttyin = 1;
|
||||||
// With SA_RESTART, most system calls will restart
|
// With SA_RESTART, most system calls will restart
|
||||||
// (IOW: they won't fail with EINTR).
|
// (IOW: they won't fail with EINTR).
|
||||||
// In particular, this means ^C won't cause
|
// In particular, this means ^C won't cause
|
||||||
|
Loading…
Reference in New Issue
Block a user