The following reply was made to PR bin/159227; it has been noted by GNATS.

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: bin/159227: commit references a PR
Date: Thu, 15 Mar 2012 01:43:53 +0000 (UTC)

 Author: kevlo
 Date: Thu Mar 15 01:43:44 2012
 New Revision: 232994
 URL: http://svn.freebsd.org/changeset/base/232994
 
 Log:
   - Fix an erroneous invocation of the editline.
   - Fix wrong scaling in the bc.library.
   - Let length(0.000) conform to what gnu bc does.
   
   PR:  bin/159227
   Submitted by:        AIDA Shinra <shinra at j10n dot org>
 
 Modified:
   head/usr.bin/bc/bc.library
   head/usr.bin/bc/bc.y
   head/usr.bin/dc/bcode.c
 
 Modified: head/usr.bin/bc/bc.library
 ==============================================================================
 --- head/usr.bin/bc/bc.library Wed Mar 14 23:55:25 2012        (r232993)
 +++ head/usr.bin/bc/bc.library Thu Mar 15 01:43:44 2012        (r232994)
 @@ -46,7 +46,9 @@ define e(x) {
        r = ibase
        ibase = A
        t = scale
 -      scale = t + .434*x + 1
 +      scale = 0
 +      if (x > 0) scale = (0.435*x)/1
 +      scale = scale + t + 1
  
        w = 0
        if (x < 0) {
 @@ -95,26 +97,33 @@ define l(x) {
        t = scale
  
        f = 1
 -      scale = scale + scale(x) - length(x) + 1
 -      s = scale
 +      if (x < 1) {
 +              s = scale(x)
 +      } else {
 +              s = length(x) - scale(x)
 +      }
 +      scale = 0
 +      a = (2.31*s)/1 /* estimated integer part of the answer */
 +      s = t + length(a) + 2 /* estimated length of the answer */
        while (x > 2) {
 -              s = s + (length(x) - scale(x))/2 + 1
 -              if (s > 0) scale = s
 +              scale=0
 +              scale = (length(x) + scale(x))/2 + 1
 +              if (scale < s) scale = s
                x = sqrt(x)
                f = f*2
        }
        while (x < .5) {
 -              s = s + (length(x) - scale(x))/2 + 1
 -              if (s > 0) scale = s
 +              scale = 0
 +              scale = scale(x)/2 + 1
 +              if (scale < s) scale = s
                x = sqrt(x)
                f = f*2
        }
  
 -      scale = t + length(f) - scale(f) + 1
 +      scale = t + length(f) + length(t + length(f)) + 1
        u = (x - 1)/(x + 1)
 -
 -      scale = scale + 1.1*length(t) - 1.1*scale(t)
        s = u*u
 +      scale = t + 2
        b = 2*f
        c = b
        d = 1
 @@ -261,3 +270,4 @@ define j(n,x) {
                e = g
        }
  }
 +/* vim: set filetype=bc shiftwidth=8 noexpandtab: */
 
 Modified: head/usr.bin/bc/bc.y
 ==============================================================================
 --- head/usr.bin/bc/bc.y       Wed Mar 14 23:55:25 2012        (r232993)
 +++ head/usr.bin/bc/bc.y       Thu Mar 15 01:43:44 2012        (r232994)
 @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
  #include <stdbool.h>
  #include <string.h>
  #include <unistd.h>
 +#include <stdlib.h>
  
  #include "extern.h"
  #include "pathnames.h"
 @@ -1093,7 +1094,7 @@ sigchld(int signo)
        switch (signo) {
        default:
                for (;;) {
 -                      pid = waitpid(dc, &status, WCONTINUED);
 +                      pid = waitpid(dc, &status, WUNTRACED);
                        if (pid == -1) {
                                if (errno == EINTR)
                                        continue;
 @@ -1181,16 +1182,6 @@ main(int argc, char *argv[])
                        dup(p[1]);
                        close(p[0]);
                        close(p[1]);
 -                      if (interactive) {
 -                              el = el_init("bc", stdin, stderr, stderr);
 -                              hist = history_init();
 -                              history(hist, &he, H_SETSIZE, 100);
 -                              el_set(el, EL_HIST, history, hist);
 -                              el_set(el, EL_EDITOR, "emacs");
 -                              el_set(el, EL_SIGNAL, 1);
 -                              el_set(el, EL_PROMPT, dummy_prompt);
 -                              el_source(el, NULL);
 -                      }
                } else {
                        close(STDIN_FILENO);
                        dup(p[0]);
 @@ -1200,6 +1191,16 @@ main(int argc, char *argv[])
                        err(1, "cannot find dc");
                }
        }
 +      if (interactive) {
 +              el = el_init("bc", stdin, stderr, stderr);
 +              hist = history_init();
 +              history(hist, &he, H_SETSIZE, 100);
 +              el_set(el, EL_HIST, history, hist);
 +              el_set(el, EL_EDITOR, "emacs");
 +              el_set(el, EL_SIGNAL, 1);
 +              el_set(el, EL_PROMPT, dummy_prompt);
 +              el_source(el, NULL);
 +      }
        yywrap();
        return (yyparse());
  }
 
 Modified: head/usr.bin/dc/bcode.c
 ==============================================================================
 --- head/usr.bin/dc/bcode.c    Wed Mar 14 23:55:25 2012        (r232993)
 +++ head/usr.bin/dc/bcode.c    Thu Mar 15 01:43:44 2012        (r232994)
 @@ -693,7 +693,7 @@ count_digits(const struct number *n)
        u_int i;
  
        if (BN_is_zero(n->number))
 -              return (1);
 +              return (n->scale ? n->scale : 1);
  
        int_part = new_number();
        fract_part = new_number();
 _______________________________________________
 svn-src-...@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"
 
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to