From 7311e9641785bbcdf2925bfc91b92e43a6158a7d Mon Sep 17 00:00:00 2001 From: Abner Chang Date: Wed, 11 Aug 2021 00:07:23 +0800 Subject: RedfishPkg/RefishCrtLib: Public RefishCrtLib Public the header file, move RefishCrtLib.h from PrivateInclude/ to Include/. RefishCrtLib.lib will be public later. (Moved out from PrivateLibrary/) Signed-off-by: Abner Chang Cc: Nickle Wang Reviewed-by: Nickle Wang --- RedfishPkg/Include/Library/RedfishCrtLib.h | 242 +++++++++++++++++++++ RedfishPkg/PrivateInclude/Library/RedfishCrtLib.h | 242 --------------------- .../edk2libredfish/include/redfishPayload.h | 2 +- .../edk2libredfish/include/redfishService.h | 2 +- .../RedfishLib/edk2libredfish/include/redpath.h | 2 +- RedfishPkg/RedfishPkg.ci.yaml | 2 +- RedfishPkg/RedfishPkg.dec | 2 +- 7 files changed, 247 insertions(+), 247 deletions(-) create mode 100644 RedfishPkg/Include/Library/RedfishCrtLib.h delete mode 100644 RedfishPkg/PrivateInclude/Library/RedfishCrtLib.h (limited to 'RedfishPkg') diff --git a/RedfishPkg/Include/Library/RedfishCrtLib.h b/RedfishPkg/Include/Library/RedfishCrtLib.h new file mode 100644 index 0000000000..5e15768938 --- /dev/null +++ b/RedfishPkg/Include/Library/RedfishCrtLib.h @@ -0,0 +1,242 @@ +/** @file + Redfish CRT wrapper functions. + + Copyright (c) 2019, Intel Corporation. All rights reserved.
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef REDFISH_CRT_LIB_H_ +#define REDFISH_CRT_LIB_H_ + +#include +#include +#include +#include + +#define MAX_STRING_SIZE 0x10000000 + +// Minimum value for an object of type long long int. +#define LLONG_MIN MIN_INT64 + +// Maximum value for an object of type long long int. +#define LLONG_MAX MAX_INT64 + +// We dont support double on edk2 +#define HUGE_VAL 0 + +#if defined(MDE_CPU_X64) || defined(MDE_CPU_AARCH64) || defined(MDE_CPU_RISCV64) +// +// With GCC we would normally use SIXTY_FOUR_BIT_LONG, but MSVC needs +// SIXTY_FOUR_BIT, because 'long' is 32-bit and only 'long long' is +// 64-bit. Since using 'long long' works fine on GCC too, just do that. +// +#define SIXTY_FOUR_BIT +#elif defined(MDE_CPU_IA32) || defined(MDE_CPU_ARM) || defined(MDE_CPU_EBC) +#define THIRTY_TWO_BIT +#endif + +// +// Map all va_xxxx elements to VA_xxx defined in MdePkg/Include/Base.h +// +#if !defined(__CC_ARM) // if va_list is not already defined +#define va_list VA_LIST +#define va_arg VA_ARG +#define va_start VA_START +#define va_end VA_END +#else // __CC_ARM +#define va_start(Marker, Parameter) __va_start(Marker, Parameter) +#define va_arg(Marker, TYPE) __va_arg(Marker, TYPE) +#define va_end(Marker) ((void)0) +#endif + +// +// Definitions for global constants used by CRT library routines +// +#define INT_MAX MAX_INT32 /* Maximum (signed) int value */ +#define LONG_MAX 0X7FFFFFFFL /* max value for a long */ +#define LONG_MIN (-LONG_MAX-1) /* min value for a long */ +#define ULONG_MAX 0xFFFFFFFF /* Maximum unsigned long value */ +#define CHAR_BIT 8 /* Number of bits in a char */ + +// Maximum value for an object of type unsigned long long int. +#define ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL // 2^64 - 1 +// Maximum value for an object of type unsigned char. +#define UCHAR_MAX 255 // 2^8 - 1 + +// +// Basic types mapping +// +typedef UINTN size_t; +typedef INTN ssize_t; +typedef INT32 time_t; +typedef UINT8 __uint8_t; +typedef UINT8 sa_family_t; +typedef UINT32 uid_t; +typedef UINT32 gid_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef UINT16 uint16_t; +typedef UINT8 uint8_t; +typedef enum {false, true} bool; + +// +// File operations are not required for EFI building, +// so FILE is mapped to VOID * to pass build +// +typedef VOID *FILE; + +/** + This is the Redfish version of CRT snprintf function, this function replaces "%s" to + "%a" before invoking AsciiSPrint(). That is becasue "%s" is unicode base on edk2 + environment however "%s" is ascii code base on snprintf(). + See definitions of AsciiSPrint() for the details. + + @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated + ASCII string. + @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer. + @param FormatString A Null-terminated ASCII format string. + @param ... Variable argument list whose contents are accessed based on the + format string specified by FormatString. + + @return The number of ASCII characters in the produced output buffer not including the + Null-terminator. Zero means no string is produced or the error happens. + +**/ +UINTN +EFIAPI +RedfishAsciiSPrint ( + OUT CHAR8 *StartOfBuffer, + IN UINTN BufferSize, + IN CONST CHAR8 *FormatString, + ... + ); + +/** + This is the Redfish version of CRT vsnprintf function, this function replaces "%s" to + "%a" before invoking AsciiVSPrint(). That is because "%s" is unicode base on edk2 + environment however "%s" is ascii code base on vsnprintf(). + See definitions of AsciiVSPrint() for the details. + + @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated + ASCII string. + @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer. + @param FormatString A Null-terminated ASCII format string. + @param Marker VA_LIST marker for the variable argument list. + + @return The number of ASCII characters in the produced output buffer not including the + Null-terminator. + +**/ +UINTN +EFIAPI +RedfishAsciiVSPrint ( + OUT CHAR8 *StartOfBuffer, + IN UINTN BufferSize, + IN CONST CHAR8 *FormatString, + IN VA_LIST Marker + ); + +// +// Global variables +// +extern int errno; +extern FILE *stderr; + +// +// Function prototypes of CRT Library routines +// +void *malloc (size_t); +void *realloc (void *, size_t); +void *calloc (size_t Num, size_t Size); +void free (void *); +void *memset (void *, int, size_t); +int memcmp (const void *, const void *, size_t); +int isdigit (int); +int isspace (int); +int tolower (int); +int isupper (int); +int isxdigit (int); +int isalnum (int); +void *memcpy (void *, const void *, size_t); +void *memset (void *, int, size_t); +void *memchr (const void *, int, size_t); +int memcmp (const void *, const void *, size_t); +void *memmove (void *, const void *, size_t); +int strcmp (const char *, const char *); +int strncmp (const char *, const char *, size_t); +char *strcpy (char *, const char *); +size_t strlen (const char *); +char *strcat (char *, const char *); +char *strchr (const char *, int); +int strcasecmp (const char *, const char *); +int strncasecmp (const char *, const char *, size_t); +char *strncpy (char *, size_t, const char *, size_t); +int strncmp (const char *, const char *, size_t); +char *strrchr (const char *, int); +unsigned long strtoul (const char *, char **, int); +char * strstr (const char *s1 , const char *s2); +long strtol (const char *, char **, int); +char *strerror (int); +size_t strspn (const char *, const char *); +char * strdup (const char *str); +char * strpbrk (const char *s1, const char *s2); +unsigned long long strtoull(const char * nptr, char ** endptr, int base); +long long strtoll (const char * nptr, char ** endptr, int base); +long strtol (const char * nptr, char ** endptr, int base); +double strtod (const char * __restrict nptr, char ** __restrict endptr); +size_t strcspn (const char *, const char *); +int printf (const char *, ...); +int sscanf (const char *, const char *, ...); +FILE *fopen (const char *, const char *); +size_t fread (void *, size_t, size_t, FILE *); +size_t fwrite (const void *, size_t, size_t, FILE *); +int fclose (FILE *); +int fprintf (FILE *, const char *, ...); +int fgetc (FILE * _File); +uid_t getuid (void); +uid_t geteuid (void); +gid_t getgid (void); +gid_t getegid (void); +void qsort (void *, size_t, size_t, int (*)(const void *, const void *)); +char *getenv (const char *); +#if defined(__GNUC__) && (__GNUC__ >= 2) +void abort (void) __attribute__((__noreturn__)); +#else +void abort (void); +#endif +int toupper (int); +int Digit2Val (int); +time_t time (time_t *); + +// +// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions +// +#define strcmp AsciiStrCmp +#define memcpy(dest,source,count) CopyMem(dest,source,(UINTN)(count)) +#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch)) +#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch) +#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count))) +#define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count)) +#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE)) +#define strcpy(strDest,strSource) AsciiStrCpyS(strDest,(strlen(strSource)+1),strSource) +#define strncpy(strDest,strSource,count) AsciiStrnCpyS(strDest,(UINTN)count,strSource,(UINTN)count) +#define strncpys(strDest, DestLen, strSource,count) AsciiStrnCpyS(strDest,DestLen,strSource,(UINTN)count) +#define strcat(strDest,strSource) AsciiStrCatS(strDest,(strlen(strSource)+strlen(strDest)+1),strSource) +#define strchr(str,ch) ScanMem8((VOID *)(str),AsciiStrSize(str),(UINT8)ch) +#define strcasecmp(str1,str2) (int)AsciiStriCmp(str1,str2) +#define strstr(s1,s2) AsciiStrStr(s1,s2) +#define snprintf(buf,len,...) RedfishAsciiSPrint(buf,len,__VA_ARGS__) +#define vsnprintf(buf,len,format,marker) RedfishAsciiVSPrint((buf),(len),(format),(marker)) +#define assert(expression) ASSERT(expression) +#define offsetof(type,member) OFFSET_OF(type,member) + +#define EOF (-1) + +extern int errno; + +#define ERANGE 34 /* 34 Result too large */ + +#endif diff --git a/RedfishPkg/PrivateInclude/Library/RedfishCrtLib.h b/RedfishPkg/PrivateInclude/Library/RedfishCrtLib.h deleted file mode 100644 index 28a493d782..0000000000 --- a/RedfishPkg/PrivateInclude/Library/RedfishCrtLib.h +++ /dev/null @@ -1,242 +0,0 @@ -/** @file - Redfish CRT wrapper functions. - - Copyright (c) 2019, Intel Corporation. All rights reserved.
- (C) Copyright 2020 Hewlett Packard Enterprise Development LP
- - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef REDFISH_CRT_LIB_H_ -#define REDFISH_CRT_LIB_H_ - -#include -#include -#include -#include - -#define MAX_STRING_SIZE 0x10000000 - -// Minimum value for an object of type long long int. -#define LLONG_MIN MIN_INT64 - -// Maximum value for an object of type long long int. -#define LLONG_MAX MAX_INT64 - -// We dont support double on edk2 -#define HUGE_VAL 0 - -#if defined(MDE_CPU_X64) || defined(MDE_CPU_AARCH64) || defined(MDE_CPU_RISCV64) -// -// With GCC we would normally use SIXTY_FOUR_BIT_LONG, but MSVC needs -// SIXTY_FOUR_BIT, because 'long' is 32-bit and only 'long long' is -// 64-bit. Since using 'long long' works fine on GCC too, just do that. -// -#define SIXTY_FOUR_BIT -#elif defined(MDE_CPU_IA32) || defined(MDE_CPU_ARM) || defined(MDE_CPU_EBC) -#define THIRTY_TWO_BIT -#endif - -// -// Map all va_xxxx elements to VA_xxx defined in MdePkg/Include/Base.h -// -#if !defined(__CC_ARM) // if va_list is not already defined -#define va_list VA_LIST -#define va_arg VA_ARG -#define va_start VA_START -#define va_end VA_END -#else // __CC_ARM -#define va_start(Marker, Parameter) __va_start(Marker, Parameter) -#define va_arg(Marker, TYPE) __va_arg(Marker, TYPE) -#define va_end(Marker) ((void)0) -#endif - -// -// Definitions for global constants used by CRT library routines -// -#define INT_MAX MAX_INT32 /* Maximum (signed) int value */ -#define LONG_MAX 0X7FFFFFFFL /* max value for a long */ -#define LONG_MIN (-LONG_MAX-1) /* min value for a long */ -#define ULONG_MAX 0xFFFFFFFF /* Maximum unsigned long value */ -#define CHAR_BIT 8 /* Number of bits in a char */ - -// Maximum value for an object of type unsigned long long int. -#define ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL // 2^64 - 1 -// Maximum value for an object of type unsigned char. -#define UCHAR_MAX 255 // 2^8 - 1 - -// -// Basic types mapping -// -typedef UINTN size_t; -typedef INTN ssize_t; -typedef INT32 time_t; -typedef UINT8 __uint8_t; -typedef UINT8 sa_family_t; -typedef UINT32 uid_t; -typedef UINT32 gid_t; -typedef INT32 int32_t; -typedef UINT32 uint32_t; -typedef UINT16 uint16_t; -typedef UINT8 uint8_t; -typedef enum {false, true} bool; - -// -// File operations are not required for EFI building, -// so FILE is mapped to VOID * to pass build -// -typedef VOID *FILE; - -/** - This is the Redfish version of CRT snprintf function, this function replaces "%s" to - "%a" before invoking AsciiSPrint(). That is becasue "%s" is unicode base on edk2 - environment however "%s" is ascii code base on snprintf(). - See definitions of AsciiSPrint() for the details. - - @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated - ASCII string. - @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer. - @param FormatString A Null-terminated ASCII format string. - @param ... Variable argument list whose contents are accessed based on the - format string specified by FormatString. - - @return The number of ASCII characters in the produced output buffer not including the - Null-terminator. Zero means no string is produced or the error happens. - -**/ -UINTN -EFIAPI -RedfishAsciiSPrint ( - OUT CHAR8 *StartOfBuffer, - IN UINTN BufferSize, - IN CONST CHAR8 *FormatString, - ... - ); - -/** - This is the Redfish version of CRT vsnprintf function, this function replaces "%s" to - "%a" before invoking AsciiVSPrint(). That is because "%s" is unicode base on edk2 - environment however "%s" is ascii code base on vsnprintf(). - See definitions of AsciiVSPrint() for the details. - - @param StartOfBuffer A pointer to the output buffer for the produced Null-terminated - ASCII string. - @param BufferSize The size, in bytes, of the output buffer specified by StartOfBuffer. - @param FormatString A Null-terminated ASCII format string. - @param Marker VA_LIST marker for the variable argument list. - - @return The number of ASCII characters in the produced output buffer not including the - Null-terminator. - -**/ -UINTN -EFIAPI -RedfishAsciiVSPrint ( - OUT CHAR8 *StartOfBuffer, - IN UINTN BufferSize, - IN CONST CHAR8 *FormatString, - IN VA_LIST Marker - ); - -// -// Global variables -// -extern int errno; -extern FILE *stderr; - -// -// Function prototypes of CRT Library routines -// -void *malloc (size_t); -void *realloc (void *, size_t); -void *calloc (size_t Num, size_t Size); -void free (void *); -void *memset (void *, int, size_t); -int memcmp (const void *, const void *, size_t); -int isdigit (int); -int isspace (int); -int tolower (int); -int isupper (int); -int isxdigit (int); -int isalnum (int); -void *memcpy (void *, const void *, size_t); -void *memset (void *, int, size_t); -void *memchr (const void *, int, size_t); -int memcmp (const void *, const void *, size_t); -void *memmove (void *, const void *, size_t); -int strcmp (const char *, const char *); -int strncmp (const char *, const char *, size_t); -char *strcpy (char *, const char *); -size_t strlen (const char *); -char *strcat (char *, const char *); -char *strchr (const char *, int); -int strcasecmp (const char *, const char *); -int strncasecmp (const char *, const char *, size_t); -char *strncpy (char *, size_t, const char *, size_t); -int strncmp (const char *, const char *, size_t); -char *strrchr (const char *, int); -unsigned long strtoul (const char *, char **, int); -char * strstr (const char *s1 , const char *s2); -long strtol (const char *, char **, int); -char *strerror (int); -size_t strspn (const char *, const char *); -char * strdup (const char *str); -char * strpbrk (const char *s1, const char *s2); -unsigned long long strtoull(const char * nptr, char ** endptr, int base); -long long strtoll (const char * nptr, char ** endptr, int base); -long strtol (const char * nptr, char ** endptr, int base); -double strtod (const char * __restrict nptr, char ** __restrict endptr); -size_t strcspn (const char *, const char *); -int printf (const char *, ...); -int sscanf (const char *, const char *, ...); -FILE *fopen (const char *, const char *); -size_t fread (void *, size_t, size_t, FILE *); -size_t fwrite (const void *, size_t, size_t, FILE *); -int fclose (FILE *); -int fprintf (FILE *, const char *, ...); -int fgetc (FILE * _File); -uid_t getuid (void); -uid_t geteuid (void); -gid_t getgid (void); -gid_t getegid (void); -void qsort (void *, size_t, size_t, int (*)(const void *, const void *)); -char *getenv (const char *); -#if defined(__GNUC__) && (__GNUC__ >= 2) -void abort (void) __attribute__((__noreturn__)); -#else -void abort (void); -#endif -int toupper (int); -int Digit2Val (int); -time_t time (time_t *); - -// -// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions -// -#define strcmp AsciiStrCmp -#define memcpy(dest,source,count) CopyMem(dest,source,(UINTN)(count)) -#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch)) -#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch) -#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count))) -#define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count)) -#define strlen(str) (size_t)(AsciiStrnLenS(str,MAX_STRING_SIZE)) -#define strcpy(strDest,strSource) AsciiStrCpyS(strDest,(strlen(strSource)+1),strSource) -#define strncpy(strDest,strSource,count) AsciiStrnCpyS(strDest,(UINTN)count,strSource,(UINTN)count) -#define strncpys(strDest, DestLen, strSource,count) AsciiStrnCpyS(strDest,DestLen,strSource,(UINTN)count) -#define strcat(strDest,strSource) AsciiStrCatS(strDest,(strlen(strSource)+strlen(strDest)+1),strSource) -#define strchr(str,ch) ScanMem8((VOID *)(str),AsciiStrSize(str),(UINT8)ch) -#define strcasecmp(str1,str2) (int)AsciiStriCmp(str1,str2) -#define strstr(s1,s2) AsciiStrStr(s1,s2) -#define snprintf(buf,len,...) RedfishAsciiSPrint(buf,len,__VA_ARGS__) -#define vsnprintf(buf,len,format,marker) RedfishAsciiVSPrint((buf),(len),(format),(marker)) -#define assert(expression) ASSERT(expression) -#define offsetof(type,member) OFFSET_OF(type,member) - -#define EOF (-1) - -extern int errno; - -#define ERANGE 34 /* 34 Result too large */ - -#endif diff --git a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h index 03380d9394..43149f3c89 100644 --- a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h +++ b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h @@ -17,7 +17,7 @@ #ifndef LIBREDFISH_REDFISH_PAYLOAD_H_ #define LIBREDFISH_REDFISH_PAYLOAD_H_ -#include +#include #include #include diff --git a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h index 5bcb381c05..0215caccfc 100644 --- a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h +++ b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include diff --git a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h index bdec6098e5..24413a648a 100644 --- a/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h +++ b/RedfishPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h @@ -17,7 +17,7 @@ #ifndef LIBREDFISH_REDPATH_H_ #define LIBREDFISH_REDPATH_H_ -#include +#include #include diff --git a/RedfishPkg/RedfishPkg.ci.yaml b/RedfishPkg/RedfishPkg.ci.yaml index 1fe9bdb8d1..96133f8c28 100644 --- a/RedfishPkg/RedfishPkg.ci.yaml +++ b/RedfishPkg/RedfishPkg.ci.yaml @@ -34,8 +34,8 @@ "PrivateInclude/Crt/stdlib.h", "PrivateInclude/Crt/string.h", "PrivateInclude/Crt/time.h", - "PrivateInclude/Library/RedfishCrtLib.h", "PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c", + "Include/Library/RedfishCrtLib.h", ## ## For jansson library open source ## load.c is overrided from open source. diff --git a/RedfishPkg/RedfishPkg.dec b/RedfishPkg/RedfishPkg.dec index 846c19fd5e..9886502a0d 100644 --- a/RedfishPkg/RedfishPkg.dec +++ b/RedfishPkg/RedfishPkg.dec @@ -60,7 +60,7 @@ # CRT library is currently used by edk2 JsonLib (open source # jansson project) and edk2 RedfishLib (libredfish open source # project). - RedfishCrtLib|PrivateInclude/Library/RedfishCrtLib.h + RedfishCrtLib|Include/Library/RedfishCrtLib.h ## @libraryclass Redfish Helper Library # Library provides Redfish helper functions. -- cgit v1.2.3