2018-03-15 02:13:07 +03:00
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
2016-05-05 08:00:36 +03:00
/******************************************************************************
*
* Module Name : utascii - Utility ascii functions
*
2019-01-14 20:55:25 +03:00
* Copyright ( C ) 2000 - 2019 , Intel Corp .
2018-03-15 02:13:07 +03:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2016-05-05 08:00:36 +03:00
# 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 */
2019-04-08 23:42:25 +03:00
for ( i = 0 ; i < ACPI_NAMESEG_SIZE ; i + + ) {
2016-05-05 08:00:36 +03:00
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 ] = ' ' ;
}
}
}