Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Mar 2014 09:49:40 GMT
From:      Makoto Kishimoto <ksmakoto@dd.iij4u.or.jp>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/187728: bc(1) should print error message to stderr
Message-ID:  <201403190949.s2J9neLQ091802@cgiserv.freebsd.org>
Resent-Message-ID: <201403190950.s2J9o0QI037329@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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@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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403190949.s2J9neLQ091802>