1 | /****************************************************************************** |
2 | * |
3 | * Module Name: utascii - Utility ascii functions |
4 | * |
5 | *****************************************************************************/ |
6 | |
7 | /* |
8 | * Copyright (C) 2000 - 2016, Intel Corp. |
9 | * All rights reserved. |
10 | * |
11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions |
13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright |
15 | * notice, this list of conditions, and the following disclaimer, |
16 | * without modification. |
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer |
18 | * substantially similar to the "NO WARRANTY" disclaimer below |
19 | * ("Disclaimer") and any redistribution must be conditioned upon |
20 | * including a substantially similar Disclaimer requirement for further |
21 | * binary redistribution. |
22 | * 3. Neither the names of the above-listed copyright holders nor the names |
23 | * of any contributors may be used to endorse or promote products derived |
24 | * from this software without specific prior written permission. |
25 | * |
26 | * Alternatively, this software may be distributed under the terms of the |
27 | * GNU General Public License ("GPL") version 2 as published by the Free |
28 | * Software Foundation. |
29 | * |
30 | * NO WARRANTY |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR |
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
41 | * POSSIBILITY OF SUCH DAMAGES. |
42 | */ |
43 | |
44 | #include "acpi.h" |
45 | #include "accommon.h" |
46 | |
47 | |
48 | /******************************************************************************* |
49 | * |
50 | * FUNCTION: AcpiUtValidNameseg |
51 | * |
52 | * PARAMETERS: Name - The name or table signature to be examined. |
53 | * Four characters, does not have to be a |
54 | * NULL terminated string. |
55 | * |
56 | * RETURN: TRUE if signature is has 4 valid ACPI characters |
57 | * |
58 | * DESCRIPTION: Validate an ACPI table signature. |
59 | * |
60 | ******************************************************************************/ |
61 | |
62 | BOOLEAN |
63 | AcpiUtValidNameseg ( |
64 | char *Name) |
65 | { |
66 | UINT32 i; |
67 | |
68 | |
69 | /* Validate each character in the signature */ |
70 | |
71 | for (i = 0; i < ACPI_NAME_SIZE; i++) |
72 | { |
73 | if (!AcpiUtValidNameChar (Name[i], i)) |
74 | { |
75 | return (FALSE); |
76 | } |
77 | } |
78 | |
79 | return (TRUE); |
80 | } |
81 | |
82 | |
83 | /******************************************************************************* |
84 | * |
85 | * FUNCTION: AcpiUtValidNameChar |
86 | * |
87 | * PARAMETERS: Char - The character to be examined |
88 | * Position - Byte position (0-3) |
89 | * |
90 | * RETURN: TRUE if the character is valid, FALSE otherwise |
91 | * |
92 | * DESCRIPTION: Check for a valid ACPI character. Must be one of: |
93 | * 1) Upper case alpha |
94 | * 2) numeric |
95 | * 3) underscore |
96 | * |
97 | * We allow a '!' as the last character because of the ASF! table |
98 | * |
99 | ******************************************************************************/ |
100 | |
101 | BOOLEAN |
102 | AcpiUtValidNameChar ( |
103 | char Character, |
104 | UINT32 Position) |
105 | { |
106 | |
107 | if (!((Character >= 'A' && Character <= 'Z') || |
108 | (Character >= '0' && Character <= '9') || |
109 | (Character == '_'))) |
110 | { |
111 | /* Allow a '!' in the last position */ |
112 | |
113 | if (Character == '!' && Position == 3) |
114 | { |
115 | return (TRUE); |
116 | } |
117 | |
118 | return (FALSE); |
119 | } |
120 | |
121 | return (TRUE); |
122 | } |
123 | |
124 | |
125 | /******************************************************************************* |
126 | * |
127 | * FUNCTION: AcpiUtCheckAndRepairAscii |
128 | * |
129 | * PARAMETERS: Name - Ascii string |
130 | * Count - Number of characters to check |
131 | * |
132 | * RETURN: None |
133 | * |
134 | * DESCRIPTION: Ensure that the requested number of characters are printable |
135 | * Ascii characters. Sets non-printable and null chars to <space>. |
136 | * |
137 | ******************************************************************************/ |
138 | |
139 | void |
140 | AcpiUtCheckAndRepairAscii ( |
141 | UINT8 *Name, |
142 | char *RepairedName, |
143 | UINT32 Count) |
144 | { |
145 | UINT32 i; |
146 | |
147 | |
148 | for (i = 0; i < Count; i++) |
149 | { |
150 | RepairedName[i] = (char) Name[i]; |
151 | |
152 | if (!Name[i]) |
153 | { |
154 | return; |
155 | } |
156 | if (!isprint (Name[i])) |
157 | { |
158 | RepairedName[i] = ' '; |
159 | } |
160 | } |
161 | } |
162 | |