bin/187728: bc(1) should print error message to stderr
Makoto Kishimoto
ksmakoto at dd.iij4u.or.jp
Wed Mar 19 09:50:00 UTC 2014
>Number: 187728
>Category: bin
>Synopsis: bc(1) should print error message to stderr
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Mar 19 09:50:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator: Makoto Kishimoto
>Release: 9.2-STABLE
>Organization:
N/A
>Environment:
FreeBSD norikura.localdomain 9.2-STABLE FreeBSD 9.2-STABLE #1 r257235: Mon Oct 28 19:56:00 JST 2013 ksmakoto at norikura.localdomain:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
bc(1) should prints error message to stderr. For example,
UNIX (Heirloom) bc prints to stderr
$ echo ':' | /usr/local/heirloom/usr/5bin/bc > /dev/null
syntax error on line 1, teletype
$ echo ':' | /usr/local/heirloom/usr/5bin/bc 2> /dev/null
$
GNU bc prints to stderr
$ echo ':' | /usr/local/bin/bc > /dev/null
(standard_in) 1: illegal character: :
$ echo ':' | /usr/local/bin/bc 2> /dev/null
$
FreeBSD (OpenBSD) bc prints to stdout
$ echo ':' | /usr/bin/bc > /dev/null
$ echo ':' | /usr/bin/bc 2> /dev/null
bc: stdin:1: illegal character: : unexpected
$
>How-To-Repeat:
see Full Description
>Fix:
see attached patch
Patch attached with submission follows:
Index: bc.y
===================================================================
--- bc.y (revision 263333)
+++ bc.y (working copy)
@@ -969,25 +969,19 @@
int n;
if (yyin != NULL && feof(yyin))
- n = asprintf(&str, "%s: %s:%d: %s: unexpected EOF",
+ n = asprintf(&str, "%s: %s:%d: %s: unexpected EOF\n",
__progname, filename, lineno, s);
else if (isspace(yytext[0]) || !isprint(yytext[0]))
n = asprintf(&str,
- "%s: %s:%d: %s: ascii char 0x%02x unexpected",
+ "%s: %s:%d: %s: ascii char 0x%02x unexpected\n",
__progname, filename, lineno, s, yytext[0]);
else
- n = asprintf(&str, "%s: %s:%d: %s: %s unexpected",
+ n = asprintf(&str, "%s: %s:%d: %s: %s unexpected\n",
__progname, filename, lineno, s, yytext);
if (n == -1)
err(1, NULL);
- fputs("c[", stdout);
- for (p = str; *p != '\0'; p++) {
- if (*p == '[' || *p == ']' || *p =='\\')
- putchar('\\');
- putchar(*p);
- }
- fputs("]pc\n", stdout);
+ fputs(str, stderr);
free(str);
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list