cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

utascii.c (2878B)


      1// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
      2/******************************************************************************
      3 *
      4 * Module Name: utascii - Utility ascii functions
      5 *
      6 * Copyright (C) 2000 - 2022, Intel Corp.
      7 *
      8 *****************************************************************************/
      9
     10#include <acpi/acpi.h>
     11#include "accommon.h"
     12
     13/*******************************************************************************
     14 *
     15 * FUNCTION:    acpi_ut_valid_nameseg
     16 *
     17 * PARAMETERS:  name            - The name or table signature to be examined.
     18 *                                Four characters, does not have to be a
     19 *                                NULL terminated string.
     20 *
     21 * RETURN:      TRUE if signature is has 4 valid ACPI characters
     22 *
     23 * DESCRIPTION: Validate an ACPI table signature.
     24 *
     25 ******************************************************************************/
     26
     27u8 acpi_ut_valid_nameseg(char *name)
     28{
     29	u32 i;
     30
     31	/* Validate each character in the signature */
     32
     33	for (i = 0; i < ACPI_NAMESEG_SIZE; i++) {
     34		if (!acpi_ut_valid_name_char(name[i], i)) {
     35			return (FALSE);
     36		}
     37	}
     38
     39	return (TRUE);
     40}
     41
     42/*******************************************************************************
     43 *
     44 * FUNCTION:    acpi_ut_valid_name_char
     45 *
     46 * PARAMETERS:  char            - The character to be examined
     47 *              position        - Byte position (0-3)
     48 *
     49 * RETURN:      TRUE if the character is valid, FALSE otherwise
     50 *
     51 * DESCRIPTION: Check for a valid ACPI character. Must be one of:
     52 *              1) Upper case alpha
     53 *              2) numeric
     54 *              3) underscore
     55 *
     56 *              We allow a '!' as the last character because of the ASF! table
     57 *
     58 ******************************************************************************/
     59
     60u8 acpi_ut_valid_name_char(char character, u32 position)
     61{
     62
     63	if (!((character >= 'A' && character <= 'Z') ||
     64	      (character >= '0' && character <= '9') || (character == '_'))) {
     65
     66		/* Allow a '!' in the last position */
     67
     68		if (character == '!' && position == 3) {
     69			return (TRUE);
     70		}
     71
     72		return (FALSE);
     73	}
     74
     75	return (TRUE);
     76}
     77
     78/*******************************************************************************
     79 *
     80 * FUNCTION:    acpi_ut_check_and_repair_ascii
     81 *
     82 * PARAMETERS:  name                - Ascii string
     83 *              count               - Number of characters to check
     84 *
     85 * RETURN:      None
     86 *
     87 * DESCRIPTION: Ensure that the requested number of characters are printable
     88 *              Ascii characters. Sets non-printable and null chars to <space>.
     89 *
     90 ******************************************************************************/
     91
     92void acpi_ut_check_and_repair_ascii(u8 *name, char *repaired_name, u32 count)
     93{
     94	u32 i;
     95
     96	for (i = 0; i < count; i++) {
     97		repaired_name[i] = (char)name[i];
     98
     99		if (!name[i]) {
    100			return;
    101		}
    102		if (!isprint(name[i])) {
    103			repaired_name[i] = ' ';
    104		}
    105	}
    106}