linux/drivers/acpi/acpica/utascii.c
<<
>>
Prefs
   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 - 2019, 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}
 107