Author: jilles
Date: Tue Dec 21 20:47:06 2010
New Revision: 216622
URL: http://svn.freebsd.org/changeset/base/216622

Log:
  sh: Add a function to print warnings (with command name and newline).
  This is like error() but without raising an exception.
  It is particularly useful as a replacement for the warnx macro in
  bltin/bltin.h.

Modified:
  head/bin/sh/alias.c
  head/bin/sh/bltin/bltin.h
  head/bin/sh/cd.c
  head/bin/sh/error.c
  head/bin/sh/error.h
  head/bin/sh/trap.c

Modified: head/bin/sh/alias.c
==============================================================================
--- head/bin/sh/alias.c Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/alias.c Tue Dec 21 20:47:06 2010        (r216622)
@@ -246,7 +246,7 @@ aliascmd(int argc, char **argv)
        while ((n = *++argv) != NULL) {
                if ((v = strchr(n+1, '=')) == NULL) /* n+1: funny ksh stuff */
                        if ((ap = lookupalias(n, 0)) == NULL) {
-                               outfmt(out2, "alias: %s not found\n", n);
+                               warning("%s not found", n);
                                ret = 1;
                        } else
                                printalias(ap);

Modified: head/bin/sh/bltin/bltin.h
==============================================================================
--- head/bin/sh/bltin/bltin.h   Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/bltin/bltin.h   Tue Dec 21 20:47:06 2010        (r216622)
@@ -57,11 +57,7 @@
 #define fwrite(ptr, size, nmemb, file) outbin(ptr, (size) * (nmemb), file)
 #define fflush flushout
 #define INITARGS(argv)
-#define warnx(...) do {                                        \
-       out2fmt_flush("%s: ", commandname);             \
-       out2fmt_flush(__VA_ARGS__);                     \
-       out2fmt_flush("\n");                            \
-       } while (0)
+#define warnx warning
 #define errx(exitstatus, ...) error(__VA_ARGS__)
 
 #else

Modified: head/bin/sh/cd.c
==============================================================================
--- head/bin/sh/cd.c    Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/cd.c    Tue Dec 21 20:47:06 2010        (r216622)
@@ -224,7 +224,7 @@ cdphysical(char *dest)
        }
        p = findcwd(NULL);
        if (p == NULL)
-               out2fmt_flush("cd: warning: failed to get name of current 
directory\n");
+               warning("warning: failed to get name of current directory");
        updatepwd(p);
        INTON;
        return (0);

Modified: head/bin/sh/error.c
==============================================================================
--- head/bin/sh/error.c Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/error.c Tue Dec 21 20:47:06 2010        (r216622)
@@ -134,6 +134,26 @@ onint(void)
 }
 
 
+static void
+vwarning(const char *msg, va_list ap)
+{
+       if (commandname)
+               outfmt(out2, "%s: ", commandname);
+       doformat(out2, msg, ap);
+       out2fmt_flush("\n");
+}
+
+
+void
+warning(const char *msg, ...)
+{
+       va_list ap;
+       va_start(ap, msg);
+       vwarning(msg, ap);
+       va_end(ap);
+}
+
+
 /*
  * Exverror is called to raise the error exception.  If the first argument
  * is not NULL then error prints an error message using printf style
@@ -158,12 +178,8 @@ exverror(int cond, const char *msg, va_l
        else
                TRACE(("exverror(%d, NULL) pid=%d\n", cond, getpid()));
 #endif
-       if (msg) {
-               if (commandname)
-                       outfmt(out2, "%s: ", commandname);
-               doformat(out2, msg, ap);
-               out2c('\n');
-       }
+       if (msg)
+               vwarning(msg, ap);
        flushall();
        exraise(cond);
 }

Modified: head/bin/sh/error.h
==============================================================================
--- head/bin/sh/error.h Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/error.h Tue Dec 21 20:47:06 2010        (r216622)
@@ -80,6 +80,7 @@ extern volatile sig_atomic_t intpending;
 
 void exraise(int) __dead2;
 void onint(void);
+void warning(const char *, ...) __printflike(1, 2);
 void error(const char *, ...) __printf0like(1, 2) __dead2;
 void exerror(int, const char *, ...) __printf0like(2, 3) __dead2;
 

Modified: head/bin/sh/trap.c
==============================================================================
--- head/bin/sh/trap.c  Tue Dec 21 19:30:24 2010        (r216621)
+++ head/bin/sh/trap.c  Tue Dec 21 20:47:06 2010        (r216622)
@@ -185,7 +185,7 @@ trapcmd(int argc, char **argv)
        }
        while (*argv) {
                if ((signo = sigstring_to_signum(*argv)) == -1) {
-                       out2fmt_flush("trap: bad signal %s\n", *argv);
+                       warning("bad signal %s", *argv);
                        errors = 1;
                }
                INTOFF;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to