mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.8 KiB
106 lines
2.8 KiB
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 |
|
/****************************************************************************** |
|
* |
|
* Module Name: utascii - Utility ascii functions |
|
* |
|
* Copyright (C) 2000 - 2021, Intel Corp. |
|
* |
|
*****************************************************************************/ |
|
|
|
#include <acpi/acpi.h> |
|
#include "accommon.h" |
|
|
|
/******************************************************************************* |
|
* |
|
* FUNCTION: acpi_ut_valid_nameseg |
|
* |
|
* PARAMETERS: name - The name or table signature to be examined. |
|
* Four characters, does not have to be a |
|
* NULL terminated string. |
|
* |
|
* RETURN: TRUE if signature is has 4 valid ACPI characters |
|
* |
|
* DESCRIPTION: Validate an ACPI table signature. |
|
* |
|
******************************************************************************/ |
|
|
|
u8 acpi_ut_valid_nameseg(char *name) |
|
{ |
|
u32 i; |
|
|
|
/* Validate each character in the signature */ |
|
|
|
for (i = 0; i < ACPI_NAMESEG_SIZE; i++) { |
|
if (!acpi_ut_valid_name_char(name[i], i)) { |
|
return (FALSE); |
|
} |
|
} |
|
|
|
return (TRUE); |
|
} |
|
|
|
/******************************************************************************* |
|
* |
|
* FUNCTION: acpi_ut_valid_name_char |
|
* |
|
* PARAMETERS: char - The character to be examined |
|
* position - Byte position (0-3) |
|
* |
|
* RETURN: TRUE if the character is valid, FALSE otherwise |
|
* |
|
* DESCRIPTION: Check for a valid ACPI character. Must be one of: |
|
* 1) Upper case alpha |
|
* 2) numeric |
|
* 3) underscore |
|
* |
|
* We allow a '!' as the last character because of the ASF! table |
|
* |
|
******************************************************************************/ |
|
|
|
u8 acpi_ut_valid_name_char(char character, u32 position) |
|
{ |
|
|
|
if (!((character >= 'A' && character <= 'Z') || |
|
(character >= '0' && character <= '9') || (character == '_'))) { |
|
|
|
/* Allow a '!' in the last position */ |
|
|
|
if (character == '!' && position == 3) { |
|
return (TRUE); |
|
} |
|
|
|
return (FALSE); |
|
} |
|
|
|
return (TRUE); |
|
} |
|
|
|
/******************************************************************************* |
|
* |
|
* FUNCTION: acpi_ut_check_and_repair_ascii |
|
* |
|
* PARAMETERS: name - Ascii string |
|
* count - Number of characters to check |
|
* |
|
* RETURN: None |
|
* |
|
* DESCRIPTION: Ensure that the requested number of characters are printable |
|
* Ascii characters. Sets non-printable and null chars to <space>. |
|
* |
|
******************************************************************************/ |
|
|
|
void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count) |
|
{ |
|
u32 i; |
|
|
|
for (i = 0; i < count; i++) { |
|
repaired_name[i] = (char)name[i]; |
|
|
|
if (!name[i]) { |
|
return; |
|
} |
|
if (!isprint(name[i])) { |
|
repaired_name[i] = ' '; |
|
} |
|
} |
|
}
|
|
|