1    | /***************************************
2    |   $Revision: 1.4 $
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   | 
50   |     if ( ! isdigit(* (unsigned char *) ch)) {       /* make the &*^%#@$%^ */
51   |       if ( isspace(* (unsigned char *) ch)) {       /* gcc happy */
52   |         break;
53   |       }
54   |       else {
55   |         return -1;
56   |       }
57   |     }
58   | 
59   |     val *= 10;
60   |     val += ( *ch - '0' );
61   |     ch++;
62   |   }
63   | 
64   |  *result = val;
65   |  return 0;
66   | }