* sbr/ambigsw.c: Send print_sw output to stderr. This avoids
authorEric Gillespie <epg@pretzelnet.org>
Thu, 14 Aug 2008 01:50:45 +0000 (01:50 +0000)
committerEric Gillespie <epg@pretzelnet.org>
Thu, 14 Aug 2008 01:50:45 +0000 (01:50 +0000)
strange problems with scan `pick -bogus`, not to mention being
nicer anyway.

* sbr/getans.c, sbr/print_help.c, uip/msh.c: Send print_sw output
to stdout.

* h/prototypes.h, sbr/print_sw.c (print_sw): Add FILE * argument
and send output there rather than to stdout.

* test/tests/pick/test-stderr: Add test that error messages don't
end up going to stdout.

ChangeLog
h/prototypes.h
sbr/ambigsw.c
sbr/getans.c
sbr/print_help.c
sbr/print_sw.c
test/tests/pick/test-stderr [new file with mode: 0644]
uip/msh.c

index f3eb541..6058748 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2008-08-13  Eric Gillespie  <epg@pretzelnet.org>
 
+       * sbr/ambigsw.c: Send print_sw output to stderr.  This avoids
+       strange problems with scan `pick -bogus`, not to mention being
+       nicer anyway.
+
+       * sbr/getans.c, sbr/print_help.c, uip/msh.c: Send print_sw output
+       to stdout.
+
+       * h/prototypes.h, sbr/print_sw.c (print_sw): Add FILE * argument
+       and send output there rather than to stdout.
+
+       * test/tests/pick/test-stderr: Add test that error messages don't
+       end up going to stdout.
+
+2008-08-13  Eric Gillespie  <epg@pretzelnet.org>
+
        * uip/pick.c: Print matching messages immediately, instead of
        waiting until the very end to print anything.
        Ensure valid sequence name as soon as we parse it from command,
index d10346f..1de4067 100644 (file)
@@ -91,7 +91,7 @@ int pidwait (pid_t, int);
 int pidstatus (int, FILE *, char *);
 char *pluspath(char *);
 void print_help (char *, struct swit *, int);
-void print_sw (char *, struct swit *, char *);
+void print_sw (char *, struct swit *, char *, FILE *);
 void print_version (char *);
 void push (void);
 char *pwd (void);
index 53c8da1..42796b3 100644 (file)
@@ -16,5 +16,5 @@ void
 ambigsw (char *arg, struct swit *swp)
 {
     advise (NULL, "-%s ambiguous.  It matches", arg);
-    print_sw (arg, swp, "-");
+    print_sw (arg, swp, "-", stderr);
 }
index 4feb3b9..deb884e 100644 (file)
@@ -50,7 +50,7 @@ getans (char *prompt, struct swit *ansp)
        *cp = '\0';
        if (ansbuf[0] == '?' || cp == ansbuf) {
            printf ("Options are:\n");
-           print_sw (ALL, ansp, "");
+           print_sw (ALL, ansp, "", stdout);
            continue;
        }
        cpp = brkstring (ansbuf, " ", NULL);
index 1774455..a7bc7e5 100644 (file)
@@ -23,7 +23,7 @@ print_help (char *str, struct swit *swp, int print_context)
 
     /* print all the switches */
     printf ("  switches are:\n");
-    print_sw (ALL, swp, "-");
+    print_sw (ALL, swp, "-", stdout);
 
     /*
      * check if we should print any profile entries
index 426724b..bd7b5aa 100644 (file)
@@ -13,7 +13,7 @@
 
 
 void
-print_sw (char *substr, struct swit *swp, char *prefix)
+print_sw (char *substr, struct swit *swp, char *prefix, FILE *fp)
 {
     int len, optno;
     register int i;
@@ -45,10 +45,11 @@ print_sw (char *substr, struct swit *swp, char *prefix)
                    *cp++ = *cp1++;
                *cp++ = ')';
                while ((*cp++ = *cp1++));
-               printf ("  %s%s\n", prefix, buf);
+               fprintf (fp, "  %s%s\n", prefix, buf);
            } else {
                if (!swp->minchars)
-                   printf(optno ? "  %s[no]%s\n" : "  %s%s\n", prefix, swp->sw);
+                   fprintf(fp, optno ? "  %s[no]%s\n" : "  %s%s\n",
+                            prefix, swp->sw);
            }
            if (optno)
                swp++;  /* skip -noswitch */
diff --git a/test/tests/pick/test-stderr b/test/tests/pick/test-stderr
new file mode 100644 (file)
index 0000000..35a64ef
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+######################################################
+#
+# Test that errors are not written to stdout.
+#
+######################################################
+
+expected_err=$MH_TEST_DIR/$$.expected_err
+expected_out=$MH_TEST_DIR/$$.expected_out
+actual_err=$MH_TEST_DIR/$$.actual_err
+actual_out=$MH_TEST_DIR/$$.actual_out
+
+# Error message should go to stderr.
+cat > $expected_err <<EOF
+pick: -a ambiguous.  It matches
+  -and
+  -after date
+EOF
+# Nothing should to go stdout.
+cat /dev/null > $expected_out
+
+pick -a > $actual_out 2> $actual_err
+diff -u $expected_err $actual_err
+diff -u $expected_out $actual_out
index 6d6fbca..d87f92e 100644 (file)
--- a/uip/msh.c
+++ b/uip/msh.c
@@ -1475,7 +1475,7 @@ getargs (char *prompt, struct swit *sw, struct Cmd *cmdp)
            continue;
        if (buffer[0] == '?') {
            printf ("commands:\n");
-           print_sw (ALL, sw, "");
+           print_sw (ALL, sw, "", stdout);
            printf ("type CTRL-D or use ``quit'' to leave %s\n",
                    invo_name);
            continue;
@@ -2142,7 +2142,7 @@ pCMD (char *str, struct swit *sw, struct Cmd *cmdp)
 
            case OK: 
                printf ("commands:\n");
-               print_sw (ALL, sw, "");
+               print_sw (ALL, sw, "", stdout);
                printf ("type ``quit'' to leave %s\n", invo_name);
                fflush (stdout);
                fflush (stderr);