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   | }