]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/CodeTools/Source/Common/CommonLib.c
More renames for Tool Packages
[mirror_edk2.git] / Tools / CodeTools / Source / Common / CommonLib.c
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2004, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 CommonLib.c\r
15\r
16Abstract:\r
17\r
18 Common Library Functions\r
19 \r
20--*/\r
21\r
22#include <stdio.h>\r
23#include <string.h>\r
24#include <stdlib.h>\r
25#include "CommonLib.h"\r
26\r
27VOID\r
28PeiZeroMem (\r
29 IN VOID *Buffer,\r
30 IN UINTN Size\r
31 )\r
32/*++\r
33\r
34Routine Description:\r
35\r
36 Set Buffer to zero for Size bytes.\r
37\r
38Arguments:\r
39\r
40 Buffer - Memory to set.\r
41\r
42 Size - Number of bytes to set\r
43\r
44Returns:\r
45\r
46 None\r
47\r
48--*/\r
49{\r
50 INT8 *Ptr;\r
51\r
52 Ptr = Buffer;\r
53 while (Size--) {\r
54 *(Ptr++) = 0;\r
55 }\r
56}\r
57\r
58VOID\r
59PeiCopyMem (\r
60 IN VOID *Destination,\r
61 IN VOID *Source,\r
62 IN UINTN Length\r
63 )\r
64/*++\r
65\r
66Routine Description:\r
67\r
68 Copy Length bytes from Source to Destination.\r
69\r
70Arguments:\r
71\r
72 Destination - Target of copy\r
73\r
74 Source - Place to copy from\r
75\r
76 Length - Number of bytes to copy\r
77\r
78Returns:\r
79\r
80 None\r
81\r
82--*/\r
83{\r
84 CHAR8 *Destination8;\r
85 CHAR8 *Source8;\r
86\r
87 Destination8 = Destination;\r
88 Source8 = Source;\r
89 while (Length--) {\r
90 *(Destination8++) = *(Source8++);\r
91 }\r
92}\r
93\r
94VOID\r
95ZeroMem (\r
96 IN VOID *Buffer,\r
97 IN UINTN Size\r
98 )\r
99{\r
100 PeiZeroMem (Buffer, Size);\r
101}\r
102\r
103VOID\r
104CopyMem (\r
105 IN VOID *Destination,\r
106 IN VOID *Source,\r
107 IN UINTN Length\r
108 )\r
109{\r
110 PeiCopyMem (Destination, Source, Length);\r
111}\r
112\r
113INTN\r
114CompareGuid (\r
115 IN EFI_GUID *Guid1,\r
116 IN EFI_GUID *Guid2\r
117 )\r
118/*++\r
119\r
120Routine Description:\r
121\r
122 Compares to GUIDs\r
123\r
124Arguments:\r
125\r
126 Guid1 - guid to compare\r
127 Guid2 - guid to compare\r
128\r
129Returns:\r
130 = 0 if Guid1 == Guid2\r
131 != 0 if Guid1 != Guid2 \r
132\r
133--*/\r
134{\r
135 INT32 *g1;\r
136 INT32 *g2;\r
137 INT32 r;\r
138\r
139 //\r
140 // Compare 32 bits at a time\r
141 //\r
142 g1 = (INT32 *) Guid1;\r
143 g2 = (INT32 *) Guid2;\r
144\r
145 r = g1[0] - g2[0];\r
146 r |= g1[1] - g2[1];\r
147 r |= g1[2] - g2[2];\r
148 r |= g1[3] - g2[3];\r
149\r
150 return r;\r
151}\r
152\r
153EFI_STATUS\r
154GetFileImage (\r
155 IN CHAR8 *InputFileName,\r
156 OUT CHAR8 **InputFileImage,\r
157 OUT UINT32 *BytesRead\r
158 )\r
159/*++\r
160\r
161Routine Description:\r
162\r
163 This function opens a file and reads it into a memory buffer. The function \r
164 will allocate the memory buffer and returns the size of the buffer.\r
165\r
166Arguments:\r
167\r
168 InputFileName The name of the file to read.\r
169 InputFileImage A pointer to the memory buffer.\r
170 BytesRead The size of the memory buffer.\r
171\r
172Returns:\r
173\r
174 EFI_SUCCESS The function completed successfully.\r
175 EFI_INVALID_PARAMETER One of the input parameters was invalid.\r
176 EFI_ABORTED An error occurred.\r
177 EFI_OUT_OF_RESOURCES No resource to complete operations.\r
178\r
179--*/\r
180{\r
181 FILE *InputFile;\r
182 UINT32 FileSize;\r
183\r
184 //\r
185 // Verify input parameters.\r
186 //\r
187 if (InputFileName == NULL || strlen (InputFileName) == 0 || InputFileImage == NULL) {\r
188 return EFI_INVALID_PARAMETER;\r
189 }\r
190 //\r
191 // Open the file and copy contents into a memory buffer.\r
192 //\r
193 //\r
194 // Open the file\r
195 //\r
196 InputFile = fopen (InputFileName, "rb");\r
197 if (InputFile == NULL) {\r
198 printf ("ERROR: Could not open input file \"%s\".\n", InputFileName);\r
199 return EFI_ABORTED;\r
200 }\r
201 //\r
202 // Go to the end so that we can determine the file size\r
203 //\r
204 if (fseek (InputFile, 0, SEEK_END)) {\r
205 printf ("ERROR: System error reading input file \"%s\".\n", InputFileName);\r
206 fclose (InputFile);\r
207 return EFI_ABORTED;\r
208 }\r
209 //\r
210 // Get the file size\r
211 //\r
212 FileSize = ftell (InputFile);\r
213 if (FileSize == -1) {\r
214 printf ("ERROR: System error parsing input file \"%s\".\n", InputFileName);\r
215 fclose (InputFile);\r
216 return EFI_ABORTED;\r
217 }\r
218 //\r
219 // Allocate a buffer\r
220 //\r
221 *InputFileImage = malloc (FileSize);\r
222 if (*InputFileImage == NULL) {\r
223 fclose (InputFile);\r
224 return EFI_OUT_OF_RESOURCES;\r
225 }\r
226 //\r
227 // Reset to the beginning of the file\r
228 //\r
229 if (fseek (InputFile, 0, SEEK_SET)) {\r
230 printf ("ERROR: System error reading input file \"%s\".\n", InputFileName);\r
231 fclose (InputFile);\r
232 free (*InputFileImage);\r
233 *InputFileImage = NULL;\r
234 return EFI_ABORTED;\r
235 }\r
236 //\r
237 // Read all of the file contents.\r
238 //\r
239 *BytesRead = fread (*InputFileImage, sizeof (UINT8), FileSize, InputFile);\r
240 if (*BytesRead != sizeof (UINT8) * FileSize) {\r
241 printf ("ERROR: Reading file \"%s\"%i.\n", InputFileName);\r
242 fclose (InputFile);\r
243 free (*InputFileImage);\r
244 *InputFileImage = NULL;\r
245 return EFI_ABORTED;\r
246 }\r
247 //\r
248 // Close the file\r
249 //\r
250 fclose (InputFile);\r
251\r
252 return EFI_SUCCESS;\r
253}\r
254\r
255UINT8\r
256CalculateChecksum8 (\r
257 IN UINT8 *Buffer,\r
258 IN UINTN Size\r
259 )\r
260/*++\r
261 \r
262Routine Description:\r
263\r
264 This function calculates the value needed for a valid UINT8 checksum\r
265\r
266Arguments:\r
267\r
268 Buffer Pointer to buffer containing byte data of component.\r
269 Size Size of the buffer\r
270\r
271Returns:\r
272\r
273 The 8 bit checksum value needed.\r
274\r
275--*/\r
276{\r
277 return (UINT8) (0x100 - CalculateSum8 (Buffer, Size));\r
278}\r
279\r
280UINT8\r
281CalculateSum8 (\r
282 IN UINT8 *Buffer,\r
cc7f0a91 283 IN UINTN Size\r
878ddf1f 284 )\r
285/*++\r
286 \r
287Routine Description::\r
288\r
289 This function calculates the UINT8 sum for the requested region.\r
290\r
291Arguments:\r
292\r
293 Buffer Pointer to buffer containing byte data of component.\r
294 Size Size of the buffer\r
295\r
296Returns:\r
297\r
298 The 8 bit checksum value needed.\r
299\r
300--*/\r
301{\r
302 UINTN Index;\r
303 UINT8 Sum;\r
304\r
305 Sum = 0;\r
306\r
307 //\r
308 // Perform the byte sum for buffer\r
309 //\r
310 for (Index = 0; Index < Size; Index++) {\r
311 Sum = (UINT8) (Sum + Buffer[Index]);\r
312 }\r
313\r
314 return Sum;\r
315}\r
316\r
317UINT16\r
318CalculateChecksum16 (\r
319 IN UINT16 *Buffer,\r
320 IN UINTN Size\r
321 )\r
322/*++\r
323 \r
324Routine Description::\r
325\r
326 This function calculates the value needed for a valid UINT16 checksum\r
327\r
328Arguments:\r
329\r
330 Buffer Pointer to buffer containing byte data of component.\r
331 Size Size of the buffer\r
332\r
333Returns:\r
334\r
335 The 16 bit checksum value needed.\r
336\r
337--*/\r
338{\r
339 return (UINT16) (0x10000 - CalculateSum16 (Buffer, Size));\r
340}\r
341\r
342UINT16\r
343CalculateSum16 (\r
344 IN UINT16 *Buffer,\r
345 IN UINTN Size\r
346 )\r
347/*++\r
348 \r
349Routine Description:\r
350\r
351 This function calculates the UINT16 sum for the requested region.\r
352\r
353Arguments:\r
354\r
355 Buffer Pointer to buffer containing byte data of component.\r
356 Size Size of the buffer\r
357\r
358Returns:\r
359\r
360 The 16 bit checksum\r
361\r
362--*/\r
363{\r
364 UINTN Index;\r
365 UINT16 Sum;\r
366\r
367 Sum = 0;\r
368\r
369 //\r
370 // Perform the word sum for buffer\r
371 //\r
372 for (Index = 0; Index < Size; Index++) {\r
373 Sum = (UINT16) (Sum + Buffer[Index]);\r
374 }\r
375\r
376 return (UINT16) Sum;\r
377}\r
378\r
379EFI_STATUS\r
380PrintGuid (\r
381 IN EFI_GUID *Guid\r
382 )\r
383/*++\r
384\r
385Routine Description:\r
386\r
387 This function prints a GUID to STDOUT.\r
388\r
389Arguments:\r
390\r
391 Guid Pointer to a GUID to print.\r
392\r
393Returns:\r
394\r
395 EFI_SUCCESS The GUID was printed.\r
396 EFI_INVALID_PARAMETER The input was NULL.\r
397\r
398--*/\r
399{\r
400 if (Guid == NULL) {\r
401 printf ("ERROR: PrintGuid called with a NULL value.\n");\r
402 return EFI_INVALID_PARAMETER;\r
403 }\r
404\r
405 printf (\r
406 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",\r
407 Guid->Data1,\r
408 Guid->Data2,\r
409 Guid->Data3,\r
410 Guid->Data4[0],\r
411 Guid->Data4[1],\r
412 Guid->Data4[2],\r
413 Guid->Data4[3],\r
414 Guid->Data4[4],\r
415 Guid->Data4[5],\r
416 Guid->Data4[6],\r
417 Guid->Data4[7]\r
418 );\r
419 return EFI_SUCCESS;\r
420}\r
421\r
422EFI_STATUS\r
423PrintGuidToBuffer (\r
424 IN EFI_GUID *Guid,\r
425 IN OUT UINT8 *Buffer,\r
426 IN UINT32 BufferLen,\r
427 IN BOOLEAN Uppercase\r
428 )\r
429/*++\r
430\r
431Routine Description:\r
432\r
433 This function prints a GUID to a buffer\r
434\r
435Arguments:\r
436\r
437 Guid - Pointer to a GUID to print.\r
438 Buffer - Pointer to a user-provided buffer to print to\r
439 BufferLen - Size of the Buffer\r
440 Uppercase - If use upper case.\r
441\r
442Returns:\r
443\r
444 EFI_SUCCESS The GUID was printed.\r
445 EFI_INVALID_PARAMETER The input was NULL.\r
446 EFI_BUFFER_TOO_SMALL The input buffer was not big enough\r
447 \r
448--*/\r
449{\r
450 if (Guid == NULL) {\r
451 printf ("ERROR: PrintGuidToBuffer() called with a NULL value\n");\r
452 return EFI_INVALID_PARAMETER;\r
453 }\r
454\r
455 if (BufferLen < PRINTED_GUID_BUFFER_SIZE) {\r
456 printf ("ERORR: PrintGuidToBuffer() called with invalid buffer size\n");\r
457 return EFI_BUFFER_TOO_SMALL;\r
458 }\r
459\r
460 if (Uppercase) {\r
461 sprintf (\r
462 Buffer,\r
463 "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",\r
464 Guid->Data1,\r
465 Guid->Data2,\r
466 Guid->Data3,\r
467 Guid->Data4[0],\r
468 Guid->Data4[1],\r
469 Guid->Data4[2],\r
470 Guid->Data4[3],\r
471 Guid->Data4[4],\r
472 Guid->Data4[5],\r
473 Guid->Data4[6],\r
474 Guid->Data4[7]\r
475 );\r
476 } else {\r
477 sprintf (\r
478 Buffer,\r
479 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",\r
480 Guid->Data1,\r
481 Guid->Data2,\r
482 Guid->Data3,\r
483 Guid->Data4[0],\r
484 Guid->Data4[1],\r
485 Guid->Data4[2],\r
486 Guid->Data4[3],\r
487 Guid->Data4[4],\r
488 Guid->Data4[5],\r
489 Guid->Data4[6],\r
490 Guid->Data4[7]\r
491 );\r
492 }\r
493\r
494 return EFI_SUCCESS;\r
495}\r
3101ac6b 496\r
497#ifdef __GNUC__\r
17b23c78 498#ifndef __CYGWIN__\r
499char *strlwr(char *s)\r
3101ac6b 500{\r
17b23c78 501 char *p = s;\r
3101ac6b 502 for(;*s;s++) {\r
503 *s = tolower(*s);\r
504 }\r
17b23c78 505 return p;\r
3101ac6b 506}\r
507#endif\r
17b23c78 508#endif\r