shell: more efficient check for EOL in read
function old new delta shell_builtin_read 1334 1320 -14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
1f41c885fc
commit
cde46f75cb
@ -65,6 +65,7 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
|
||||
int nchars; /* -n NUM */
|
||||
char **pp;
|
||||
char *buffer;
|
||||
char delim;
|
||||
struct termios tty, old_tty;
|
||||
const char *retval;
|
||||
int bufpos; /* need to be able to hold -1 */
|
||||
@ -185,6 +186,7 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
|
||||
end_ms += (unsigned)monotonic_ms();
|
||||
buffer = NULL;
|
||||
bufpos = 0;
|
||||
delim = opt_d ? *opt_d : '\n';
|
||||
do {
|
||||
char c;
|
||||
int timeout;
|
||||
@ -238,10 +240,7 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (opt_d) {
|
||||
if (c == *opt_d)
|
||||
break;
|
||||
} else if (c == '\n')
|
||||
if (c == delim) /* '\n' or -d CHAR */
|
||||
break;
|
||||
|
||||
/* $IFS splitting. NOT done if we run "read"
|
||||
|
@ -34,6 +34,11 @@ enum {
|
||||
BUILTIN_READ_SILENT = 1 << 0,
|
||||
BUILTIN_READ_RAW = 1 << 1,
|
||||
};
|
||||
//TODO? do not provide bashisms if not asked for:
|
||||
//#if !ENABLE_HUSH_BASH_COMPAT && !ENABLE_ASH_BASH_COMPAT
|
||||
//#define shell_builtin_read(setvar,argv,ifs,read_flags,n,p,t,u,d)
|
||||
// shell_builtin_read(setvar,argv,ifs,read_flags)
|
||||
//#endif
|
||||
const char* FAST_FUNC
|
||||
shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
|
||||
char **argv,
|
||||
|
Loading…
Reference in New Issue
Block a user