Module Name: src Committed By: joerg Date: Sat Apr 27 17:19:47 UTC 2013
Modified Files: src/lib/libm/src: s_scalbln.c Log Message: Casting is a not a valid way to check for overflow, so be explicit and use the limit macros. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/libm/src/s_scalbln.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libm/src/s_scalbln.c diff -u src/lib/libm/src/s_scalbln.c:1.3 src/lib/libm/src/s_scalbln.c:1.4 --- src/lib/libm/src/s_scalbln.c:1.3 Sat Apr 27 16:43:13 2013 +++ src/lib/libm/src/s_scalbln.c Sat Apr 27 17:19:47 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: s_scalbln.c,v 1.3 2013/04/27 16:43:13 joerg Exp $ */ +/* $NetBSD: s_scalbln.c,v 1.4 2013/04/27 17:19:47 joerg Exp $ */ /*- * Copyright (c) 2004 David Schultz <d...@freebsd.org> @@ -30,7 +30,7 @@ #if 0 __FBSDID("$FreeBSD: src/lib/msun/src/s_scalbln.c,v 1.2 2005/03/07 04:57:50 das Exp $"); #else -__RCSID("$NetBSD: s_scalbln.c,v 1.3 2013/04/27 16:43:13 joerg Exp $"); +__RCSID("$NetBSD: s_scalbln.c,v 1.4 2013/04/27 17:19:47 joerg Exp $"); #endif #include "namespace.h" @@ -42,32 +42,24 @@ __weak_alias(scalbln, _scalbln) double scalbln (double x, long n) { - int in; - in = (int)n; - if (in != n) { - if (n > 0) - in = INT_MAX; - else - in = INT_MIN; - } - return (scalbn(x, in)); + if (n > INT_MAX) + n = INT_MAX; + else if (n < INT_MIN) + n = INT_MIN; + return (scalbn(x, n)); } __weak_alias(scalblnf, _scalblnf) float scalblnf (float x, long n) { - int in; - in = (int)n; - if (in != n) { - if (n > 0) - in = INT_MAX; - else - in = INT_MIN; - } - return (scalbnf(x, in)); + if (n > INT_MAX) + n = INT_MAX; + else if (n < INT_MIN) + n = INT_MIN; + return (scalbnf(x, n)); } #ifndef _LP64 @@ -76,15 +68,10 @@ __weak_alias(scalblnl, _scalblnl) long double scalblnl (long double x, long n) { - int in; - - in = (int)n; - if (in != n) { - if (n > 0) - in = INT_MAX; - else - in = INT_MIN; - } - return (scalbnl(x, (int)n)); + if (n > INT_MAX) + n = INT_MAX; + else if (n < INT_MIN) + n = INT_MIN; + return (scalbnl(x, n)); } #endif