Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/printf Avoid printing error messages twice when an i...



details:   https://anonhg.NetBSD.org/src/rev/cbb965bf70cd
branches:  trunk
changeset: 323835:cbb965bf70cd
user:      kre <kre%NetBSD.org@localhost>
date:      Tue Jul 03 01:56:39 2018 +0000

description:
Avoid printing error messages twice when an invalid
escape sequence (\ sequence) is present in an arg to a %b
conversion.

diffstat:

 usr.bin/printf/printf.c |  26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diffs (103 lines):

diff -r af40eb22e74d -r cbb965bf70cd usr.bin/printf/printf.c
--- a/usr.bin/printf/printf.c   Tue Jul 03 01:54:42 2018 +0000
+++ b/usr.bin/printf/printf.c   Tue Jul 03 01:56:39 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: printf.c,v 1.38 2018/07/03 01:54:42 kre Exp $  */
+/*     $NetBSD: printf.c,v 1.39 2018/07/03 01:56:39 kre Exp $  */
 
 /*
  * Copyright (c) 1989, 1993
@@ -41,7 +41,7 @@
 #if 0
 static char sccsid[] = "@(#)printf.c   8.2 (Berkeley) 3/22/95";
 #else
-__RCSID("$NetBSD: printf.c,v 1.38 2018/07/03 01:54:42 kre Exp $");
+__RCSID("$NetBSD: printf.c,v 1.39 2018/07/03 01:56:39 kre Exp $");
 #endif
 #endif /* not lint */
 
@@ -65,8 +65,8 @@
 #define ESCAPE 033
 #endif
 
-static void     conv_escape_str(char *, void (*)(int));
-static char    *conv_escape(char *, char *);
+static void     conv_escape_str(char *, void (*)(int), int);
+static char    *conv_escape(char *, char *, int);
 static char    *conv_expand(const char *);
 static char     getchr(void);
 static double   getdouble(void);
@@ -170,7 +170,7 @@
                for (fmt = format; (ch = *fmt++) != '\0';) {
                        if (ch == '\\') {
                                char c_ch;
-                               fmt = conv_escape(fmt, &c_ch);
+                               fmt = conv_escape(fmt, &c_ch, 0);
                                putchar(c_ch);
                                continue;
                        }
@@ -241,7 +241,7 @@
                                t = NULL;
                                /* Count number of bytes we want to output */
                                b_length = 0;
-                               conv_escape_str(cp, b_count);
+                               conv_escape_str(cp, b_count, 0);
                                t = malloc(b_length + 1);
                                if (t == NULL)
                                        goto out;
@@ -254,7 +254,7 @@
                                        goto out;
                                b_fmt = a;
                                /* Output leading spaces and data bytes */
-                               conv_escape_str(cp, b_output);
+                               conv_escape_str(cp, b_output, 1);
                                /* Add any trailing spaces */
                                printf("%s", b_fmt);
                                break;
@@ -357,7 +357,7 @@
  *     Halts processing string if a \c escape is encountered.
  */
 static void
-conv_escape_str(char *str, void (*do_putchar)(int))
+conv_escape_str(char *str, void (*do_putchar)(int), int quiet)
 {
        int value;
        int ch;
@@ -415,7 +415,7 @@
                }
 
                /* Finally test for sequences valid in the format string */
-               str = conv_escape(str - 1, &c);
+               str = conv_escape(str - 1, &c, quiet);
                do_putchar(c);
        }
 }
@@ -424,7 +424,7 @@
  * Print "standard" escape characters 
  */
 static char *
-conv_escape(char *str, char *conv_ch)
+conv_escape(char *str, char *conv_ch, int quiet)
 {
        char value;
        char ch;
@@ -434,7 +434,8 @@
 
        switch (ch) {
        case '\0':
-               warnx("incomplete escape sequence");
+               if (!quiet)
+                       warnx("incomplete escape sequence");
                rval = 1;
                value = '\\';
                --str;
@@ -477,7 +478,8 @@
        case 'v':       value = '\v';   break;  /* vertical-tab */
 
        default:
-               warnx("unknown escape sequence `\\%c'", ch);
+               if (!quiet)
+                       warnx("unknown escape sequence `\\%c'", ch);
                rval = 1;
                value = ch;
                break;



Home | Main Index | Thread Index | Old Index