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