From owner-svn-soc-all@FreeBSD.ORG Mon Jun 2 22:10:11 2014 Return-Path: Delivered-To: svn-soc-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 7ACCF65A; Mon, 2 Jun 2014 22:10:11 +0000 (UTC) Received: from freebsd.czest.pl (freebsd.czest.pl [212.87.224.105]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 180C52A13; Mon, 2 Jun 2014 22:10:10 +0000 (UTC) Received-SPF: pass (freebsd.czest.pl: domain of wkoszek@freebsd.czest.pl designates 212.87.224.105 as permitted sender) receiver=freebsd.czest.pl; client-ip=212.87.224.105; helo=freebsd.czest.pl; envelope-from=wkoszek@freebsd.czest.pl; x-software=spfmilter 0.97 http://www.acme.com/software/spfmilter/ with libspf-unknown; Received: from freebsd.czest.pl (freebsd.czest.pl [212.87.224.105]) by freebsd.czest.pl (8.14.5/8.14.5) with ESMTP id s52M6HWs005044; Mon, 2 Jun 2014 22:06:17 GMT (envelope-from wkoszek@freebsd.czest.pl) Received: (from wkoszek@localhost) by freebsd.czest.pl (8.14.5/8.14.5/Submit) id s52M6GY4005043; Mon, 2 Jun 2014 22:06:16 GMT (envelope-from wkoszek) Date: Mon, 2 Jun 2014 22:06:16 +0000 From: "Wojciech A. Koszek" To: pedrosouza@freebsd.org Subject: Re: socsvn commit: r268941 - soc2014/pedrosouza/lua_loader/head/sys/boot/lua/src Message-ID: <20140602220616.GC2587@FreeBSD.org> References: <201406020100.s5210uAh043824@socsvn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <201406020100.s5210uAh043824@socsvn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-0.4 required=5.0 tests=RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on freebsd.czest.pl X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.7 (freebsd.czest.pl [212.87.224.105]); Mon, 02 Jun 2014 22:06:23 +0000 (UTC) Cc: svn-soc-all@freebsd.org X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jun 2014 22:10:11 -0000 On Mon, Jun 02, 2014 at 01:00:56AM +0000, pedrosouza@freebsd.org wrote: > Author: pedrosouza > Date: Mon Jun 2 01:00:55 2014 > New Revision: 268941 > URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=268941 > > Log: > Implemented number parsing for lua > > Modified: > soc2014/pedrosouza/lua_loader/head/sys/boot/lua/src/lstd.c > Pedro, Why was this necessary? Which part of Lua requires that? If it's strictly needed, was the strtod() implementation present in libstand? I think the preference would be to use whatever was in libstand. Thanks, Wojciech > Modified: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/src/lstd.c > ============================================================================== > --- soc2014/pedrosouza/lua_loader/head/sys/boot/lua/src/lstd.c Mon Jun 2 00:21:42 2014 (r268940) > +++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/src/lstd.c Mon Jun 2 01:00:55 2014 (r268941) > @@ -49,6 +49,96 @@ > double > strtod(const char *string, char **endPtr) > { > - printf("strtod not implemented!\n"); > - return 0.; > + int sign = 0; > + int exp_sign = 0; > + int has_num = 0; > + int has_frac = 0; > + int has_exp = 0; > + unsigned long long num = 0; > + unsigned long long exp = 0; > + > + double frac = 0; > + double fm = 0.1; > + double exp_m = 1; > + double ret = 0; > + > + const char *ptr = string; > + > + while (isspace(*ptr)) ++ptr; > + > + if (*ptr == '-') > + { > + sign = 1; > + ++ptr; > + } else if (*ptr == '+') > + ++ptr; > + > + while (isdigit(*ptr)) > + { > + num *= 10; > + num += *ptr - '0'; > + ++ptr; > + ++has_num; > + } > + > + if (*ptr == '.') > + { > + ++ptr; > + while (isdigit(*ptr)) > + { > + frac += (double)(*ptr - '0') * fm; > + fm *= 0.1; > + ++ptr; > + ++has_frac; > + } > + } > + > + if (has_frac == 0 && has_num == 0) > + { > + if (*endPtr) > + *endPtr = (char*)string; > + return 0.; > + } > + > + ret = (double)num; > + ret += frac; > + > + if (*ptr == 'e' || *ptr == 'E') > + { > + if (*endPtr) > + *endPtr = (char*)ptr; > + ++ptr; > + if (*ptr == '-') > + { > + exp_sign = 1; > + ++ptr; > + } else if (*ptr == '+') > + ++ptr; > + > + while (isdigit(*ptr)) > + { > + exp *= 10; > + exp += *ptr - '0'; > + ++ptr; > + ++has_exp; > + } > + if (has_exp == 0) > + return ret; > + } > + > + if (*endPtr) > + *endPtr = (char*)ptr; > + > + if (has_exp) > + { > + while (exp--) > + exp_m *= 10; > + if (exp_sign) > + exp_m = 1./exp_m; > + > + } > + if (sign) > + ret = -ret; > + > + return ret * exp_m; > } > _______________________________________________ > svn-soc-all@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-soc-all > To unsubscribe, send any mail to "svn-soc-all-unsubscribe@freebsd.org" -- Wojciech A. Koszek wkoszek@FreeBSD.czest.pl http://FreeBSD.czest.pl/~wkoszek/