Source File modules/ut/numconv.c

    1    | /***************************************
    2    |   $Revision: 1.3 $
    3    |
    4    |   Utilities (ut). numconv.c  - library for fast numerical conversions
    5    |                                (to[?]/from string).
    6    |
    7    |   Status: NOT REVUED, TESTED,
    8    |
    9    |   Design and implementation by: Marek Bukowy
    10   |
    11   |   ******************/ /******************
    12   |   Copyright (c) 1999                              RIPE NCC
    13   |
    14   |   All Rights Reserved
    15   |
    16   |   Permission to use, copy, modify, and distribute this software and its
    17   |   documentation for any purpose and without fee is hereby granted,
    18   |   provided that the above copyright notice appear in all copies and that
    19   |   both that copyright notice and this permission notice appear in
    20   |   supporting documentation, and that the name of the author not be
    21   |   used in advertising or publicity pertaining to distribution of the
    22   |   software without specific, written prior permission.
    23   |
    24   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    25   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
    26   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
    27   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
    28   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    29   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    30   |   ***************************************/
    31   |
    32   | #include <ctype.h>
    33   |
    34   | /* converts QUICKLY a string to integer value, stops when encounters a
    35   |    whitespace. All it expects is an UNSIGNED INTEGER value,
    36   |    so in case it gets a non-digit (and non-whitespace) character it returns -1
    37   |
    38   |    if everything looks fine, it return 0. The converted unsigned int is placed
    39   |    into *result;
    40   | */
    41   |
    42   | int
    43   | ut_dec_2_uns(char *cpy, unsigned *result)
    44   | {
    45   | register unsigned val=0;
    46   | register char *ch=cpy;
    47   |
    48   |   while( *ch != '\0') {
    49   |     if ( isspace(*ch)) {
    50   |       break;
    51   |     }
    52   |
    53   |     if ( ! isdigit(*ch)) {
    54   |       return -1;
    55   |     }
    56   |
    57   |     val *= 10;
    58   |     val += ( *ch - '0' );
    59   |     ch++;
    60   |   }
    61   |
    62   |  *result = val;
    63   |  return 0;
    64   | }
    65   |
    66   |
    67   | /* this may be faster than sprintfs...
    68   |    convert an unsigned int to text, store it in buf (len chars long)
    69   |    starting FROM THE END.
    70   | */
    71   |
    72   | int uns_2_dec(unsigned val, char *buf, int len)
    73   | {
    74   | }