Annotation of embedaddon/ntp/lib/isc/parseint.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
                      3:  * Copyright (C) 2001-2003  Internet Software Consortium.
                      4:  *
                      5:  * Permission to use, copy, modify, and/or distribute this software for any
                      6:  * purpose with or without fee is hereby granted, provided that the above
                      7:  * copyright notice and this permission notice appear in all copies.
                      8:  *
                      9:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
                     10:  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
                     11:  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
                     12:  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
                     13:  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
                     14:  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
                     15:  * PERFORMANCE OF THIS SOFTWARE.
                     16:  */
                     17: 
                     18: /* $Id: parseint.c,v 1.8 2007/06/19 23:47:17 tbox Exp $ */
                     19: 
                     20: /*! \file */
                     21: 
                     22: #include <config.h>
                     23: 
                     24: #include <ctype.h>
                     25: #include <errno.h>
                     26: #include <limits.h>
                     27: 
                     28: #include <isc/parseint.h>
                     29: #include <isc/result.h>
                     30: #include <isc/stdlib.h>
                     31: 
                     32: isc_result_t
                     33: isc_parse_uint32(isc_uint32_t *uip, const char *string, int base) {
                     34:        unsigned long n;
                     35:        char *e;
                     36:        if (! isalnum((unsigned char)(string[0])))
                     37:                return (ISC_R_BADNUMBER);
                     38:        errno = 0;
                     39:        n = strtoul(string, &e, base);
                     40:        if (*e != '\0')
                     41:                return (ISC_R_BADNUMBER);
                     42:        if (n == ULONG_MAX && errno == ERANGE)
                     43:                return (ISC_R_RANGE);
                     44:        *uip = n;
                     45:        return (ISC_R_SUCCESS);
                     46: }
                     47: 
                     48: isc_result_t
                     49: isc_parse_uint16(isc_uint16_t *uip, const char *string, int base) {
                     50:        isc_uint32_t val;
                     51:        isc_result_t result;
                     52:        result = isc_parse_uint32(&val, string, base);
                     53:        if (result != ISC_R_SUCCESS)
                     54:                return (result);
                     55:        if (val > 0xFFFF)
                     56:                return (ISC_R_RANGE);
                     57:        *uip = (isc_uint16_t) val;
                     58:        return (ISC_R_SUCCESS);
                     59: }
                     60: 
                     61: isc_result_t
                     62: isc_parse_uint8(isc_uint8_t *uip, const char *string, int base) {
                     63:        isc_uint32_t val;
                     64:        isc_result_t result;
                     65:        result = isc_parse_uint32(&val, string, base);
                     66:        if (result != ISC_R_SUCCESS)
                     67:                return (result);
                     68:        if (val > 0xFF)
                     69:                return (ISC_R_RANGE);
                     70:        *uip = (isc_uint8_t) val;
                     71:        return (ISC_R_SUCCESS);
                     72: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>