hc
2023-08-30 862c27fc9920c83318c784bfdadf43a65df1ec8f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
/******************************************************************************
 *
 * Module Name: utascii - Utility ascii functions
 *
 * Copyright (C) 2000 - 2018, 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_NAME_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] = ' ';
       }
   }
}