ReactOS  0.4.14-dev-376-gaedba84
utnonansi.c
Go to the documentation of this file.
1 /*******************************************************************************
2  *
3  * Module Name: utnonansi - Non-ansi C library functions
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2019, 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 #define _COMPONENT ACPI_UTILITIES
49  ACPI_MODULE_NAME ("utnonansi")
50 
51 /*
52  * Non-ANSI C library functions - strlwr, strupr, stricmp, and "safe"
53  * string functions.
54  */
55 
56 /*******************************************************************************
57  *
58  * FUNCTION: AcpiUtStrlwr (strlwr)
59  *
60  * PARAMETERS: SrcString - The source string to convert
61  *
62  * RETURN: None
63  *
64  * DESCRIPTION: Convert a string to lowercase
65  *
66  ******************************************************************************/
67 
68 void
70  char *SrcString)
71 {
72  char *String;
73 
74 
76 
77 
78  if (!SrcString)
79  {
80  return;
81  }
82 
83  /* Walk entire string, lowercasing the letters */
84 
85  for (String = SrcString; *String; String++)
86  {
87  *String = (char) tolower ((int) *String);
88  }
89 }
90 
91 
92 /*******************************************************************************
93  *
94  * FUNCTION: AcpiUtStrupr (strupr)
95  *
96  * PARAMETERS: SrcString - The source string to convert
97  *
98  * RETURN: None
99  *
100  * DESCRIPTION: Convert a string to uppercase
101  *
102  ******************************************************************************/
103 
104 void
106  char *SrcString)
107 {
108  char *String;
109 
110 
112 
113 
114  if (!SrcString)
115  {
116  return;
117  }
118 
119  /* Walk entire string, uppercasing the letters */
120 
121  for (String = SrcString; *String; String++)
122  {
123  *String = (char) toupper ((int) *String);
124  }
125 }
126 
127 
128 /******************************************************************************
129  *
130  * FUNCTION: AcpiUtStricmp (stricmp)
131  *
132  * PARAMETERS: String1 - first string to compare
133  * String2 - second string to compare
134  *
135  * RETURN: int that signifies string relationship. Zero means strings
136  * are equal.
137  *
138  * DESCRIPTION: Case-insensitive string compare. Implementation of the
139  * non-ANSI stricmp function.
140  *
141  ******************************************************************************/
142 
143 int
145  char *String1,
146  char *String2)
147 {
148  int c1;
149  int c2;
150 
151 
152  do
153  {
154  c1 = tolower ((int) *String1);
155  c2 = tolower ((int) *String2);
156 
157  String1++;
158  String2++;
159  }
160  while ((c1 == c2) && (c1));
161 
162  return (c1 - c2);
163 }
164 
165 
166 #if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION) || defined (ACPI_DEBUG_OUTPUT)
167 /*******************************************************************************
168  *
169  * FUNCTION: AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat
170  *
171  * PARAMETERS: Adds a "DestSize" parameter to each of the standard string
172  * functions. This is the size of the Destination buffer.
173  *
174  * RETURN: TRUE if the operation would overflow the destination buffer.
175  *
176  * DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
177  * the result of the operation will not overflow the output string
178  * buffer.
179  *
180  * NOTE: These functions are typically only helpful for processing
181  * user input and command lines. For most ACPICA code, the
182  * required buffer length is precisely calculated before buffer
183  * allocation, so the use of these functions is unnecessary.
184  *
185  ******************************************************************************/
186 
187 BOOLEAN
188 AcpiUtSafeStrcpy (
189  char *Dest,
190  ACPI_SIZE DestSize,
191  char *Source)
192 {
193 
194  if (strlen (Source) >= DestSize)
195  {
196  return (TRUE);
197  }
198 
199  strcpy (Dest, Source);
200  return (FALSE);
201 }
202 
203 BOOLEAN
204 AcpiUtSafeStrcat (
205  char *Dest,
206  ACPI_SIZE DestSize,
207  char *Source)
208 {
209 
210  if ((strlen (Dest) + strlen (Source)) >= DestSize)
211  {
212  return (TRUE);
213  }
214 
215  strcat (Dest, Source);
216  return (FALSE);
217 }
218 
219 BOOLEAN
220 AcpiUtSafeStrncat (
221  char *Dest,
222  ACPI_SIZE DestSize,
223  char *Source,
224  ACPI_SIZE MaxTransferLength)
225 {
226  ACPI_SIZE ActualTransferLength;
227 
228 
229  ActualTransferLength = ACPI_MIN (MaxTransferLength, strlen (Source));
230 
231  if ((strlen (Dest) + ActualTransferLength) >= DestSize)
232  {
233  return (TRUE);
234  }
235 
236  strncat (Dest, Source, MaxTransferLength);
237  return (FALSE);
238 }
239 
240 void
241 AcpiUtSafeStrncpy (
242  char *Dest,
243  char *Source,
244  ACPI_SIZE DestSize)
245 {
246  /* Always terminate destination string */
247 
248  strncpy (Dest, Source, DestSize);
249  Dest[DestSize - 1] = 0;
250 }
251 
252 #endif
#define TRUE
Definition: types.h:120
void AcpiUtStrupr(char *SrcString)
Definition: utnonansi.c:105
char * strncat(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:605
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
static WCHAR String[]
Definition: stringtable.c:55
#define ACPI_MIN(a, b)
Definition: actypes.h:535
#define ACPI_MODULE_NAME(Name)
Definition: acoutput.h:216
int AcpiUtStricmp(char *String1, char *String2)
Definition: utnonansi.c:144
unsigned char BOOLEAN
unsigned char
Definition: typeof.h:29
#define ACPI_FUNCTION_ENTRY()
Definition: acoutput.h:484
int toupper(int c)
Definition: utclib.c:881
void AcpiUtStrlwr(char *SrcString)
Definition: utnonansi.c:69
_In_ const STRING * String2
Definition: rtlfuncs.h:2261
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
int tolower(int c)
Definition: utclib.c:902