diff options
author | cvs2git <rtems-devel@rtems.org> | 2011-02-01 05:48:31 +0000 |
---|---|---|
committer | cvs2git <rtems-devel@rtems.org> | 2011-02-01 05:48:31 +0000 |
commit | cc2bcea47c1d540b30f76f09845dd1d9ff880d1a (patch) | |
tree | f25c77589ce232d5dc02805c7acf70721560284e /cpukit | |
parent | f9e6b07ebf5f538fea7bc526ad7f504e30de9a3d (diff) |
This commit was manufactured by cvs2svn to create branch
'rtems-4-10-branch'.
Cherrypick from master 2011-02-01 05:48:30 UTC Ralf Corsepius <ralf.corsepius@rtems.org> '2011-02-01 Ralf Corsepius <ralf.corsepius@rtems.org>':
cpukit/libmisc/stringto/stringtolongdouble.c
testsuites/libtests/POSIX/htonl.c
testsuites/libtests/math/.cvsignore
testsuites/libtests/math/Makefile.am
testsuites/libtests/math/domath.c
testsuites/libtests/math/domath.in
testsuites/libtests/math/domathf.c
testsuites/libtests/math/domathl.c
testsuites/libtests/math/init.c
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/libmisc/stringto/stringtolongdouble.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/cpukit/libmisc/stringto/stringtolongdouble.c b/cpukit/libmisc/stringto/stringtolongdouble.c new file mode 100644 index 0000000000..776f5e183b --- /dev/null +++ b/cpukit/libmisc/stringto/stringtolongdouble.c @@ -0,0 +1,58 @@ +/* + * COPYRIGHT (c) 2009. + * On-Line Applications Research Corporation (OAR). + * + * Copyright (c) 2011 Ralf Corsépius, Ulm, Germany. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <errno.h> +#include <stdlib.h> +#include <math.h> + +#include <rtems/stringto.h> + +/* + * Instantiate an error checking wrapper for strtod (double) + */ + +rtems_status_code rtems_string_to_long_double ( + const char *s, + long double *n, + char **endptr +) +{ + long double result; + char *end; + + if ( !n ) + return RTEMS_INVALID_ADDRESS; + + errno = 0; + *n = 0; + + result = strtold( s, &end ); + + if ( endptr ) + *endptr = end; + + if ( end == s ) + return RTEMS_NOT_DEFINED; + + if ( ( errno == ERANGE ) && + (( result == 0 ) || ( result == HUGE_VALL ) || ( result == -HUGE_VALL ))) + return RTEMS_INVALID_NUMBER; + + *n = result; + + return RTEMS_SUCCESSFUL; +} |