From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by mx.groups.io with SMTP id smtpd.web11.11091.1611661010630720596 for ; Tue, 26 Jan 2021 03:36:50 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=XEabLEt+; spf=pass (domain: nuviainc.com, ip: 209.85.221.46, mailfrom: leif@nuviainc.com) Received: by mail-wr1-f46.google.com with SMTP id v15so16071105wrx.4 for ; Tue, 26 Jan 2021 03:36:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=mjwmnqqVYbSRnHtR/pp/4LKe+9CsAMaw3Snp3jMnooA=; b=XEabLEt+NWO6X6YWNB13pgwFGKnQ7sgAY9F9m8LvzroyV5lsoQW1FNn2jB6iomkYXz +4srWU8XrIAbYfgvMu6v1M5oPMl9EY2tzPNm3659YOtr78as1vgNYFAhpsGqNoA0S3tQ TQJkqV8DFycdP/1RYRlw/eIz5ltEfU302aXquUJDfDeqmHUVnfpof3vI5OBmyzYC5lBQ iwZix/WtFa7U27bloksGuSDWZp4NHH5IX63ylT7M6Rr6TEwiNTka8Qdv71dfVwJv6q8b jRHZnbd+nq6LB1RIu1lseF8iWVRAVDJ3Sz1OB1Opo2VggbQtc7WE9kFmCcjDvpIzOgWd hedw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=mjwmnqqVYbSRnHtR/pp/4LKe+9CsAMaw3Snp3jMnooA=; b=jqdv+ZFgjg48mCN1Serd+qTV29tS0wwxc4s5VehegY+kzLjvXdZIR+KWcf+FG8dQ/l GqVs2gczoynpJaofIDyKqMXWBc3zOhe2kfGSyLTqwDzvnjv2tk+5b5ZyBRbOi2Paaqa4 xb1VmIKzrxlRi5ZlriQbNvt+cWpf0EMK98faKRDGLPEJQ0NKRJPM1uIuSEHrJ4ER4UzT /cTHFkwrC/E/R+VNlhxiB63HfjUIK0EcRJvYwabd0bBPrXnxmsTNo58o+DwU7qOhyZ+L clEOSXNXMRMQBgCuFpmqIzjNnArIwM/GIAZ2R3x12ll/NDeAZmIL46Jc3ENeo7wcfeiR 5I7g== X-Gm-Message-State: AOAM533NN/I1TTFOAiDkPEzuDL9Lp5R9B37Vcuci48rEIEzkOqgQHoaU FK0vehsnFiu9YyxSG3+8dg4L6A== X-Google-Smtp-Source: ABdhPJyw8+6WEoBBn/5AU41kaN0uhslfcCddpkhC/3R9q7kMt9XaiQ8J6Fo8GjPyJKDlWxQvwTixaw== X-Received: by 2002:a05:6000:1189:: with SMTP id g9mr5597950wrx.230.1611661009220; Tue, 26 Jan 2021 03:36:49 -0800 (PST) Return-Path: Received: from vanye (cpc1-cmbg19-2-0-cust915.5-4.cable.virginm.net. [82.27.183.148]) by smtp.gmail.com with ESMTPSA id o17sm20199293wrp.34.2021.01.26.03.36.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 03:36:48 -0800 (PST) Date: Tue, 26 Jan 2021 11:36:46 +0000 From: "Leif Lindholm" To: Abner Chang Cc: devel@edk2.groups.io, Nickle Wang , Michael D Kinney Subject: Re: [PATCH] RedfishPkg/RedfishCrtLib: Add more CRT functions Message-ID: <20210126113646.GP1664@vanye> References: <20210125043653.20832-1-abner.chang@hpe.com> MIME-Version: 1.0 In-Reply-To: <20210125043653.20832-1-abner.chang@hpe.com> User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Jan 25, 2021 at 12:36:53 +0800, Abner Chang wrote: > Add more functions which were missed in the first time commit, > that causes the build error with EDK2 Redfish feature driver. > > strerror - We don't support this on edk2 environment. > strpbrk - Cloned this function from edk2-LibC > File operation functions - Not supported on edk2 environment. > > Signed-off-by: Abner Chang > > Cc: Nickle Wang > Cc: Leif Lindholm > Cc: Michael D Kinney > --- > .../RedfishCrtLib/RedfishCrtLib.c | 119 ++++++++++++++++++ > 1 file changed, 119 insertions(+) > > diff --git a/RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c b/RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c > index 0696341bc0..c64f14534c 100644 > --- a/RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c > +++ b/RedfishPkg/PrivateLibrary/RedfishCrtLib/RedfishCrtLib.c > @@ -15,6 +15,10 @@ > #include > > int errno = 0; > +char errnum_message [] = "We don't support to map errnum to the error message on edk2 Redfish\n"; > + > +// This is required to keep VC++ happy if you use floating-point > +int _fltused = 1; > > /** > Determine if a particular character is an alphanumeric character > @@ -465,6 +469,76 @@ strtod (const char * __restrict nptr, char ** __restrict endptr) { > return (double)0; > } > > +static UINT8 BitMask[] = { > + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 > + }; > + > +#define WHICH8(c) ((unsigned char)(c) >> 3) > +#define WHICH_BIT(c) (BitMask[((c) & 0x7)]) > +#define BITMAP64 ((UINT64 *)bitmap) > + > +static > +void > +BuildBitmap(unsigned char * bitmap, const char *s2, int n) > +{ > + unsigned char bit; > + int index; > + > + // Initialize bitmap. Bit 0 is always 1 which corresponds to '\0' > + for (BITMAP64[0] = index = 1; index < n; index++) > + BITMAP64[index] = 0; Please use {}. > + > + // Set bits in bitmap corresponding to the characters in s2 > + for (; *s2 != '\0'; s2++) { > + index = WHICH8(*s2); > + bit = WHICH_BIT(*s2); > + bitmap[index] = bitmap[index] | bit; > + } > +} > + > +/** The strpbrk function locates the first occurrence in the string pointed to > + by s1 of any character from the string pointed to by s2. > + > + @return The strpbrk function returns a pointer to the character, or a > + null pointer if no character from s2 occurs in s1. > +**/ > +char * > +strpbrk(const char *s1, const char *s2) > +{ > + UINT8 bitmap[ (((UCHAR_MAX + 1) / CHAR_BIT) + (CHAR_BIT - 1)) & ~7U]; > + UINT8 bit; > + int index; > + > + BuildBitmap( bitmap, s2, sizeof(bitmap) / sizeof(UINT64)); > + > + for( ; *s1 != '\0'; ++s1) { > + index = WHICH8(*s1); > + bit = WHICH_BIT(*s1); > + if( (bitmap[index] & bit) != 0) { > + return (char *)s1; > + } > + } > + return NULL; > +} > + > +/** The strerror function maps the number in errnum to a message string. > + Typically, the values for errnum come from errno, but strerror shall map > + any value of type int to a message. > + > + The implementation shall behave as if no library function calls the > + strerror function. > + > + @return The strerror function returns a pointer to the string, the > + contents of which are locale specific. The array pointed to > + shall not be modified by the program, but may be overwritten by > + a subsequent call to the strerror function. > +**/ > +char * > +strerror(int errnum) > +{ > + return errnum_message; > +} > + > /** > Allocate and zero-initialize array. > **/ > @@ -594,6 +668,51 @@ void qsort (void *base, size_t num, size_t width, int (*compare)(const void *, c > int fgetc(FILE * _File){ > return 0; > } > +/** > + Open stream file, we don't support file operastion on edk2 JSON library. > + > + @return 0 Unsupported > + > +**/ > +FILE *fopen (const char *filename, const char *mode) { > + return 0; NULL. > +} > +/** > + Read stream from file, we don't support file operastion on edk2 JSON library. > + > + @return 0 Unsupported > + > +**/ > +size_t fread (void * ptr, size_t size, size_t count, FILE * stream) { > + return 0; > +} > +/** > + Write stream from file, we don't support file operastion on edk2 JSON library. > + > + @return 0 Unsupported > + > +**/ > +size_t fwrite (const void * ptr, size_t size, size_t count, FILE * stream) { > + return 0; > +} > +/** > + Close file, we don't support file operastion on edk2 JSON library. > + > + @return 0 Unsupported > + > +**/ > +int fclose (FILE * stream) { > + return 0; 0 indicated success. EOF should be returned otherwise. > +} > +/** > + Write the formatted string to file, we don't support file operastion on edk2 JSON library. > + > + @return 0 Unsupported > + > +**/ > +int fprintf (FILE * stream, const char * format, ...) { > + return 0; >>From my linux manpage: "If an output error is encountered, a negative value is returned." / Leif > +} > /** > This function check if this is the formating string specifier. > > -- > 2.17.1 >