Author: jilles
Date: Sat Nov 21 14:28:32 2009
New Revision: 199629
URL: http://svn.freebsd.org/changeset/base/199629

Log:
  sh: Some changes to stderr flushing:
  * increase buffer size from 100 to 256 bytes
  * remove implied flush from out2str(), in particular this avoids unnecessary
    flushing in the middle of a -x tracing line
  * rename dprintf() to out2fmt_flush(), make it flush out2 and use this
    function in various places where flushing is desired after an error
    message

Modified:
  head/bin/sh/histedit.c
  head/bin/sh/input.c
  head/bin/sh/jobs.c
  head/bin/sh/main.c
  head/bin/sh/output.c
  head/bin/sh/output.h
  head/bin/sh/parser.c

Modified: head/bin/sh/histedit.c
==============================================================================
--- head/bin/sh/histedit.c      Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/histedit.c      Sat Nov 21 14:28:32 2009        (r199629)
@@ -92,7 +92,7 @@ histedit(void)
                        if (hist != NULL)
                                sethistsize(histsizeval());
                        else
-                               out2str("sh: can't initialize history\n");
+                               out2fmt_flush("sh: can't initialize history\n");
                }
                if (editing && !el && isatty(0)) { /* && isatty(2) ??? */
                        /*
@@ -114,7 +114,7 @@ histedit(void)
                                el_set(el, EL_PROMPT, getprompt);
                        } else {
 bad:
-                               out2str("sh: can't initialize editing\n");
+                               out2fmt_flush("sh: can't initialize editing\n");
                        }
                        INTON;
                } else if (!editing && el) {
@@ -336,6 +336,7 @@ histcmd(int argc, char **argv)
                        if (sflg) {
                                if (displayhist) {
                                        out2str(s);
+                                       flushout(out2);
                                }
                                evalstring(s, 0);
                                if (displayhist && hist) {

Modified: head/bin/sh/input.c
==============================================================================
--- head/bin/sh/input.c Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/input.c Sat Nov 21 14:28:32 2009        (r199629)
@@ -215,7 +215,7 @@ retry:
                                 if (flags >= 0 && flags & O_NONBLOCK) {
                                         flags &=~ O_NONBLOCK;
                                         if (fcntl(0, F_SETFL, flags) >= 0) {
-                                               out2str("sh: turning off NDELAY 
mode\n");
+                                               out2fmt_flush("sh: turning off 
NDELAY mode\n");
                                                 goto retry;
                                         }
                                 }
@@ -359,7 +359,7 @@ pushstring(char *s, int len, void *ap)
        struct strpush *sp;
 
        INTOFF;
-/*dprintf("*** calling pushstring: %s, %d\n", s, len);*/
+/*out2fmt_flush("*** calling pushstring: %s, %d\n", s, len);*/
        if (parsefile->strpush) {
                sp = ckmalloc(sizeof (struct strpush));
                sp->prev = parsefile->strpush;
@@ -386,7 +386,7 @@ popstring(void)
        parsenextc = sp->prevstring;
        parsenleft = sp->prevnleft;
        parselleft = sp->prevlleft;
-/*dprintf("*** calling popstring: restoring to '%s'\n", parsenextc);*/
+/*out2fmt_flush("*** calling popstring: restoring to '%s'\n", parsenextc);*/
        if (sp->ap)
                sp->ap->flag &= ~ALIASINUSE;
        parsefile->strpush = sp->prev;

Modified: head/bin/sh/jobs.c
==============================================================================
--- head/bin/sh/jobs.c  Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/jobs.c  Sat Nov 21 14:28:32 2009        (r199629)
@@ -146,7 +146,7 @@ setjobctl(int on)
                do { /* while we are in the background */
                        initialpgrp = tcgetpgrp(ttyfd);
                        if (initialpgrp < 0) {
-out:                           out2str("sh: can't access tty; job control 
turned off\n");
+out:                           out2fmt_flush("sh: can't access tty; job 
control turned off\n");
                                mflag = 0;
                                return;
                        }
@@ -1046,7 +1046,7 @@ stoppedjobs(void)
                if (jp->used == 0)
                        continue;
                if (jp->state == JOBSTOPPED) {
-                       out2str("You have stopped jobs.\n");
+                       out2fmt_flush("You have stopped jobs.\n");
                        job_warning = 2;
                        return (1);
                }

Modified: head/bin/sh/main.c
==============================================================================
--- head/bin/sh/main.c  Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/main.c  Sat Nov 21 14:28:32 2009        (r199629)
@@ -154,7 +154,7 @@ main(int argc, char *argv[])
        setstackmark(&smark);
        procargs(argc, argv);
        if (getpwd() == NULL && iflag)
-               out2str("sh: cannot determine working directory\n");
+               out2fmt_flush("sh: cannot determine working directory\n");
        if (getpwd() != NULL)
                setvar ("PWD", getpwd(), VEXPORT);
        if (argv[0] && argv[0][0] == '-') {
@@ -223,7 +223,7 @@ cmdloop(int top)
                        if (!stoppedjobs()) {
                                if (!Iflag)
                                        break;
-                               out2str("\nUse \"exit\" to leave shell.\n");
+                               out2fmt_flush("\nUse \"exit\" to leave 
shell.\n");
                        }
                        numeof++;
                } else if (n != NULL && nflag == 0) {

Modified: head/bin/sh/output.c
==============================================================================
--- head/bin/sh/output.c        Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/output.c        Sat Nov 21 14:28:32 2009        (r199629)
@@ -71,7 +71,7 @@ __FBSDID("$FreeBSD$");
 static int doformat_wr(void *, const char *, int);
 
 struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0};
-struct output errout = {NULL, 0, NULL, 100, 2, 0};
+struct output errout = {NULL, 0, NULL, 256, 2, 0};
 struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0};
 struct output *out1 = &output;
 struct output *out2 = &errout;
@@ -124,8 +124,6 @@ outstr(const char *p, struct output *fil
 {
        while (*p)
                outc(*p++, file);
-       if (file == out2)
-               flushout(file);
 }
 
 /* Like outstr(), but quote for re-input into the shell. */
@@ -255,7 +253,7 @@ out1fmt(const char *fmt, ...)
 }
 
 void
-dprintf(const char *fmt, ...)
+out2fmt_flush(const char *fmt, ...)
 {
        va_list ap;
 

Modified: head/bin/sh/output.h
==============================================================================
--- head/bin/sh/output.h        Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/output.h        Sat Nov 21 14:28:32 2009        (r199629)
@@ -65,7 +65,7 @@ void flushout(struct output *);
 void freestdout(void);
 void outfmt(struct output *, const char *, ...) __printflike(2, 3);
 void out1fmt(const char *, ...) __printflike(1, 2);
-void dprintf(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);
 int xwrite(int, char *, int);

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c        Sat Nov 21 14:12:51 2009        (r199628)
+++ head/bin/sh/parser.c        Sat Nov 21 14:28:32 2009        (r199629)
@@ -1563,7 +1563,10 @@ setprompt(int which)
 #ifndef NO_HISTORY
        if (!el)
 #endif
+       {
                out2str(getprompt(NULL));
+               flushout(out2);
+       }
 }
 
 /*
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to