Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/stdlib/strtold.c

    r4cf8ca6 rec18957a  
    3030 * @{
    3131 */
    32 /** @file Backend for floating point conversions.
     32/** @file
    3333 */
    3434
     
    5555#endif
    5656
    57 // TODO: clean up
     57// TODO: clean up, documentation
    5858
    5959// FIXME: ensure it builds and works on all platforms
     
    116116};
    117117
    118 /**
    119  * Decides whether the argument is still in range representable by
    120  * long double or not.
    121  *
    122  * @param num Floating point number to be checked.
    123  * @return True if the argument is out of range, false otherwise.
    124  */
    125118static inline bool out_of_range(long double num)
    126119{
     
    134127 * @param base Number to be multiplied.
    135128 * @param exponent Base 5 exponent.
    136  * @return base multiplied by 5**exponent.
     129 * @return base multiplied by 5**exponent
    137130 */
    138131static long double mul_pow5(long double base, int exponent)
     
    180173 * @param base Number to be multiplied.
    181174 * @param exponent Base 2 exponent.
    182  * @return base multiplied by 2**exponent.
     175 * @return base multiplied by 2**exponent
    183176 */
    184177static long double mul_pow2(long double base, int exponent)
     
    219212}
    220213
    221 /**
    222  * Convert decimal string representation of the floating point number.
    223  * Function expects the string pointer to be already pointed at the first
    224  * digit (i.e. leading optional sign was already consumed by the caller).
    225  *
    226  * @param sptr Pointer to the storage of the string pointer. Upon successful
    227  *     conversion, the string pointer is updated to point to the first
    228  *     unrecognized character.
    229  * @return An approximate representation of the input floating-point number.
    230  */
     214
    231215static long double parse_decimal(const char **sptr)
    232216{
     
    331315}
    332316
    333 /**
    334  * Derive a hexadecimal digit from its character representation.
    335  *
    336  * @param ch Character representation of the hexadecimal digit.
    337  * @return Digit value represented by an integer.
    338  */
    339317static inline int hex_value(char ch)
    340318{
     
    347325
    348326/**
    349  * Get the count of leading zero bits up to the maximum of 3 zero bits.
    350  *
    351327 * @param val Integer value.
    352328 * @return How many leading zero bits there are. (Maximum is 3)
     
    363339}
    364340
    365 /**
    366  * Convert hexadecimal string representation of the floating point number.
    367  * Function expects the string pointer to be already pointed at the first
    368  * digit (i.e. leading optional sign and 0x prefix were already consumed
    369  * by the caller).
    370  *
    371  * @param sptr Pointer to the storage of the string pointer. Upon successful
    372  *     conversion, the string pointer is updated to point to the first
    373  *     unrecognized character.
    374  * @return Representation of the input floating-point number.
    375  */
    376341static long double parse_hexadecimal(const char **sptr)
    377342{
     
    513478 * @param nptr Input string.
    514479 * @param endptr If non-NULL, *endptr is set to the position of the first
    515  *     unrecognized character.
     480 *    unrecognized character.
    516481 * @return An approximate representation of the input floating-point number.
    517482 */
     
    547512               
    548513                if (endptr != NULL) {
    549                         *endptr = (char *) nptr;
    550                 }
    551                 errno = EINVAL;
    552                 return 0;
     514                        *endptr = (char *) &nptr[i + 3];
     515                }
     516                errno = ERANGE;
     517                return negative ? -0.0l : +0.0l;
    553518        }
    554519       
     
    602567/** @}
    603568 */
     569
Note: See TracChangeset for help on using the changeset viewer.