X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=StdLib%2FLibC%2FStdLib%2FNumericInt.c;fp=StdLib%2FLibC%2FStdLib%2FNumericInt.c;h=0000000000000000000000000000000000000000;hp=97e52eb1bd3be8e4ab2838585873aa5fbd7501f7;hb=964f432b9b0afe103c41c7613fade3e699118afe;hpb=e2d3a25f1a3135221a9c8061e1b8f90245d727eb
diff --git a/StdLib/LibC/StdLib/NumericInt.c b/StdLib/LibC/StdLib/NumericInt.c
deleted file mode 100644
index 97e52eb1bd..0000000000
--- a/StdLib/LibC/StdLib/NumericInt.c
+++ /dev/null
@@ -1,498 +0,0 @@
-/** @file
- Integer Numeric Conversion Functions.
-
- The atoi, atol, and atoll functions convert the initial portion of the string
- pointed to by nptr to int, long int, and long long int representation,
- respectively. They are equivalent to:
- - atoi: (int)strtol(nptr, (char **)NULL, 10)
- - atol: strtol(nptr, (char **)NULL, 10)
- - atoll: strtoll(nptr, (char **)NULL, 10)
-
- Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
- This program and the accompanying materials are licensed and made available under
- the terms and conditions of the BSD License that accompanies this distribution.
- The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php.
-
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-**/
-#include
-#include
-
-#include
-
-#include
-#include
-#include
-#include
-
-/** The atoi function converts the initial portion of the string pointed to by
- nptr to int representation. Except for the behavior on error, it is
- equivalent to:
- - (int)strtol(nptr, (char **)NULL, 10)
-
- @return The atoi function returns the converted value.
-**/
-int
-atoi(const char *nptr)
-{
- int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace((const unsigned char)*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (int)AsciiStrDecimalToUintn(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-/** The atol function converts the initial portion of the string pointed to by
- nptr to long int representation. Except for the behavior on error, it is
- equivalent to:
- - strtol(nptr, (char **)NULL, 10)
-
- @return The atol function returns the converted value.
-**/
-long int
-atol(const char *nptr)
-{
- long int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace(*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (long int)AsciiStrDecimalToUint64(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-/** The atoll function converts the initial portion of the string pointed to by
- nptr to long long int representation. Except for the behavior on error, it
- is equivalent to:
- - strtoll(nptr, (char **)NULL, 10)
-
- @return The atoll function returns the converted value.
-**/
-long long int
-atoll(const char *nptr)
-{
- long long int Retval;
- BOOLEAN Negative = FALSE;
-
- while(isspace(*nptr)) ++nptr; // Skip leading spaces
-
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
- Retval = (long long int)AsciiStrDecimalToUint64(nptr);
- if(Negative) {
- Retval = -Retval;
- }
- return Retval;
-}
-
-static int
-Digit2Val( int c)
-{
- if(isalpha(c)) { /* If c is one of [A-Za-z]... */
- c = toupper(c) - 7; // Adjust so 'A' is ('9' + 1)
- }
- return c - '0'; // Value returned is between 0 and 35, inclusive.
-}
-
-/** The strtol, strtoll, strtoul, and strtoull functions convert the initial
- portion of the string pointed to by nptr to long int, long long int,
- unsigned long int, and unsigned long long int representation, respectively.
- First, they decompose the input string into three parts: an initial,
- possibly empty, sequence of white-space characters (as specified by the
- isspace function), a subject sequence resembling an integer represented in
- some radix determined by the value of base, and a final string of one or
- more unrecognized characters, including the terminating null character of
- the input string. Then, they attempt to convert the subject sequence to an
- integer, and return the result.
-
- If the value of base is zero, the expected form of the subject sequence is
- that of an integer constant, optionally preceded
- by a plus or minus sign, but not including an integer suffix. If the value
- of base is between 2 and 36 (inclusive), the expected form of the subject
- sequence is a sequence of letters and digits representing an integer with
- the radix specified by base, optionally preceded by a plus or minus sign,
- but not including an integer suffix. The letters from a (or A) through z
- (or Z) are ascribed the values 10 through 35; only letters and digits whose
- ascribed values are less than that of base are permitted. If the value of
- base is 16, the characters 0x or 0X may optionally precede the sequence of
- letters and digits, following the sign if present.
-
- The subject sequence is defined as the longest initial subsequence of the
- input string, starting with the first non-white-space character, that is of
- the expected form. The subject sequence contains no characters if the input
- string is empty or consists entirely of white space, or if the first
- non-white-space character is other than a sign or a permissible letter or digit.
-
- If the subject sequence has the expected form and the value of base is
- zero, the sequence of characters starting with the first digit is
- interpreted as an integer constant. If the subject sequence has the
- expected form and the value of base is between 2 and 36, it is used as the
- base for conversion, ascribing to each letter its value as given above. If
- the subject sequence begins with a minus sign, the value resulting from the
- conversion is negated (in the return type). A pointer to the final string
- is stored in the object pointed to by endptr, provided that endptr is
- not a null pointer.
-
- In other than the "C" locale, additional locale-specific subject sequence
- forms may be accepted.
-
- If the subject sequence is empty or does not have the expected form, no
- conversion is performed; the value of nptr is stored in the object pointed
- to by endptr, provided that endptr is not a null pointer.
-
- @return The strtol, strtoll, strtoul, and strtoull functions return the
- converted value, if any. If no conversion could be performed, zero
- is returned. If the correct value is outside the range of
- representable values, LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX,
- ULONG_MAX, or ULLONG_MAX is returned (according to the return type
- and sign of the value, if any), and the value of the macro ERANGE
- is stored in errno.
-**/
-long
-strtol(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- long Result = 0;
- long Previous;
- int temp;
- BOOLEAN Negative = FALSE;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional sign followed by digits.
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (long int)temp;
- if( Result <= Previous) { // Detect Overflow
- if(Negative) {
- Result = LONG_MIN;
- }
- else {
- Result = LONG_MAX;
- }
- Negative = FALSE;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
- if(Negative) {
- Result = -Result;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoul function converts the initial portion of the string pointed to
- by nptr to unsigned long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoul function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long
-strtoul(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- unsigned long Result = 0;
- unsigned long Previous;
- int temp;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional + sign followed by digits.
- if(*nptr == '+') {
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (unsigned long)temp;
- if( Result < Previous) { // If we overflowed
- Result = ULONG_MAX;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoll function converts the initial portion of the string pointed to
- by nptr to long long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoll function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, LLONG_MIN or
- LLONG_MAX is returned (according to the sign of the value, if any),
- and the value of the macro ERANGE is stored in errno.
-**/
-long long
-strtoll(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- long long Result = 0;
- long long Previous;
- int temp;
- BOOLEAN Negative = FALSE;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional sign followed by digits.
- if(*nptr == '+') {
- Negative = FALSE;
- ++nptr;
- }
- else if(*nptr == '-') {
- Negative = TRUE;
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (long long int)temp;
- if( Result <= Previous) { // Detect Overflow
- if(Negative) {
- Result = LLONG_MIN;
- }
- else {
- Result = LLONG_MAX;
- }
- Negative = FALSE;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
- if(Negative) {
- Result = -Result;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}
-
-/** The strtoull function converts the initial portion of the string pointed to
- by nptr to unsigned long long int representation.
-
- See the description for strtol for more information.
-
- @return The strtoull function returns the converted value, if any. If no
- conversion could be performed, zero is returned. If the correct
- value is outside the range of representable values, ULLONG_MAX is
- returned and the value of the macro ERANGE is stored in errno.
-**/
-unsigned long long
-strtoull(const char * __restrict nptr, char ** __restrict endptr, int base)
-{
- const char *pEnd;
- unsigned long long Result = 0;
- unsigned long long Previous;
- int temp;
-
- pEnd = nptr;
-
- if((base < 0) || (base == 1) || (base > 36)) {
- if(endptr != NULL) {
- *endptr = NULL;
- }
- return 0;
- }
- // Skip leading spaces.
- while(isspace(*nptr)) ++nptr;
-
- // Process Subject sequence: optional + sign followed by digits.
- if(*nptr == '+') {
- ++nptr;
- }
-
- if(*nptr == '0') { /* Might be Octal or Hex */
- if(toupper(nptr[1]) == 'X') { /* Looks like Hex */
- if((base == 0) || (base == 16)) {
- nptr += 2; /* Skip the "0X" */
- base = 16; /* In case base was 0 */
- }
- }
- else { /* Looks like Octal */
- if((base == 0) || (base == 8)) {
- ++nptr; /* Skip the leading "0" */
- base = 8; /* In case base was 0 */
- }
- }
- }
- if(base == 0) { /* If still zero then must be decimal */
- base = 10;
- }
- if(*nptr == '0') {
- for( ; *nptr == '0'; ++nptr); /* Skip any remaining leading zeros */
- pEnd = nptr;
- }
-
- while( isalnum(*nptr) && ((temp = Digit2Val(*nptr)) < base)) {
- Previous = Result;
- Result = (Result * base) + (unsigned long long)temp;
- if( Result < Previous) { // If we overflowed
- Result = ULLONG_MAX;
- errno = ERANGE;
- break;
- }
- pEnd = ++nptr;
- }
-
- // Save pointer to final sequence
- if(endptr != NULL) {
- *endptr = (char *)pEnd;
- }
- return Result;
-}