forked from mirrors/linux
		
	 3278675567
			
		
	
	
		3278675567
		
	
	
	
	
		
			
			ACPICA commit 24870bd9e73d71e2a1ff0a1e94519f8f8409e57d ACPI_NAME_SIZE changed to ACPI_NAMESEG_SIZE This clarifies that this is the length of an individual nameseg, not the length of a generic namestring/namepath. Improves understanding of the code. Link: https://github.com/acpica/acpica/commit/24870bd9 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Erik Schmauss <erik.schmauss@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
		
			
				
	
	
		
			106 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
 | |
| /******************************************************************************
 | |
|  *
 | |
|  * Module Name: utascii - Utility ascii functions
 | |
|  *
 | |
|  * Copyright (C) 2000 - 2019, 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] = ' ';
 | |
| 		}
 | |
| 	}
 | |
| }
 |