/* Copyright (C) 2014-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk3madsi.ctr */ /** @file dk3madsi.c The dk3madsi module. */ #line 71 "dk3madsi.ctr" #include "dk3ma.h" #if DK3_HAVE_STDLIB_H #include #endif #if DK3_HAVE_UNISTD_H #include #endif #if DK3_HAVE_STRING_H #include #endif #if DK3_HAVE_ERRNO_H #include #endif #line 89 "dk3madsi.ctr" int dk3ma_d_from_c8_string(double *rp, char const *src, int *ec) { #if DK3_HAVE_STRTOD char *endptr = NULL; double val = 0.0; int back = 0; #line 100 "dk3madsi.ctr" if ((NULL != rp) && (NULL != src)) { errno = 0; val = strtod(src, &endptr); if (endptr) { if ('\0' == *endptr) { back = 1; } else { if (endptr != src) { back = 1; } if (NULL != ec) { *ec = DK3_ERROR_SYNTAX; } } } else { back = 1; } if (0 != back) { if (ERANGE == errno) { if ((HUGE_VAL == val) || (-HUGE_VAL == val) || (0.0 == val)) { back = 0; if (NULL != ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } } } } *rp = val; } else { if (NULL != ec) { *ec = DK3_ERROR_INVALID_ARGS; } } #line 127 "dk3madsi.ctr" return back; #else double val = 0.0; int back = 0; #line 132 "dk3madsi.ctr" if ((NULL != rp) && (NULL != src)) { if (1 == sscanf(src, "%lf", &val)) { *rp = val; back = 1; } else { if (NULL != ec) { *ec = DK3_ERROR_SYNTAX; } } } else { if (NULL != ec) { *ec = DK3_ERROR_INVALID_ARGS; } } #line 142 "dk3madsi.ctr" return back; #endif } int dk3ma_d_from_string(double *rp, dkChar const *src, int *ec) { #if DK3_CHAR_SIZE > 1 #if DK3_HAVE_WCSTOD dkChar *endptr = NULL; double val; int back = 0; #line 157 "dk3madsi.ctr" if ((NULL != rp) && (NULL != src)) { errno = 0; val = wcstod(src, &endptr); if (endptr) { if ('\0' == *endptr) { back = 1; } else { if (endptr != src) { back = 1; } if (NULL != ec) { *ec = DK3_ERROR_SYNTAX; } } } else { back = 1; } if (0 != back) { if (ERANGE == errno) { if ((HUGE_VAL == val) || (-HUGE_VAL == val) || (0.0 == val)) { back = 0; if (NULL != ec) { *ec = DK3_ERROR_MATH_OVERFLOW; } } } } *rp = val; } else { if (NULL != ec) { *ec = DK3_ERROR_INVALID_ARGS; } } #line 184 "dk3madsi.ctr" return back; #else double val = 0.0; int back = 0; #line 189 "dk3madsi.ctr" if ((NULL != rp) && (NULL != src)) { if (1 == swscanf(src, dkT("%lf"), &val)) { *rp = val; back = 1; } else { if (NULL != ec) { *ec = DK3_ERROR_SYNTAX; } } } else { if (NULL != ec) { *ec = DK3_ERROR_INVALID_ARGS; } } #line 199 "dk3madsi.ctr" return back; #endif #else return (dk3ma_d_from_c8_string(rp, src, ec)); #endif }