X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/5ba3f43ea354af8ad55bea84372a2bc834d8757c..HEAD:/iokit/Kernel/IOStringFuncs.c diff --git a/iokit/Kernel/IOStringFuncs.c b/iokit/Kernel/IOStringFuncs.c index c4f9458fe..48f8239c3 100644 --- a/iokit/Kernel/IOStringFuncs.c +++ b/iokit/Kernel/IOStringFuncs.c @@ -2,7 +2,7 @@ * Copyright (c) 1998-2016 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -11,10 +11,10 @@ * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. - * + * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -22,11 +22,11 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ -/* +/* * Copyright (c) 1995 NeXT Computer, Inc. All rights reserved. * * strol.c - The functions strtol() & strtoul() are exported as public API @@ -74,10 +74,10 @@ */ /* -#include -#include -#include -*/ + #include + #include + #include + */ #include #include @@ -94,26 +94,26 @@ typedef int BOOL; static inline BOOL isupper(char c) { - return (c >= 'A' && c <= 'Z'); + return c >= 'A' && c <= 'Z'; } static inline BOOL isalpha(char c) { - return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); } static inline BOOL isspace(char c) { - return (c == ' ' || c == '\t' || c == '\n' || c == '\12'); + return c == ' ' || c == '\t' || c == '\n' || c == '\12'; } static inline BOOL isdigit(char c) { - return (c >= '0' && c <= '9'); + return c >= '0' && c <= '9'; } /* @@ -142,8 +142,9 @@ strtol(const char *nptr, char **endptr, int base) if (c == '-') { neg = 1; c = *s++; - } else if (c == '+') + } else if (c == '+') { c = *s++; + } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { c = s[1]; @@ -155,8 +156,9 @@ strtol(const char *nptr, char **endptr, int base) s += 2; base = 2; } - if (base == 0) + if (base == 0) { base = c == '0' ? 8 : 10; + } /* * Compute the cutoff value between legal numbers and illegal @@ -176,20 +178,22 @@ strtol(const char *nptr, char **endptr, int base) * overflow. */ cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; - cutlim = cutoff % (unsigned long)base; + cutlim = ((int)(cutoff % (unsigned long)base)); cutoff /= (unsigned long)base; for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) + if (isdigit(c)) { c -= '0'; - else if (isalpha(c)) + } else if (isalpha(c)) { c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else + } else { break; - if (c >= base) + } + if (c >= base) { break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim) ) + } + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) { any = -1; - else { + } else { any = 1; acc *= base; acc += c; @@ -198,20 +202,17 @@ strtol(const char *nptr, char **endptr, int base) if (any < 0) { acc = neg ? LONG_MIN : LONG_MAX; // errno = ERANGE; - } else if (neg) + } else if (neg) { acc = -acc; - if (endptr != 0) - { - if(any) - { + } + if (endptr != 0) { + if (any) { *endptr = __CAST_AWAY_QUALIFIER(s - 1, const, char *); - } - else - { + } else { *endptr = __CAST_AWAY_QUALIFIER(nptr, const, char *); } } - return (acc); + return acc; } unsigned long @@ -232,8 +233,9 @@ strtoul(const char *nptr, char **endptr, int base) if (c == '-') { neg = 1; c = *s++; - } else if (c == '+') + } else if (c == '+') { c = *s++; + } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { c = s[1]; @@ -245,22 +247,25 @@ strtoul(const char *nptr, char **endptr, int base) s += 2; base = 2; } - if (base == 0) + if (base == 0) { base = c == '0' ? 8 : 10; + } cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; - cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; + cutlim = ((int)((unsigned long)ULONG_MAX % (unsigned long)base)); for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) + if (isdigit(c)) { c -= '0'; - else if (isalpha(c)) + } else if (isalpha(c)) { c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else + } else { break; - if (c >= base) + } + if (c >= base) { break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim) ) + } + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) { any = -1; - else { + } else { any = 1; acc *= base; acc += c; @@ -269,21 +274,18 @@ strtoul(const char *nptr, char **endptr, int base) if (any < 0) { acc = ULONG_MAX; // errno = ERANGE; - } else if (neg) + } else if (neg) { acc = -acc; - if (endptr != 0) - { - if(any) - { + } + if (endptr != 0) { + if (any) { *endptr = __CAST_AWAY_QUALIFIER(s - 1, const, char *); - } - else - { + } else { *endptr = __CAST_AWAY_QUALIFIER(nptr, const, char *); } } - return (acc); + return acc; } /* @@ -315,8 +317,9 @@ strtoq(const char *nptr, char **endptr, int base) c = *s++; } else { neg = 0; - if (c == '+') + if (c == '+') { c = *s++; + } } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { @@ -324,8 +327,9 @@ strtoq(const char *nptr, char **endptr, int base) s += 2; base = 16; } - if (base == 0) + if (base == 0) { base = c == '0' ? 8 : 10; + } /* * Compute the cutoff value between legal numbers and illegal @@ -347,20 +351,22 @@ strtoq(const char *nptr, char **endptr, int base) */ qbase = (unsigned)base; cutoff = neg ? -(u_quad_t)QUAD_MIN : QUAD_MAX; - cutlim = cutoff % qbase; + cutlim = ((int)(cutoff % qbase)); cutoff /= qbase; for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) + if (isdigit(c)) { c -= '0'; - else if (isalpha(c)) + } else if (isalpha(c)) { c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else + } else { break; - if (c >= base) + } + if (c >= base) { break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + } + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) { any = -1; - else { + } else { any = 1; acc *= qbase; acc += c; @@ -369,21 +375,18 @@ strtoq(const char *nptr, char **endptr, int base) if (any < 0) { acc = neg ? QUAD_MIN : QUAD_MAX; // errno = ERANGE; - } else if (neg) + } else if (neg) { acc = -acc; - if (endptr != 0) - { - if(any) - { + } + if (endptr != 0) { + if (any) { *endptr = __CAST_AWAY_QUALIFIER(s - 1, const, char *); - } - else - { + } else { *endptr = __CAST_AWAY_QUALIFIER(nptr, const, char *); } } - return (acc); + return acc; } @@ -395,8 +398,8 @@ strtoq(const char *nptr, char **endptr, int base) */ u_quad_t strtouq(const char *nptr, - char **endptr, - int base) + char **endptr, + int base) { const char *s = nptr; u_quad_t acc; @@ -414,10 +417,11 @@ strtouq(const char *nptr, if (c == '-') { neg = 1; c = *s++; - } else { + } else { neg = 0; - if (c == '+') + if (c == '+') { c = *s++; + } } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { @@ -425,23 +429,26 @@ strtouq(const char *nptr, s += 2; base = 16; } - if (base == 0) + if (base == 0) { base = c == '0' ? 8 : 10; + } qbase = (unsigned)base; cutoff = (u_quad_t)UQUAD_MAX / qbase; - cutlim = (u_quad_t)UQUAD_MAX % qbase; + cutlim = ((int)((u_quad_t)UQUAD_MAX % qbase)); for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) + if (isdigit(c)) { c -= '0'; - else if (isalpha(c)) + } else if (isalpha(c)) { c -= isupper(c) ? 'A' - 10 : 'a' - 10; - else + } else { break; - if (c >= base) + } + if (c >= base) { break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + } + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) { any = -1; - else { + } else { any = 1; acc *= qbase; acc += c; @@ -450,21 +457,18 @@ strtouq(const char *nptr, if (any < 0) { acc = UQUAD_MAX; // errno = ERANGE; - } else if (neg) + } else if (neg) { acc = -acc; - if (endptr != 0) - { - if(any) - { + } + if (endptr != 0) { + if (any) { *endptr = __CAST_AWAY_QUALIFIER(s - 1, const, char *); - } - else - { + } else { *endptr = __CAST_AWAY_QUALIFIER(nptr, const, char *); } } - return (acc); + return acc; } @@ -475,17 +479,20 @@ strtouq(const char *nptr, char * strncat(char *s1, const char *s2, unsigned long n) { - char *os1; - int i = n; + if (n != 0) { + char *d = s1; + const char *s = s2; - os1 = s1; - while (*s1++) - ; - --s1; - while ((*s1++ = *s2++)) - if (--i < 0) { - *--s1 = '\0'; - break; + while (*d != 0) { + d++; } - return(os1); + do { + if ((*d = *s++) == '\0') { + break; + } + d++; + } while (--n != 0); + *d = '\0'; + } + return s1; }