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