Annotation of embedaddon/ntp/libntp/hextolfp.c, revision 1.1
1.1 ! misho 1: /*
! 2: * hextolfp - convert an ascii hex string to an l_fp number
! 3: */
! 4: #include <stdio.h>
! 5: #include <ctype.h>
! 6:
! 7: #include "ntp_fp.h"
! 8: #include "ntp_string.h"
! 9: #include "ntp_stdlib.h"
! 10:
! 11: int
! 12: hextolfp(
! 13: const char *str,
! 14: l_fp *lfp
! 15: )
! 16: {
! 17: register const char *cp;
! 18: register const char *cpstart;
! 19: register u_long dec_i;
! 20: register u_long dec_f;
! 21: char *ind = NULL;
! 22: static const char *digits = "0123456789abcdefABCDEF";
! 23:
! 24: dec_i = dec_f = 0;
! 25: cp = str;
! 26:
! 27: /*
! 28: * We understand numbers of the form:
! 29: *
! 30: * [spaces]8_hex_digits[.]8_hex_digits[spaces|\n|\0]
! 31: */
! 32: while (isspace((int)*cp))
! 33: cp++;
! 34:
! 35: cpstart = cp;
! 36: while (*cp != '\0' && (cp - cpstart) < 8 &&
! 37: (ind = strchr(digits, *cp)) != NULL) {
! 38: dec_i = dec_i << 4; /* multiply by 16 */
! 39: dec_i += ((ind - digits) > 15) ? (ind - digits) - 6
! 40: : (ind - digits);
! 41: cp++;
! 42: }
! 43:
! 44: if ((cp - cpstart) < 8 || ind == NULL)
! 45: return 0;
! 46: if (*cp == '.')
! 47: cp++;
! 48:
! 49: cpstart = cp;
! 50: while (*cp != '\0' && (cp - cpstart) < 8 &&
! 51: (ind = strchr(digits, *cp)) != NULL) {
! 52: dec_f = dec_f << 4; /* multiply by 16 */
! 53: dec_f += ((ind - digits) > 15) ? (ind - digits) - 6
! 54: : (ind - digits);
! 55: cp++;
! 56: }
! 57:
! 58: if ((cp - cpstart) < 8 || ind == NULL)
! 59: return 0;
! 60:
! 61: if (*cp != '\0' && !isspace((int)*cp))
! 62: return 0;
! 63:
! 64: lfp->l_ui = dec_i;
! 65: lfp->l_uf = dec_f;
! 66: return 1;
! 67: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>