sh: Send normal output from bind builtin to stdout

PR:		233343
Submitted by:	Yuichiro NAITO (original version)
This commit is contained in:
Jilles Tjoelker 2019-02-19 21:27:30 +00:00
parent 60a92c781d
commit 94b793c497
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=344306
3 changed files with 30 additions and 1 deletions

View file

@ -472,10 +472,31 @@ str_to_event(const char *str, int last)
int
bindcmd(int argc, char **argv)
{
int ret;
FILE *old;
FILE *out;
if (el == NULL)
error("line editing is disabled");
return (el_parse(el, argc, __DECONST(const char **, argv)));
INTOFF;
out = out1fp();
if (out == NULL)
error("Out of space");
el_get(el, EL_GETFP, 1, &old);
el_set(el, EL_SETFP, 1, out);
ret = el_parse(el, argc, __DECONST(const char **, argv));
el_set(el, EL_SETFP, 1, old);
fclose(out);
INTON;
return ret;
}
#else

View file

@ -340,6 +340,12 @@ doformat(struct output *dest, const char *f, va_list ap)
}
}
FILE *
out1fp(void)
{
return fwopen(out1, doformat_wr);
}
/*
* Version of write which resumes after a signal is caught.
*/

View file

@ -39,6 +39,7 @@
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
struct output {
char *nextc;
@ -75,6 +76,7 @@ void out1fmt(const char *, ...) __printflike(1, 2);
void out2fmt_flush(const char *, ...) __printflike(1, 2);
void fmtstr(char *, int, const char *, ...) __printflike(3, 4);
void doformat(struct output *, const char *, va_list) __printflike(2, 0);
FILE *out1fp(void);
int xwrite(int, const char *, int);
#define outc(c, file) ((file)->nextc == (file)->bufend ? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))