CommonLib.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. /** @file
  2. Common library assistance routines.
  3. Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef _EFI_COMMON_LIB_H
  7. #define _EFI_COMMON_LIB_H
  8. #include <Common/UefiBaseTypes.h>
  9. #include <Common/BuildVersion.h>
  10. #include <assert.h>
  11. #define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination
  12. #define MAX_LONG_FILE_PATH 500
  13. #define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)
  14. #define MAX_UINT32 ((UINT32)0xFFFFFFFF)
  15. #define MAX_UINT16 ((UINT16)0xFFFF)
  16. #define MAX_UINT8 ((UINT8)0xFF)
  17. #define ARRAY_SIZE(Array) (sizeof (Array) / sizeof ((Array)[0]))
  18. #define ASCII_RSIZE_MAX 1000000
  19. #undef RSIZE_MAX
  20. #define RSIZE_MAX 1000000
  21. #define IS_COMMA(a) ((a) == L',')
  22. #define IS_HYPHEN(a) ((a) == L'-')
  23. #define IS_DOT(a) ((a) == L'.')
  24. #define IS_LEFT_PARENTH(a) ((a) == L'(')
  25. #define IS_RIGHT_PARENTH(a) ((a) == L')')
  26. #define IS_SLASH(a) ((a) == L'/')
  27. #define IS_NULL(a) ((a) == L'\0')
  28. #define ASSERT(x) assert(x)
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. //
  33. // Function declarations
  34. //
  35. VOID
  36. PeiZeroMem (
  37. IN VOID *Buffer,
  38. IN UINTN Size
  39. )
  40. ;
  41. VOID
  42. PeiCopyMem (
  43. IN VOID *Destination,
  44. IN VOID *Source,
  45. IN UINTN Length
  46. )
  47. ;
  48. VOID
  49. ZeroMem (
  50. IN VOID *Buffer,
  51. IN UINTN Size
  52. )
  53. ;
  54. VOID
  55. CopyMem (
  56. IN VOID *Destination,
  57. IN VOID *Source,
  58. IN UINTN Length
  59. )
  60. ;
  61. INTN
  62. CompareGuid (
  63. IN EFI_GUID *Guid1,
  64. IN EFI_GUID *Guid2
  65. )
  66. ;
  67. EFI_STATUS
  68. GetFileImage (
  69. IN CHAR8 *InputFileName,
  70. OUT CHAR8 **InputFileImage,
  71. OUT UINT32 *BytesRead
  72. )
  73. ;
  74. EFI_STATUS
  75. PutFileImage (
  76. IN CHAR8 *OutputFileName,
  77. IN CHAR8 *OutputFileImage,
  78. IN UINT32 BytesToWrite
  79. )
  80. ;
  81. /*++
  82. Routine Description:
  83. This function opens a file and writes OutputFileImage into the file.
  84. Arguments:
  85. OutputFileName The name of the file to write.
  86. OutputFileImage A pointer to the memory buffer.
  87. BytesToWrite The size of the memory buffer.
  88. Returns:
  89. EFI_SUCCESS The function completed successfully.
  90. EFI_INVALID_PARAMETER One of the input parameters was invalid.
  91. EFI_ABORTED An error occurred.
  92. EFI_OUT_OF_RESOURCES No resource to complete operations.
  93. **/
  94. UINT8
  95. CalculateChecksum8 (
  96. IN UINT8 *Buffer,
  97. IN UINTN Size
  98. )
  99. ;
  100. UINT8
  101. CalculateSum8 (
  102. IN UINT8 *Buffer,
  103. IN UINTN Size
  104. )
  105. ;
  106. UINT16
  107. CalculateChecksum16 (
  108. IN UINT16 *Buffer,
  109. IN UINTN Size
  110. )
  111. ;
  112. UINT16
  113. CalculateSum16 (
  114. IN UINT16 *Buffer,
  115. IN UINTN Size
  116. )
  117. ;
  118. EFI_STATUS
  119. PrintGuid (
  120. IN EFI_GUID *Guid
  121. )
  122. ;
  123. #define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination
  124. EFI_STATUS
  125. PrintGuidToBuffer (
  126. IN EFI_GUID *Guid,
  127. IN OUT UINT8 *Buffer,
  128. IN UINT32 BufferLen,
  129. IN BOOLEAN Uppercase
  130. )
  131. ;
  132. CHAR8 *
  133. LongFilePath (
  134. IN CHAR8 *FileName
  135. );
  136. UINTN
  137. StrLen (
  138. CONST CHAR16 *String
  139. );
  140. VOID *
  141. AllocateCopyPool (
  142. UINTN AllocationSize,
  143. CONST VOID *Buffer
  144. );
  145. INTN
  146. StrnCmp (
  147. CONST CHAR16 *FirstString,
  148. CONST CHAR16 *SecondString,
  149. UINTN Length
  150. );
  151. RETURN_STATUS
  152. StrToGuid (
  153. CONST CHAR16 *String,
  154. EFI_GUID *Guid
  155. );
  156. RETURN_STATUS
  157. StrHexToBytes (
  158. CONST CHAR16 *String,
  159. UINTN Length,
  160. UINT8 *Buffer,
  161. UINTN MaxBufferSize
  162. );
  163. UINTN
  164. InternalHexCharToUintn (
  165. CHAR16 Char
  166. );
  167. VOID *
  168. InternalAllocateCopyPool (
  169. UINTN AllocationSize,
  170. CONST VOID *Buffer
  171. );
  172. BOOLEAN
  173. InternalIsDecimalDigitCharacter (
  174. CHAR16 Char
  175. );
  176. UINT32
  177. SwapBytes32 (
  178. UINT32 Value
  179. );
  180. UINT16
  181. SwapBytes16 (
  182. UINT16 Value
  183. );
  184. EFI_GUID *
  185. CopyGuid (
  186. EFI_GUID *DestinationGuid,
  187. CONST EFI_GUID *SourceGuid
  188. );
  189. UINT64
  190. WriteUnaligned64 (
  191. UINT64 *Buffer,
  192. UINT64 Value
  193. );
  194. UINT64
  195. ReadUnaligned64 (
  196. CONST UINT64 *Buffer
  197. );
  198. UINTN
  199. StrSize (
  200. CONST CHAR16 *String
  201. );
  202. UINT64
  203. StrHexToUint64 (
  204. CONST CHAR16 *String
  205. );
  206. UINT64
  207. StrDecimalToUint64 (
  208. CONST CHAR16 *String
  209. );
  210. RETURN_STATUS
  211. StrHexToUint64S (
  212. CONST CHAR16 *String,
  213. CHAR16 **EndPointer,
  214. UINT64 *Data
  215. );
  216. RETURN_STATUS
  217. StrDecimalToUint64S (
  218. CONST CHAR16 *String,
  219. CHAR16 **EndPointer, OPTIONAL
  220. UINT64 *Data
  221. );
  222. VOID *
  223. ReallocatePool (
  224. UINTN OldSize,
  225. UINTN NewSize,
  226. VOID *OldBuffer OPTIONAL
  227. );
  228. VOID *
  229. InternalReallocatePool (
  230. UINTN OldSize,
  231. UINTN NewSize,
  232. VOID *OldBuffer OPTIONAL
  233. );
  234. VOID *
  235. InternalAllocateZeroPool (
  236. UINTN AllocationSize
  237. ) ;
  238. VOID *
  239. InternalAllocatePool (
  240. UINTN AllocationSize
  241. );
  242. UINTN
  243. StrnLenS (
  244. CONST CHAR16 *String,
  245. UINTN MaxSize
  246. );
  247. CHAR16
  248. InternalCharToUpper (
  249. CHAR16 Char
  250. );
  251. INTN
  252. StrCmp (
  253. CONST CHAR16 *FirstString,
  254. CONST CHAR16 *SecondString
  255. );
  256. UINT64
  257. SwapBytes64 (
  258. UINT64 Value
  259. );
  260. UINT64
  261. InternalMathSwapBytes64 (
  262. UINT64 Operand
  263. );
  264. RETURN_STATUS
  265. StrToIpv4Address (
  266. CONST CHAR16 *String,
  267. CHAR16 **EndPointer,
  268. EFI_IPv4_ADDRESS *Address,
  269. UINT8 *PrefixLength
  270. );
  271. RETURN_STATUS
  272. StrToIpv6Address (
  273. CONST CHAR16 *String,
  274. CHAR16 **EndPointer,
  275. EFI_IPv6_ADDRESS *Address,
  276. UINT8 *PrefixLength
  277. );
  278. RETURN_STATUS
  279. StrCpyS (
  280. CHAR16 *Destination,
  281. UINTN DestMax,
  282. CONST CHAR16 *Source
  283. );
  284. RETURN_STATUS
  285. UnicodeStrToAsciiStrS (
  286. CONST CHAR16 *Source,
  287. CHAR8 *Destination,
  288. UINTN DestMax
  289. );
  290. VOID *
  291. AllocatePool (
  292. UINTN AllocationSize
  293. );
  294. UINT16
  295. WriteUnaligned16 (
  296. UINT16 *Buffer,
  297. UINT16 Value
  298. );
  299. UINT16
  300. ReadUnaligned16 (
  301. CONST UINT16 *Buffer
  302. );
  303. VOID *
  304. AllocateZeroPool (
  305. UINTN AllocationSize
  306. );
  307. BOOLEAN
  308. InternalIsHexaDecimalDigitCharacter (
  309. CHAR16 Char
  310. );
  311. BOOLEAN
  312. InternalSafeStringIsOverlap (
  313. IN VOID *Base1,
  314. IN UINTN Size1,
  315. IN VOID *Base2,
  316. IN UINTN Size2
  317. );
  318. BOOLEAN
  319. InternalSafeStringNoStrOverlap (
  320. IN CHAR16 *Str1,
  321. IN UINTN Size1,
  322. IN CHAR16 *Str2,
  323. IN UINTN Size2
  324. );
  325. BOOLEAN
  326. IsHexStr (
  327. CHAR16 *Str
  328. );
  329. UINTN
  330. Strtoi (
  331. CHAR16 *Str
  332. );
  333. VOID
  334. Strtoi64 (
  335. CHAR16 *Str,
  336. UINT64 *Data
  337. );
  338. VOID
  339. StrToAscii (
  340. CHAR16 *Str,
  341. CHAR8 **AsciiStr
  342. );
  343. CHAR16 *
  344. SplitStr (
  345. CHAR16 **List,
  346. CHAR16 Separator
  347. );
  348. /*++
  349. Routine Description:
  350. Convert FileName to the long file path, which can support larger than 260 length.
  351. Arguments:
  352. FileName - FileName.
  353. Returns:
  354. LongFilePath A pointer to the converted long file path.
  355. --*/
  356. #ifdef __cplusplus
  357. }
  358. #endif
  359. #ifdef __GNUC__
  360. #include <stdio.h>
  361. #include <sys/stat.h>
  362. #define stricmp strcasecmp
  363. #define _stricmp strcasecmp
  364. #define strnicmp strncasecmp
  365. #define strcmpi strcasecmp
  366. size_t _filelength(int fd);
  367. #ifndef __CYGWIN__
  368. char *strlwr(char *s);
  369. #endif
  370. #endif
  371. //
  372. // On windows, mkdir only has one parameter.
  373. // On unix, it has two parameters
  374. //
  375. #if defined(__GNUC__)
  376. #define mkdir(dir, perm) mkdir(dir, perm)
  377. #else
  378. #define mkdir(dir, perm) mkdir(dir)
  379. #endif
  380. #endif