ACPI_STATUS AuConvertUuidToString ( char *UuidBuffer, char *OutString) { UINT32 i; if (!UuidBuffer || !OutString) { return (AE_BAD_PARAMETER); } for (i = 0; i < UUID_BUFFER_LENGTH; i++) { OutString[AcpiGbl_MapToUuidOffset[i]] = AcpiUtHexToAsciiChar (UuidBuffer[i], 4); OutString[AcpiGbl_MapToUuidOffset[i] + 1] = AcpiUtHexToAsciiChar (UuidBuffer[i], 0); } /* Insert required hyphens (dashes) */ OutString[UUID_HYPHEN1_OFFSET] = OutString[UUID_HYPHEN2_OFFSET] = OutString[UUID_HYPHEN3_OFFSET] = OutString[UUID_HYPHEN4_OFFSET] = '-'; OutString[UUID_STRING_LENGTH] = 0; /* Null terminate */ return (AE_OK); }
void UtConvertByteToAsmHex ( UINT8 RawByte, UINT8 *Buffer) { Buffer[0] = '0'; Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); Buffer[3] = 'h'; }
static void AcpiDmUpdateResourceName ( ACPI_NAMESPACE_NODE *ResourceNode) { char Name[ACPI_NAME_SIZE]; /* Ignore if a unique name has already been assigned */ if (ResourceNode->Name.Integer != ACPI_DEFAULT_RESNAME) { return; } /* Generate a new ACPI name for the descriptor */ Name[0] = '_'; Name[1] = AcpiGbl_Prefix[AcpiGbl_NextPrefix]; Name[2] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 4); Name[3] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 0); /* Update globals for next name */ AcpiGbl_NextResourceId++; if (AcpiGbl_NextResourceId >= 256) { AcpiGbl_NextResourceId = 0; AcpiGbl_NextPrefix++; if (AcpiGbl_NextPrefix > ACPI_NUM_RES_PREFIX) { AcpiGbl_NextPrefix = 0; } } /* Change the resource descriptor name */ ResourceNode->Name.Integer = *ACPI_CAST_PTR (UINT32, &Name[0]); }
static UINT32 AcpiExConvertToAscii ( UINT64 Integer, UINT16 Base, UINT8 *String, UINT8 DataWidth) { UINT64 Digit; UINT32 i; UINT32 j; UINT32 k = 0; UINT32 HexLength; UINT32 DecimalLength; UINT32 Remainder; BOOLEAN SupressZeros; ACPI_FUNCTION_ENTRY (); switch (Base) { case 10: /* Setup max length for the decimal number */ switch (DataWidth) { case 1: DecimalLength = ACPI_MAX8_DECIMAL_DIGITS; break; case 4: DecimalLength = ACPI_MAX32_DECIMAL_DIGITS; break; case 8: default: DecimalLength = ACPI_MAX64_DECIMAL_DIGITS; break; } SupressZeros = TRUE; /* No leading zeros */ Remainder = 0; for (i = DecimalLength; i > 0; i--) { /* Divide by nth factor of 10 */ Digit = Integer; for (j = 0; j < i; j++) { (void) AcpiUtShortDivide (Digit, 10, &Digit, &Remainder); } /* Handle leading zeros */ if (Remainder != 0) { SupressZeros = FALSE; } if (!SupressZeros) { String[k] = (UINT8) (ACPI_ASCII_ZERO + Remainder); k++; } } break; case 16: /* HexLength: 2 ascii hex chars per data byte */ HexLength = ACPI_MUL_2 (DataWidth); for (i = 0, j = (HexLength-1); i < HexLength; i++, j--) { /* Get one hex digit, most significant digits first */ String[k] = (UINT8) AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j)); k++; } break; default: return (0); } /* * Since leading zeros are suppressed, we must check for the case where * the integer equals 0 * * Finally, null terminate the string and return the length */ if (!k) { String [0] = ACPI_ASCII_ZERO; k = 1; } String [k] = 0; return ((UINT32) k); }
static char * UtCreateEscapeSequences ( char *InString) { char *String = InString; char *OutString; char *OutStringPtr; UINT32 InStringLength = 0; UINT32 EscapeCount = 0; /* * Determine up front how many escapes are within the string. * Obtain the input string length while doing so. */ while (*String) { if ((*String <= 0x1F) || (*String >= 0x7F)) { EscapeCount++; } InStringLength++; String++; } if (!EscapeCount) { return (InString); /* No escapes, nothing to do */ } /* New string buffer, 3 extra chars per escape (4 total) */ OutString = UtLocalCacheCalloc (InStringLength + (EscapeCount * 3)); OutStringPtr = OutString; /* Convert non-ascii or non-printable chars to escape sequences */ while (*InString) { if ((*InString <= 0x1F) || (*InString >= 0x7F)) { /* Insert a \x hex escape sequence */ OutStringPtr[0] = '\\'; OutStringPtr[1] = 'x'; OutStringPtr[2] = AcpiUtHexToAsciiChar (*InString, 4); OutStringPtr[3] = AcpiUtHexToAsciiChar (*InString, 0); OutStringPtr += 4; } else /* Normal ASCII character */ { *OutStringPtr = *InString; OutStringPtr++; } InString++; } return (OutString); }