On Sun, Jul 17, 2016 at 12:51:03PM -0300, Henrique N. Lengler wrote:
> Hi,
>
> I'm new on bc, I'm writing a library with some math functions I intend to use
> on calculations.
> I would like to use long names for variables and functions on my library
> but also use functions from the main math library, which I do by calling bc
> with '-l' flag. But once I start bc with '-l' I can't use any long name, why?
>
> Is there a way to change this behaviour?
> Why it works like this?
>
> Regards,
>
> Henrique N. Lengler
This is a bug introduced by not execing dc anymore, but calling the
dc code as a function.
In that case getopt is called a second time for a new set of
parameters and it has to be reinitialized,
The code below should fix it. Recompile both dc and bc after patching.
-Otto
Index: dc.c
===================================================================
RCS file: /cvs/src/usr.bin/dc/dc.c,v
retrieving revision 1.17
diff -u -p -r1.17 dc.c
--- dc.c 3 Nov 2015 04:58:58 -0000 1.17
+++ dc.c 17 Jul 2016 17:20:19 -0000
@@ -50,6 +50,8 @@ dc_main(int argc, char *argv[])
if ((buf = strdup("")) == NULL)
err(1, NULL);
/* accept and ignore a single dash to be 4.4BSD dc(1) compatible */
+ optind = 1;
+ optreset = 1;
while ((ch = getopt(argc, argv, "e:x-")) != -1) {
switch (ch) {
case 'e':