xref: /freebsd/sys/contrib/dev/acpica/components/utilities/utnonansi.c (revision 493deb390baef09f40125589cbdb714cb274ab04)
1fe0f0bbbSJung-uk Kim /*******************************************************************************
2fe0f0bbbSJung-uk Kim  *
3fe0f0bbbSJung-uk Kim  * Module Name: utnonansi - Non-ansi C library functions
4fe0f0bbbSJung-uk Kim  *
5fe0f0bbbSJung-uk Kim  ******************************************************************************/
6fe0f0bbbSJung-uk Kim 
7fe0f0bbbSJung-uk Kim /*
8f8146b88SJung-uk Kim  * Copyright (C) 2000 - 2016, Intel Corp.
9fe0f0bbbSJung-uk Kim  * All rights reserved.
10fe0f0bbbSJung-uk Kim  *
11fe0f0bbbSJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12fe0f0bbbSJung-uk Kim  * modification, are permitted provided that the following conditions
13fe0f0bbbSJung-uk Kim  * are met:
14fe0f0bbbSJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15fe0f0bbbSJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16fe0f0bbbSJung-uk Kim  *    without modification.
17fe0f0bbbSJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18fe0f0bbbSJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19fe0f0bbbSJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20fe0f0bbbSJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21fe0f0bbbSJung-uk Kim  *    binary redistribution.
22fe0f0bbbSJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23fe0f0bbbSJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24fe0f0bbbSJung-uk Kim  *    from this software without specific prior written permission.
25fe0f0bbbSJung-uk Kim  *
26fe0f0bbbSJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27fe0f0bbbSJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28fe0f0bbbSJung-uk Kim  * Software Foundation.
29fe0f0bbbSJung-uk Kim  *
30fe0f0bbbSJung-uk Kim  * NO WARRANTY
31fe0f0bbbSJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32fe0f0bbbSJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33fe0f0bbbSJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34fe0f0bbbSJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35fe0f0bbbSJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36fe0f0bbbSJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37fe0f0bbbSJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38fe0f0bbbSJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39fe0f0bbbSJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40fe0f0bbbSJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41fe0f0bbbSJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42fe0f0bbbSJung-uk Kim  */
43fe0f0bbbSJung-uk Kim 
44fe0f0bbbSJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
45fe0f0bbbSJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
46fe0f0bbbSJung-uk Kim 
47fe0f0bbbSJung-uk Kim 
48fe0f0bbbSJung-uk Kim #define _COMPONENT          ACPI_UTILITIES
49fe0f0bbbSJung-uk Kim         ACPI_MODULE_NAME    ("utnonansi")
50fe0f0bbbSJung-uk Kim 
51fe0f0bbbSJung-uk Kim /*
52*493deb39SJung-uk Kim  * Non-ANSI C library functions - strlwr, strupr, stricmp, and "safe"
53*493deb39SJung-uk Kim  * string functions.
54fe0f0bbbSJung-uk Kim  */
55fe0f0bbbSJung-uk Kim 
56fe0f0bbbSJung-uk Kim /*******************************************************************************
57fe0f0bbbSJung-uk Kim  *
58fe0f0bbbSJung-uk Kim  * FUNCTION:    AcpiUtStrlwr (strlwr)
59fe0f0bbbSJung-uk Kim  *
60fe0f0bbbSJung-uk Kim  * PARAMETERS:  SrcString       - The source string to convert
61fe0f0bbbSJung-uk Kim  *
62fe0f0bbbSJung-uk Kim  * RETURN:      None
63fe0f0bbbSJung-uk Kim  *
64fe0f0bbbSJung-uk Kim  * DESCRIPTION: Convert a string to lowercase
65fe0f0bbbSJung-uk Kim  *
66fe0f0bbbSJung-uk Kim  ******************************************************************************/
67fe0f0bbbSJung-uk Kim 
68fe0f0bbbSJung-uk Kim void
69fe0f0bbbSJung-uk Kim AcpiUtStrlwr (
70fe0f0bbbSJung-uk Kim     char                    *SrcString)
71fe0f0bbbSJung-uk Kim {
72fe0f0bbbSJung-uk Kim     char                    *String;
73fe0f0bbbSJung-uk Kim 
74fe0f0bbbSJung-uk Kim 
75fe0f0bbbSJung-uk Kim     ACPI_FUNCTION_ENTRY ();
76fe0f0bbbSJung-uk Kim 
77fe0f0bbbSJung-uk Kim 
78fe0f0bbbSJung-uk Kim     if (!SrcString)
79fe0f0bbbSJung-uk Kim     {
80fe0f0bbbSJung-uk Kim         return;
81fe0f0bbbSJung-uk Kim     }
82fe0f0bbbSJung-uk Kim 
83fe0f0bbbSJung-uk Kim     /* Walk entire string, lowercasing the letters */
84fe0f0bbbSJung-uk Kim 
85fe0f0bbbSJung-uk Kim     for (String = SrcString; *String; String++)
86fe0f0bbbSJung-uk Kim     {
87fe0f0bbbSJung-uk Kim         *String = (char) tolower ((int) *String);
88fe0f0bbbSJung-uk Kim     }
89fe0f0bbbSJung-uk Kim }
90fe0f0bbbSJung-uk Kim 
91fe0f0bbbSJung-uk Kim 
92fe0f0bbbSJung-uk Kim /*******************************************************************************
93fe0f0bbbSJung-uk Kim  *
94fe0f0bbbSJung-uk Kim  * FUNCTION:    AcpiUtStrupr (strupr)
95fe0f0bbbSJung-uk Kim  *
96fe0f0bbbSJung-uk Kim  * PARAMETERS:  SrcString       - The source string to convert
97fe0f0bbbSJung-uk Kim  *
98fe0f0bbbSJung-uk Kim  * RETURN:      None
99fe0f0bbbSJung-uk Kim  *
100fe0f0bbbSJung-uk Kim  * DESCRIPTION: Convert a string to uppercase
101fe0f0bbbSJung-uk Kim  *
102fe0f0bbbSJung-uk Kim  ******************************************************************************/
103fe0f0bbbSJung-uk Kim 
104fe0f0bbbSJung-uk Kim void
105fe0f0bbbSJung-uk Kim AcpiUtStrupr (
106fe0f0bbbSJung-uk Kim     char                    *SrcString)
107fe0f0bbbSJung-uk Kim {
108fe0f0bbbSJung-uk Kim     char                    *String;
109fe0f0bbbSJung-uk Kim 
110fe0f0bbbSJung-uk Kim 
111fe0f0bbbSJung-uk Kim     ACPI_FUNCTION_ENTRY ();
112fe0f0bbbSJung-uk Kim 
113fe0f0bbbSJung-uk Kim 
114fe0f0bbbSJung-uk Kim     if (!SrcString)
115fe0f0bbbSJung-uk Kim     {
116fe0f0bbbSJung-uk Kim         return;
117fe0f0bbbSJung-uk Kim     }
118fe0f0bbbSJung-uk Kim 
119fe0f0bbbSJung-uk Kim     /* Walk entire string, uppercasing the letters */
120fe0f0bbbSJung-uk Kim 
121fe0f0bbbSJung-uk Kim     for (String = SrcString; *String; String++)
122fe0f0bbbSJung-uk Kim     {
123fe0f0bbbSJung-uk Kim         *String = (char) toupper ((int) *String);
124fe0f0bbbSJung-uk Kim     }
125fe0f0bbbSJung-uk Kim }
126fe0f0bbbSJung-uk Kim 
127fe0f0bbbSJung-uk Kim 
128fe0f0bbbSJung-uk Kim /******************************************************************************
129fe0f0bbbSJung-uk Kim  *
130fe0f0bbbSJung-uk Kim  * FUNCTION:    AcpiUtStricmp (stricmp)
131fe0f0bbbSJung-uk Kim  *
132fe0f0bbbSJung-uk Kim  * PARAMETERS:  String1             - first string to compare
133fe0f0bbbSJung-uk Kim  *              String2             - second string to compare
134fe0f0bbbSJung-uk Kim  *
135fe0f0bbbSJung-uk Kim  * RETURN:      int that signifies string relationship. Zero means strings
136fe0f0bbbSJung-uk Kim  *              are equal.
137fe0f0bbbSJung-uk Kim  *
138fe0f0bbbSJung-uk Kim  * DESCRIPTION: Case-insensitive string compare. Implementation of the
139fe0f0bbbSJung-uk Kim  *              non-ANSI stricmp function.
140fe0f0bbbSJung-uk Kim  *
141fe0f0bbbSJung-uk Kim  ******************************************************************************/
142fe0f0bbbSJung-uk Kim 
143fe0f0bbbSJung-uk Kim int
144fe0f0bbbSJung-uk Kim AcpiUtStricmp (
145fe0f0bbbSJung-uk Kim     char                    *String1,
146fe0f0bbbSJung-uk Kim     char                    *String2)
147fe0f0bbbSJung-uk Kim {
148fe0f0bbbSJung-uk Kim     int                     c1;
149fe0f0bbbSJung-uk Kim     int                     c2;
150fe0f0bbbSJung-uk Kim 
151fe0f0bbbSJung-uk Kim 
152fe0f0bbbSJung-uk Kim     do
153fe0f0bbbSJung-uk Kim     {
154fe0f0bbbSJung-uk Kim         c1 = tolower ((int) *String1);
155fe0f0bbbSJung-uk Kim         c2 = tolower ((int) *String2);
156fe0f0bbbSJung-uk Kim 
157fe0f0bbbSJung-uk Kim         String1++;
158fe0f0bbbSJung-uk Kim         String2++;
159fe0f0bbbSJung-uk Kim     }
160fe0f0bbbSJung-uk Kim     while ((c1 == c2) && (c1));
161fe0f0bbbSJung-uk Kim 
162fe0f0bbbSJung-uk Kim     return (c1 - c2);
163fe0f0bbbSJung-uk Kim }
164fe0f0bbbSJung-uk Kim 
165fe0f0bbbSJung-uk Kim 
166fe0f0bbbSJung-uk Kim #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
167fe0f0bbbSJung-uk Kim /*******************************************************************************
168fe0f0bbbSJung-uk Kim  *
169f8146b88SJung-uk Kim  * FUNCTION:    AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat
170fe0f0bbbSJung-uk Kim  *
171fe0f0bbbSJung-uk Kim  * PARAMETERS:  Adds a "DestSize" parameter to each of the standard string
172fe0f0bbbSJung-uk Kim  *              functions. This is the size of the Destination buffer.
173fe0f0bbbSJung-uk Kim  *
174fe0f0bbbSJung-uk Kim  * RETURN:      TRUE if the operation would overflow the destination buffer.
175fe0f0bbbSJung-uk Kim  *
176fe0f0bbbSJung-uk Kim  * DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
177fe0f0bbbSJung-uk Kim  *              the result of the operation will not overflow the output string
178fe0f0bbbSJung-uk Kim  *              buffer.
179fe0f0bbbSJung-uk Kim  *
180fe0f0bbbSJung-uk Kim  * NOTE:        These functions are typically only helpful for processing
181fe0f0bbbSJung-uk Kim  *              user input and command lines. For most ACPICA code, the
182fe0f0bbbSJung-uk Kim  *              required buffer length is precisely calculated before buffer
183fe0f0bbbSJung-uk Kim  *              allocation, so the use of these functions is unnecessary.
184fe0f0bbbSJung-uk Kim  *
185fe0f0bbbSJung-uk Kim  ******************************************************************************/
186fe0f0bbbSJung-uk Kim 
187fe0f0bbbSJung-uk Kim BOOLEAN
188fe0f0bbbSJung-uk Kim AcpiUtSafeStrcpy (
189fe0f0bbbSJung-uk Kim     char                    *Dest,
190fe0f0bbbSJung-uk Kim     ACPI_SIZE               DestSize,
191fe0f0bbbSJung-uk Kim     char                    *Source)
192fe0f0bbbSJung-uk Kim {
193fe0f0bbbSJung-uk Kim 
194fe0f0bbbSJung-uk Kim     if (strlen (Source) >= DestSize)
195fe0f0bbbSJung-uk Kim     {
196fe0f0bbbSJung-uk Kim         return (TRUE);
197fe0f0bbbSJung-uk Kim     }
198fe0f0bbbSJung-uk Kim 
199fe0f0bbbSJung-uk Kim     strcpy (Dest, Source);
200fe0f0bbbSJung-uk Kim     return (FALSE);
201fe0f0bbbSJung-uk Kim }
202fe0f0bbbSJung-uk Kim 
203fe0f0bbbSJung-uk Kim BOOLEAN
204fe0f0bbbSJung-uk Kim AcpiUtSafeStrcat (
205fe0f0bbbSJung-uk Kim     char                    *Dest,
206fe0f0bbbSJung-uk Kim     ACPI_SIZE               DestSize,
207fe0f0bbbSJung-uk Kim     char                    *Source)
208fe0f0bbbSJung-uk Kim {
209fe0f0bbbSJung-uk Kim 
210fe0f0bbbSJung-uk Kim     if ((strlen (Dest) + strlen (Source)) >= DestSize)
211fe0f0bbbSJung-uk Kim     {
212fe0f0bbbSJung-uk Kim         return (TRUE);
213fe0f0bbbSJung-uk Kim     }
214fe0f0bbbSJung-uk Kim 
215fe0f0bbbSJung-uk Kim     strcat (Dest, Source);
216fe0f0bbbSJung-uk Kim     return (FALSE);
217fe0f0bbbSJung-uk Kim }
218f8146b88SJung-uk Kim 
219f8146b88SJung-uk Kim BOOLEAN
220f8146b88SJung-uk Kim AcpiUtSafeStrncat (
221f8146b88SJung-uk Kim     char                    *Dest,
222f8146b88SJung-uk Kim     ACPI_SIZE               DestSize,
223f8146b88SJung-uk Kim     char                    *Source,
224f8146b88SJung-uk Kim     ACPI_SIZE               MaxTransferLength)
225f8146b88SJung-uk Kim {
226f8146b88SJung-uk Kim     ACPI_SIZE               ActualTransferLength;
227f8146b88SJung-uk Kim 
228f8146b88SJung-uk Kim 
229f8146b88SJung-uk Kim     ActualTransferLength = ACPI_MIN (MaxTransferLength, strlen (Source));
230f8146b88SJung-uk Kim 
231f8146b88SJung-uk Kim     if ((strlen (Dest) + ActualTransferLength) >= DestSize)
232f8146b88SJung-uk Kim     {
233f8146b88SJung-uk Kim         return (TRUE);
234f8146b88SJung-uk Kim     }
235f8146b88SJung-uk Kim 
236f8146b88SJung-uk Kim     strncat (Dest, Source, MaxTransferLength);
237f8146b88SJung-uk Kim     return (FALSE);
238f8146b88SJung-uk Kim }
239f8146b88SJung-uk Kim #endif
240