From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web09.35286.1628853788407707290 for ; Fri, 13 Aug 2021 04:23:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=a286COT5; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0859c0e58f=abner.chang@hpe.com) Received: from pps.filterd (m0150242.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 17DBF17H011209; Fri, 13 Aug 2021 11:23:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=j5I3Eotw1pp2WLEe6yAhEFWs/de3eCASShnwgvxMWUY=; b=a286COT5AYZj3Ml07EJjaQCGAQyQAg9dhxKDm2DslsEXYMzogwbIMHNmjkMfV1uTpknk 9FbsY0JqHtL7VDpiSbh7O6gOpDWeNL+u1QVSsB4WrWXcpsKO7j0aiVqNaDSSRYSi1Vwz wGT9HBSCW95dPx5bHVTDp0COHc60DMo0+CqswSScVOKIY2f8IDgaDW94BAVEUWzWwVJO f+hg/EHSafmo7D3j7ESA+XTGjpU34wXEDhZ6nMAan5ViiSlG/UOcihy5zxBItxWFxtDg cFyzl29syKF4sUROWBRVCSiLEd3HbmsnDX14ujPW3uId1x67ZSMsFjnW74lPkfeacHSS 3A== Received: from g2t2354.austin.hpe.com (g2t2354.austin.hpe.com [15.233.44.27]) by mx0a-002e3701.pphosted.com with ESMTP id 3adkx1hwk6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 13 Aug 2021 11:22:57 +0000 Received: from G2W6310.americas.hpqcorp.net (g2w6310.austin.hp.com [16.197.64.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g2t2354.austin.hpe.com (Postfix) with ESMTPS id 6199BA2; Fri, 13 Aug 2021 11:22:56 +0000 (UTC) Received: from G1W8107.americas.hpqcorp.net (2002:10c1:483b::10c1:483b) by G2W6310.americas.hpqcorp.net (2002:10c5:4034::10c5:4034) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Fri, 13 Aug 2021 11:22:56 +0000 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (15.241.52.13) by G1W8107.americas.hpqcorp.net (16.193.72.59) with Microsoft SMTP Server (TLS) id 15.0.1497.18 via Frontend Transport; Fri, 13 Aug 2021 11:22:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bY2zqXnQpD2FqhiaDBbRq5M0XScnxzsKdh3Eww5TpwxE6qlGDBbviZSPGE36PuEJqYQYLIeZMBwdiLfSZok/3fWSdp2xJHvlX9+XmTPr+NGSUwlcgP8Cg6SNLE8Qu2w2sDWdQ9IC4dKvr8zHfAoJrGWUjmi+XISNSURItf/Kx6uADKOUOytG7fB2iEGjxVdvpGqTfTqCEEA8Tpve6JXxt0SOiE58NYcAYpLKWXGdKWqE18CVNarJ9/J6aiN7ojmuMWGf25Z9vvO/3odG9hsbt7MK9tlV+vhli7SbtDYnfPxFxbnVlJRJZqprh97j1QwTMBD1WInE0KrWM+S4cXcKDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j5I3Eotw1pp2WLEe6yAhEFWs/de3eCASShnwgvxMWUY=; b=DVSayVc3oj5xWr6OPGWcLtKmD72shUyeCJO8j+hIUyT3e9UzrM558CB1p6UJPavnrTpjcxeNkzk+Y3odHMgKTEVrlohNzujO03HyqofjfSakTayN9e48A2yBas1L0sxpOE/oE8CJHuVJ/5guXH/qmqpK5gdWXUi7HLAPw2UHpM/44g75Gh0KTISKRcbsMaD78VhpjPp7sAkiWfU4+KxSHOpRGZ1dYBCJHRoxOK0GqDRmlebypRjFqO/u09xLiZzvdtNfgr5pWwgwYtJ8xl6sdfcEEOKRUlqooA+RIVCZFiOXS5YcvWLKVkQ/ZOwl6lL+wL4zd4oqB6HPd1qITwzlSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0423.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7513::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4415.14; Fri, 13 Aug 2021 11:22:54 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::e5ca:7bef:3a1c:b46a]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::e5ca:7bef:3a1c:b46a%11]) with mapi id 15.20.4415.019; Fri, 13 Aug 2021 11:22:54 +0000 From: "Abner Chang" To: "Wang, Nickle (HPS SW)" , "devel@edk2.groups.io" CC: Liming Gao Subject: Re: [PATCH] RedfishClientPkg/ConvertLib: Common code and header files Thread-Topic: [PATCH] RedfishClientPkg/ConvertLib: Common code and header files Thread-Index: AQHXj0gjoljWCE7BAE2thHGCDIQQ7atvv+oAgAArIMCAAWAysA== Date: Fri, 13 Aug 2021 11:22:54 +0000 Message-ID: References: <20210812060733.28551-1-abner.chang@hpe.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: hpe.com; dkim=none (message not signed) header.d=none;hpe.com; dmarc=none action=none header.from=hpe.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c73f694b-d943-415b-95bc-08d95e4cb1d0 x-ms-traffictypediagnostic: CS1PR8401MB0423: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: y1i9wZhuptTbyHlpA+oTTw89PaqK5skffMvi8tzCv7UOLTGHSAwysQDdvYPzBcHDxjv1+aftnzF4MeypzpMiFZr7FcCqKZlwn8kvptvYPKYB781uFoFcsS5EUZ91fXbdm5sf3pB0U6LIpStG9T/Paa485D8zv6l+F/fUAiEb7j2bWxXYNrS2FOpE5d7wAnR9FQ8m4tVohuDlgwcw/PFhf9ngb9qKtAFZatnOmsgPwPJuugeIMhvkJalZN29vbLJzEUg1kqCIjtIDkGjN5Qxj1/7ukPSXNyk1/5TDXgm8a9Xe7fOlRYH3VSyoCO0jM6q3xDD5igf2EP5Knud0fo1p4gHvbsOAbO+wEKagJ/vPtwz3XJx7ZU2xtYuqKgZBOEwRVAlJrZ+yUPPwobz0GG3wbhTR573wN622Hj0GzFLewa//9BQ1lRhhBHg1+vOv0hp5L5y5D0F3xv/dExgK4iXjM738WPbWxA+OX4yO3K3Z8PDnNjs1J8AGki57vtW0DoufXSBCiJt4RKIkcnq08d+KHM0/GwdDckKSPG/LfrdInEVCxuhrgrYo3fMjckcQUT87+9u+DbROWqpt3pjuMAN8ibasknWeLO2CTpdls2xLqJQ/Wv3wudmMogl+NWL+Nr1hT6/7NPNfCm6ECzmXDEbIjNKI/7YIvbJQ8Qtjd2wMhB30wp2UFQlp4gNEm1VNFhDFlcfiklNVYfvZw3OCkbvtVQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(366004)(4326008)(52536014)(5660300002)(122000001)(71200400001)(83380400001)(33656002)(30864003)(316002)(7696005)(9686003)(66556008)(66446008)(186003)(55016002)(66946007)(86362001)(76116006)(38100700002)(2906002)(26005)(66476007)(64756008)(110136005)(19627235002)(8676002)(508600001)(8936002)(38070700005)(55236004)(53546011)(6506007)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?CSA4XdCA8Wx+pY6om1krUJfpYjLHXYXDAXaDRM0n6JSFyjm4TtjzvaaDyv6Q?= =?us-ascii?Q?FWMaipmCCCIU/mQdDbAIfYhRMigN6IHTPzqUnuIh6D2qX48oehUIkkQpxSuO?= =?us-ascii?Q?CCHoYj8jNgrfKf4VgMMMwcdwSQlzLsAiN2ZMa0yKSdhR8aH+7FGCDlM1lJKR?= =?us-ascii?Q?1srA33MvMvylsrlxM9EN6GFv/saQH7YFifcUTdPYY0NntNiMjRtZhQ314KiS?= =?us-ascii?Q?WbFvdf08BPfOD1jkxnw2X4GtxPuTzU1tUJr6XfaoZ/uemnMF2wMSb3UIVu/M?= =?us-ascii?Q?stUuEx2Pt2KUyZEdMnwOJrQCYrQfECeQM+IUU4P7QHze+lEVKvDv2s2koFRR?= =?us-ascii?Q?NcOq2TOT+4oPCHr8HSClTAUAV4+JPNs8VYLfEIOP4zWiaImXXrf24xJdcFZS?= =?us-ascii?Q?77kx1Ftl7eS7vVXeAcPRWhEaqG9wbYNoRvFNxWgehYsPM/1qoiuYxbBLJdpm?= =?us-ascii?Q?CZya4+pnss9Drgw2gEGyqwI0T+yUfaiHQUbCSvjXZkRiP+HNoDDyLmmI7uur?= =?us-ascii?Q?WbxxI4uHmLl7xgMa985s1VKY5iWVd1JRyhx6sVrufPNKUhIcyDOGZAsGwjzL?= =?us-ascii?Q?TYJUV3YURSiTMjC+/h7rCzceYq5bb7T8Ic8RsoyfKsG2jepbPSjO/RHFX6mS?= =?us-ascii?Q?PQKSNcY8fAMwBpeXsfOlHiwX2Ne9QeznPRfExhB9u6eHNS43OapMSYcC7wMT?= =?us-ascii?Q?Nvz6HGJoAsU53ktgpp71V+cqapI+QcOFCkd+xIjLi88xcnzLk8iCpoGCnYpi?= =?us-ascii?Q?byTNNzJf8tsPVbYHw+b2ae8ENjxzrLxK5A+NSCUZd85VyqSWHenmTjQwUbQn?= =?us-ascii?Q?zckDeeQ0k17TljIh0E83owOc8CPIVK4OUALLbinPVB0bxD79ZDUwlVVFfsum?= =?us-ascii?Q?/fQDoxpIAUDmRnYT4Af3zqkCU650GHnqmhlz375aopwmdCUbEhSgsF7be0HO?= =?us-ascii?Q?GSQra05G9bnQl3KNysVzDe2qPSJUAt+vYY4sKvPiPLue3zB8dcfFEeO7KO09?= =?us-ascii?Q?fHfPiv0YJcJFgVGYvkWO/tiKecxXEyohqBTtdE6lPue511qlYcJm/vbh1Z8c?= =?us-ascii?Q?gBYgPm//BVBXGcFF0GxhGZdGMBxNsat4xaQGMn4poUxA0hbPB2tefO4zy0bO?= =?us-ascii?Q?NPgMFChZG/aiXuySgUwPWeDxH2nQYSMXc+tXKSQ2rCzMjOBtKFepKkcQOkai?= =?us-ascii?Q?aMcOwEYkniy4vwx989cMPkMS+xHBX23fvDgUIl18hKNLHB+miJXr8gge7FXa?= =?us-ascii?Q?GreX700oqz0Xf6DY7praCJm/BapODGTUZ8emtC3viCbOwu2Y1P22fzEU2mPD?= =?us-ascii?Q?IGQ5CvMsVREidlvz2g2b9Bag?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: c73f694b-d943-415b-95bc-08d95e4cb1d0 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Aug 2021 11:22:54.2648 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 06FR1UJLkgl2gVUeaUUMFp0jFxzI+ldjQv1+v332sAF5NuJo8TlMMC76x5wx8ShXnswl3YwLfOKTD/NSXvQiqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0423 X-OriginatorOrg: hpe.com X-Proofpoint-GUID: ReveAR5rfKuce9ld8_nlBrwAL7J5i0IC X-Proofpoint-ORIG-GUID: ReveAR5rfKuce9ld8_nlBrwAL7J5i0IC X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391,18.0.790 definitions=2021-08-13_03:2021-08-12,2021-08-13 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 spamscore=0 priorityscore=1501 bulkscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 malwarescore=0 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108130068 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Nickle, V2 patch just sent. I added the function header to each function. However, = those files are part of DMTF project thus I didn't follow the edk2 coding s= tandard. Abner > -----Original Message----- > From: Chang, Abner (HPS SW/FW Technologist) > Sent: Thursday, August 12, 2021 10:18 PM > To: Wang, Nickle (HPS SW) ; devel@edk2.groups.io > Cc: Liming Gao > Subject: RE: [PATCH] RedfishClientPkg/ConvertLib: Common code and > header files >=20 > Thanks for catching this. I missed to add function header. >=20 > Abner >=20 > > -----Original Message----- > > From: Wang, Nickle (HPS SW) > > Sent: Thursday, August 12, 2021 7:44 PM > > To: Chang, Abner (HPS SW/FW Technologist) ; > > devel@edk2.groups.io > > Cc: Liming Gao > > Subject: RE: [PATCH] RedfishClientPkg/ConvertLib: Common code and > > header files > > > > Looks like we miss function header in this patch... > > > > Nickle > > > > -----Original Message----- > > From: Chang, Abner (HPS SW/FW Technologist) > > Sent: Thursday, August 12, 2021 2:08 PM > > To: devel@edk2.groups.io > > Cc: Wang, Nickle (HPS SW) ; Liming Gao > > > > Subject: [PATCH] RedfishClientPkg/ConvertLib: Common code and header > > files > > > > ConverterLib/ is the folder of script-generated JSON to C library for t= he > each > > Redfish schema. The common code and header files in this patch are used > by > > those libraries. > > > > Signed-off-by: Abner Chang > > Cc: Nickle Wang > > Cc: Liming Gao > > --- > > .../ConverterLib/include/RedfishCsCommon.h | 122 +++ > > .../ConverterLib/include/RedfishDataTypeDef.h | 45 + > > .../src/RedfishCsMemoryInternal.h | 36 + > > .../ConverterLib/src/RedfishCsCommon.c | 831 ++++++++++++++++++ > > .../ConverterLib/src/RedfishCsMemory.c | 144 +++ > > 5 files changed, 1178 insertions(+) > > create mode 100644 > > RedfishClientPkg/ConverterLib/include/RedfishCsCommon.h > > create mode 100644 > > RedfishClientPkg/ConverterLib/include/RedfishDataTypeDef.h > > create mode 100644 > > RedfishClientPkg/ConverterLib/src/RedfishCsMemoryInternal.h > > create mode 100644 > > RedfishClientPkg/ConverterLib/src/RedfishCsCommon.c > > create mode 100644 > RedfishClientPkg/ConverterLib/src/RedfishCsMemory.c > > > > diff --git a/RedfishClientPkg/ConverterLib/include/RedfishCsCommon.h > > b/RedfishClientPkg/ConverterLib/include/RedfishCsCommon.h > > new file mode 100644 > > index 0000000000..3810836123 > > --- /dev/null > > +++ b/RedfishClientPkg/ConverterLib/include/RedfishCsCommon.h > > @@ -0,0 +1,122 @@ > > +/** @file > > + > > + (C) Copyright 2018-2021 Hewlett Packard Enterprise Development > LP
> > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#ifndef REDFISH_CS_COMMON_H_ > > +#define REDFISH_CS_COMMON_H_ > > + > > +#include "RedfishDataTypeDef.h" > > + > > +RedfishCS_Link * InitializeLinkHead (RedfishCS_Link *LinkHead); > > +RedfishCS_Link * InsertHeadLink (RedfishCS_Link *ListHead, > > +RedfishCS_Link *Entry); RedfishCS_Link * InsertTailLink (RedfishCS_Lin= k > > +*ListHead, RedfishCS_Link *Entry); RedfishCS_Link * GetFirstLink (cons= t > > +RedfishCS_Link *List); RedfishCS_Link * GetLastLink (const > > +RedfishCS_Link *List); RedfishCS_Link * GetNextLink (const > > +RedfishCS_Link *List, const RedfishCS_Link *Node); RedfishCS_Link * > > +GetPreviousLink ( const RedfishCS_Link *List, const RedfishCS_Link > > +*Node); RedfishCS_Link *RemoveLink ( const RedfishCS_Link *Link); > > +RedfishCS_bool IsLinkEmpty (const RedfishCS_Link *LinkHead); > > +RedfishCS_bool IsLinkAtEnd (const RedfishCS_Link *LinkHead, const > > +RedfishCS_Link *ThisLink); RedfishCS_status recordCsRootMemory (void > > +*memCs); RedfishCS_status allocateRecordCsMemory (RedfishCS_void > > +*rootCs, RedfishCS_uint32 size, RedfishCS_void **Dst); RedfishCS_statu= s > > +allocateRecordCsZeroMemory (RedfishCS_void *rootCs, > RedfishCS_uint32 > > +size, RedfishCS_void **Dst); RedfishCS_status > > +allocateArrayRecordCsMemory(RedfishCS_void *rootCs, > RedfishCS_uint32 > > +ArrayInstanceSize, RedfishCS_uint64 ArraySize, RedfishCS_void **Dst); > > +RedfishCS_status allocateDuplicateStr (void *Cs, char *Str, void > > +**DstBuffer); RedfishCS_status DestoryCsMemory (RedfishCS_void > > +*rootCs); > > + > > +typedef struct _RedfishCS_char_Array RedfishCS_char_Array; typedef > > +struct _RedfishCS_int64_Array RedfishCS_int64_Array; typedef struct > > +_RedfishCS_bool_Array RedfishCS_bool_Array; typedef struct > > +_RedfishCS_Link_Array RedfishCS_Link_Array; typedef struct > > +_RedfishCS_EmptyProp_KeyValue RedfishCS_EmptyProp_KeyValue; > > + > > +typedef enum { > > + RedfishCS_Type_CS =3D 1, > > + RedfishCS_Type_CS_EmptyProp, > > + RedfishCS_Type_JSON, > > + RedfishCS_Type_Uri > > +} RedfishCS_Type; > > + > > +typedef struct _RedfishCS_Header { > > + RedfishCS_Link LinkEntry; > > + RedfishCS_Type ResourceType; > > + RedfishCS_char *KeyName; > > + RedfishCS_char *ThisUri; > > +} RedfishCS_Header; > > + > > +typedef struct _RedfishCS_Type_Uri_Data { > > + RedfishCS_Header Header; > > + RedfishCS_char *Uri; > > +} RedfishCS_Type_Uri_Data; > > + > > +typedef struct _RedfishCS_Type_CS_Data { > > + RedfishCS_Header Header; > > + // > > + // Followed by C structure of resource. > > + // > > +} RedfishCS_Type_CS_Data; > > + > > +typedef struct _RedfishCS_Type_JSON_Data { > > + RedfishCS_Header Header; > > + RedfishCS_char *JsonText; > > +} RedfishCS_Type_JSON_Data; > > + > > +typedef struct _RedfishCS_Number { > > + RedfishCS_uint16 Value; > > + RedfishCS_uint16 MaxValue; > > + RedfishCS_uint16 MinValue; > > +} RedfishCS_Number; > > + > > +typedef struct _RedfishCS_char_Array { > > + RedfishCS_char_Array *Next; > > + RedfishCS_char *ArrayValue; > > +} RedfishCS_char_Array; > > + > > +typedef struct _RedfishCS_int64_Array { > > + RedfishCS_int64_Array *Next; > > + RedfishCS_int64 *ArrayValue; > > +} RedfishCS_int64_Array; > > + > > +typedef struct _RedfishCS_bool_Array { > > + RedfishCS_bool_Array *Next; > > + RedfishCS_bool *ArrayValue; > > +} RedfishCS_bool_Array; > > + > > +typedef struct _RedfishCS_Link_Array { > > + RedfishCS_Link_Array *Next; > > + RedfishCS_Link *ArrayValue; > > +} RedfishCS_Link_Array; > > + > > +typedef enum { > > + RedfishCS_Vague_DataType_String =3D 1, > > + RedfishCS_Vague_DataType_Int64, > > + RedfishCS_Vague_DataType_Bool > > +} RedfishCS_Vague_DataType; > > + > > +typedef union { > > + RedfishCS_char *CharPtr; > > + RedfishCS_bool *BoolPtr; > > + RedfishCS_int64 *Int64Ptr; > > +} RedfishCS_Vague_Ptr; > > + > > +typedef struct _RedfishCS_Vague { > > + RedfishCS_Vague_DataType DataType; > > + RedfishCS_Vague_Ptr DataValue; > > +} RedfishCS_Vague; > > + > > +typedef struct _RedfishCS_EmptyProp_KeyValue { > > + RedfishCS_EmptyProp_KeyValue *NextKeyValuePtr; > > + RedfishCS_char *KeyNamePtr; > > + RedfishCS_Vague *Value; > > +} RedfishCS_EmptyProp_KeyValue; > > + > > +typedef struct _RedfishCS_Type_EmptyProp_CS_Data { > > + RedfishCS_Header Header; > > + RedfishCS_uint32 NunmOfProperties; > > + RedfishCS_EmptyProp_KeyValue *KeyValuePtr; } > > +RedfishCS_Type_EmptyProp_CS_Data; > > + > > +#endif > > diff --git a/RedfishClientPkg/ConverterLib/include/RedfishDataTypeDef.h > > b/RedfishClientPkg/ConverterLib/include/RedfishDataTypeDef.h > > new file mode 100644 > > index 0000000000..8c903482aa > > --- /dev/null > > +++ b/RedfishClientPkg/ConverterLib/include/RedfishDataTypeDef.h > > @@ -0,0 +1,45 @@ > > +/** @file > > + > > + (C) Copyright 2018-2021 Hewlett Packard Enterprise Development > LP
> > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > +#ifndef REDFISH_CS_DATA_TYPE_H_ > > +#define REDFISH_CS_DATA_TYPE_H_ > > + > > +#include > > + > > +typedef char RedfishCS_char; > > +typedef int RedfishCS_bool; > > +typedef signed char RedfishCS_int8; > > +typedef unsigned char RedfishCS_uint8; > > +typedef int RedfishCS_int16; > > +typedef int RedfishCS_int; > > +typedef unsigned int RedfishCS_uint16; > > +typedef long int RedfishCS_int32; > > +typedef unsigned long int RedfishCS_uint32; > > +typedef long long RedfishCS_int64; > > +typedef unsigned long long RedfishCS_uint64; > > +typedef void RedfishCS_void; > > + > > +#define RedfishCS_boolean_false 0 > > +#define RedfishCS_boolean_true 1 > > + > > +typedef RedfishCS_int64 RedfishCS_status; > > +#define RedfishCS_status_success 0 > > +#define RedfishCS_status_unsupported -1 > > +#define RedfishCS_status_invalid_parameter -2 > > +#define RedfishCS_status_insufficient_memory -3 > > +#define RedfishCS_status_not_found -4 > > +#define RedfishCS_status_unknown_error -5 > > + > > +typedef struct _RedfishCS_Link RedfishCS_Link; struct _RedfishCS_Link = { > > + RedfishCS_Link *BackLink; > > + RedfishCS_Link *ForwardLink; > > +}; > > + > > +#endif > > + > > + > > diff --git a/RedfishClientPkg/ConverterLib/src/RedfishCsMemoryInternal.= h > > b/RedfishClientPkg/ConverterLib/src/RedfishCsMemoryInternal.h > > new file mode 100644 > > index 0000000000..689aff9519 > > --- /dev/null > > +++ b/RedfishClientPkg/ConverterLib/src/RedfishCsMemoryInternal.h > > @@ -0,0 +1,36 @@ > > +/** @file > > + > > + (C) Copyright 2018-2021 Hewlett Packard Enterprise Development > LP
> > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef > > +REDFISH_CS_MEMORY_INTERNAL_H_ #define > > REDFISH_CS_MEMORY_INTERNAL_H_ > > + > > +#include "RedfishDataTypeDef.h" > > + > > +RedfishCS_Link * InitializeLinkHead (RedfishCS_Link *LinkHead); > > +RedfishCS_Link * InsertHeadLink (RedfishCS_Link *ListHead, > > +RedfishCS_Link *Entry); RedfishCS_Link * InsertTailLink (RedfishCS_Lin= k > > +*ListHead, RedfishCS_Link *Entry); RedfishCS_Link * GetFirstLink (cons= t > > +RedfishCS_Link *List); RedfishCS_Link * GetLastLink (const > > +RedfishCS_Link *List); RedfishCS_Link * GetNextLink (const > > +RedfishCS_Link *List, const RedfishCS_Link *Node); RedfishCS_Link * > > +GetPreviousLink ( const RedfishCS_Link *List, const RedfishCS_Link > > +*Node); RedfishCS_Link *RemoveLink ( const RedfishCS_Link *Link); > > +RedfishCS_bool IsLinkEmpty (const RedfishCS_Link *LinkHead); > > +RedfishCS_bool IsLinkAtEnd (const RedfishCS_Link *LinkHead, const > > +RedfishCS_Link *ThisLink); > > + > > +typedef struct _RedfishCS_Internal_memory_link { > > + RedfishCS_Link nextLink; > > + void *memoryPtr; > > +} RedfishCS_Internal_memory_link; > > + > > +typedef struct _RedfishCS_Internal_memory_root { > > + RedfishCS_Link nextRoot; > > + RedfishCS_Link memBlocks; > > + void *CsPtr; > > +} RedfishCS_Internal_memory_root; > > + > > +#endif > > + > > + > > diff --git a/RedfishClientPkg/ConverterLib/src/RedfishCsCommon.c > > b/RedfishClientPkg/ConverterLib/src/RedfishCsCommon.c > > new file mode 100644 > > index 0000000000..cb80121831 > > --- /dev/null > > +++ b/RedfishClientPkg/ConverterLib/src/RedfishCsCommon.c > > @@ -0,0 +1,831 @@ > > +/** @file > > + > > + (C) Copyright 2018-2021 Hewlett Packard Enterprise Development > LP
> > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "RedfishCsCommon.h" > > +#include "RedfishCsMemoryInternal.h" > > +#include > > +#include > > +#include > > + > > +RedfishCS_status GetRedfishPropertyVague(void *Cs, json_t *JsonObj, > > +char *Key, RedfishCS_Vague **DstBuffer); > > + > > +RedfishCS_Link *InitializeLinkHead (RedfishCS_Link *ListHead) { > > + ListHead->ForwardLink =3D ListHead; > > + ListHead->BackLink =3D ListHead; > > + return ListHead; > > +} > > + > > +RedfishCS_Link *InsertHeadLink (RedfishCS_Link *ListHead, > > +RedfishCS_Link *Entry) { > > + Entry->ForwardLink =3D ListHead->ForwardLink; > > + Entry->BackLink =3D ListHead; > > + Entry->ForwardLink->BackLink =3D Entry; > > + ListHead->ForwardLink =3D Entry; > > + return ListHead; > > +} > > + > > +RedfishCS_Link * InsertTailLink (RedfishCS_Link *ListHead, > > +RedfishCS_Link *Entry) { > > + Entry->ForwardLink =3D ListHead; > > + Entry->BackLink =3D ListHead->BackLink; > > + Entry->BackLink->ForwardLink =3D Entry; > > + ListHead->BackLink =3D Entry; > > + return ListHead; > > +} > > + > > +RedfishCS_Link *GetFirstLink (const RedfishCS_Link *List) { > > + return List->ForwardLink; > > +} > > + > > +RedfishCS_Link *GetLastLink (const RedfishCS_Link *List) { > > + return List->BackLink; > > +} > > + > > +RedfishCS_Link *GetNextLink (const RedfishCS_Link *List, const > > +RedfishCS_Link *Node) { > > + return Node->ForwardLink; > > +} > > + > > +RedfishCS_Link *GetPreviousLink (const RedfishCS_Link *List, const > > +RedfishCS_Link *Node) { > > + return Node->BackLink; > > +} > > +RedfishCS_Link *RemoveLink ( const RedfishCS_Link *Link) { > > + Link->ForwardLink->BackLink =3D Link->BackLink; > > + Link->BackLink->ForwardLink =3D Link->ForwardLink; > > + return Link->ForwardLink; > > +} > > + > > +RedfishCS_bool IsLinkEmpty (const RedfishCS_Link *LinkHead) { return > > +(RedfishCS_bool)(LinkHead->ForwardLink =3D=3D LinkHead); } > > + > > +RedfishCS_bool IsLinkAtEnd (const RedfishCS_Link *LinkHead, const > > +RedfishCS_Link *ThisLink) { > > + return (RedfishCS_bool)(ThisLink->ForwardLink =3D=3D LinkHead); } > > + > > +RedfishCS_status allocateDuplicateStr (void *Cs, char *Str, void > > +**DstBuffer) { > > + RedfishCS_status Status; > > + > > + if (Str =3D=3D NULL || strlen(Str) =3D=3D 0) { > > + *DstBuffer =3D NULL; > > + return RedfishCS_status_success; > > + } > > + Status =3D allocateRecordCsMemory(Cs, (RedfishCS_int)strlen(Str) + 1= , > > +(void **)DstBuffer); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + memcpy (*DstBuffer, Str, strlen(Str) + 1); > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status CreateCsUriByOdataId (json_t *JsonOj, RedfishCS_char > > +*ParentUri, RedfishCS_Type_Uri_Data **CsTypeUriData) { > > + json_t *TempJsonObj; > > + RedfishCS_Type_Uri_Data *CsTypeUri; > > + > > + CsTypeUri =3D NULL; > > + TempJsonObj =3D json_object_get(JsonOj, "@odata.id"); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + CsTypeUri =3D malloc (sizeof (RedfishCS_Type_Uri_Data)); > > + if (CsTypeUri =3D=3D NULL) { > > + return RedfishCS_status_insufficient_memory; > > + } > > + InitializeLinkHead (&CsTypeUri->Header.LinkEntry); > > + CsTypeUri->Header.ResourceType =3D RedfishCS_Type_Uri; > > + CsTypeUri->Header.ThisUri =3D ParentUri; > > + CsTypeUri->Header.KeyName =3D (RedfishCS_char *)strdup ("@odata.id")= ; > > + CsTypeUri->Uri =3D (RedfishCS_char *)strdup (json_string_value > > +(TempJsonObj)); > > + *CsTypeUriData =3D CsTypeUri; > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status CreateCsUriByNode (void *Cs, json_t *JsonOj, > > +RedfishCS_char *NodeName, RedfishCS_char *ParentUri, > > +RedfishCS_Type_Uri_Data **CsTypeUriData) { > > + json_t *TempJsonObj; > > + json_t *TempJsonObj2; > > + RedfishCS_Type_Uri_Data *CsTypeUri; > > + RedfishCS_status Status; > > + > > + CsTypeUri =3D NULL; > > + > > + if (NodeName !=3D NULL) { > > + TempJsonObj =3D json_object_get(JsonOj, NodeName); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + } else { > > + if (JsonOj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + TempJsonObj =3D JsonOj; > > + } > > + > > + TempJsonObj2 =3D json_object_get(TempJsonObj, "@odata.id"); > > + if (TempJsonObj2 !=3D NULL) { > > + Status =3D allocateRecordCsMemory (Cs, sizeof > (RedfishCS_Type_Uri_Data), > > (void **)&CsTypeUri); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + InitializeLinkHead (&CsTypeUri->Header.LinkEntry); > > + CsTypeUri->Header.ResourceType =3D RedfishCS_Type_Uri; > > + CsTypeUri->Header.ThisUri =3D ParentUri; > > + Status =3D allocateDuplicateStr (Cs, NodeName, (void **)&CsTypeUri= - > > >Header.KeyName); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + *CsTypeUriData =3D CsTypeUri; > > + Status =3D allocateDuplicateStr (Cs, (char *)json_string_value > > (TempJsonObj2), (void **)&CsTypeUri->Uri); > > + return Status; > > + } > > + return RedfishCS_status_invalid_parameter; > > +} > > + > > +RedfishCS_status CreateCsJsonByNode (void *Cs, json_t *JsonObj, > > +RedfishCS_char *NodeName, RedfishCS_char *ParentUri, > > +RedfishCS_Type_JSON_Data **CsTypeJsonData) { > > + json_t *TempJsonObj; > > + RedfishCS_Type_JSON_Data *CsTypeJson; > > + RedfishCS_char *TempChar; > > + RedfishCS_char *DumpStr; > > + RedfishCS_status Status; > > + > > + CsTypeJson =3D NULL; > > + if (NodeName !=3D NULL) { > > + TempJsonObj =3D json_object_get(JsonObj, NodeName); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + } else { > > + // Dump JSON from JsonObj. > > + TempJsonObj =3D JsonObj; > > + } > > + TempChar =3D json_dumps ((const json_t *)TempJsonObj, JSON_INDENT > > (2)); > > + if (TempChar !=3D NULL) { > > + Status =3D allocateRecordCsMemory (Cs, sizeof > > (RedfishCS_Type_JSON_Data), (void **)&CsTypeJson); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + Status =3D allocateRecordCsMemory (Cs, (RedfishCS_int)strlen (Temp= Char) > > + 1, (void **)&DumpStr); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + strncpy (DumpStr, TempChar, strlen (TempChar) + 1); > > + InitializeLinkHead(&CsTypeJson->Header.LinkEntry); > > + CsTypeJson->Header.ResourceType =3D RedfishCS_Type_JSON; > > + CsTypeJson->Header.ThisUri =3D ParentUri; > > + Status =3D allocateDuplicateStr (Cs, NodeName, (void **)&CsTypeJso= n- > > >Header.KeyName); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + CsTypeJson->JsonText =3D DumpStr; > > + *CsTypeJsonData =3D CsTypeJson; > > + return RedfishCS_status_success; > > + } > > + return RedfishCS_status_invalid_parameter; > > +} > > + > > +RedfishCS_status CreateEmptyPropCsJson(RedfishCS_void *Cs, json_t > > +*JsonObj, RedfishCS_char *NodeName, RedfishCS_char *ParentUri, > > +RedfishCS_Type_EmptyProp_CS_Data **CsTypeEmptyPropCSData, > > +RedfishCS_uint32 NunmOfProperties) { > > + json_t *TempJsonObj; > > + RedfishCS_status Status; > > + RedfishCS_Type_EmptyProp_CS_Data *CsTypeEmptyPropCS; > > + RedfishCS_char *KeyName; > > + json_t *KeyValueObj; > > + RedfishCS_void *n; > > + RedfishCS_EmptyProp_KeyValue **KeyValuePtr; > > + RedfishCS_EmptyProp_KeyValue *KeyValue; > > + > > + CsTypeEmptyPropCS =3D NULL; > > + if (NodeName !=3D NULL) { > > + TempJsonObj =3D json_object_get(JsonObj, NodeName); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + } > > + Status =3D allocateRecordCsMemory(Cs, > > + sizeof(RedfishCS_Type_EmptyProp_CS_Data), (void > > **)&CsTypeEmptyPropCS); if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + InitializeLinkHead(&CsTypeEmptyPropCS->Header.LinkEntry); > > + CsTypeEmptyPropCS->Header.ResourceType =3D > > RedfishCS_Type_CS_EmptyProp; > > + CsTypeEmptyPropCS->Header.ThisUri =3D ParentUri; Status =3D > > + allocateDuplicateStr(Cs, NodeName, (void > > + **)&CsTypeEmptyPropCS->Header.KeyName); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + CsTypeEmptyPropCS->NunmOfProperties =3D NunmOfProperties; // // > > + Create instance for each key-value. > > + // > > + KeyValuePtr =3D &CsTypeEmptyPropCS->KeyValuePtr; > > + json_object_foreach_safe(TempJsonObj, n, KeyName, KeyValueObj) { > > + Status =3D allocateRecordCsMemory(Cs, > > sizeof(RedfishCS_EmptyProp_KeyValue), (void **)&KeyValue); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + Status =3D allocateDuplicateStr(Cs, (char *)KeyName, (void > **)&KeyValue- > > >KeyNamePtr); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + Status =3D GetRedfishPropertyVague(Cs, TempJsonObj, (char *)KeyNam= e, > > &KeyValue->Value); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + > > + *KeyValuePtr =3D KeyValue; > > + KeyValuePtr =3D &KeyValue->NextKeyValuePtr; } > > + > > + *CsTypeEmptyPropCSData =3D CsTypeEmptyPropCS; > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_bool CheckSupportedPropTypeInEmptyProperty(json_t > > *JsonObj) { > > + // > > + // Only support below property types for the property is declared as > > + // empty property in schema. > > + // e.g. "properties": {} > > + // > > + if (json_is_string(JsonObj) || > > + json_is_integer(JsonObj) || > > + //json_is_real(JsonObj) || > > + json_is_number(JsonObj) || > > + json_is_boolean(JsonObj)) { > > + return RedfishCS_boolean_true; > > + } > > + return RedfishCS_boolean_false; > > +} > > + > > +RedfishCS_bool CheckEmptyPropJsonObject(json_t *JsonObj, > > +RedfishCS_uint32 *NumOfProperty) { > > + RedfishCS_char *NewKey; > > + json_t *Value; > > + RedfishCS_void *n; > > + RedfishCS_uint32 Num; > > + > > + Num =3D 0; > > + json_object_foreach_safe(JsonObj, n, NewKey, Value) { > > + if (!CheckSupportedPropTypeInEmptyProperty(Value)) { > > + return RedfishCS_boolean_false; > > + } > > + Num ++; > > + } > > + if (NumOfProperty !=3D NULL) { > > + *NumOfProperty =3D Num; > > + } > > + return RedfishCS_boolean_true; > > +} > > + > > +RedfishCS_bool SupportedRedfishResource (RedfishCS_char > *Odata_Type, > > +RedfishCS_char *NameSpace, RedfishCS_char *Version, RedfishCS_char > > +*DataType) { > > + RedfishCS_char *TargetDataType; > > + > > + if (Odata_Type =3D=3D NULL || NameSpace =3D=3D NULL || DataType =3D= =3D NULL) { > > + return RedfishCS_boolean_false; > > + } > > + if (Version !=3D NULL) { > > + TargetDataType =3D malloc(strlen(NameSpace) + strlen(Version) + > > strlen(DataType) + 16); // Plus 16 bytes to make more room. > > + = // Actually we just need 1 > byte > > for "#" > > + = // Two bytes for "." and one > > byte for NULL terminator. > > + } else { > > + TargetDataType =3D malloc(strlen(NameSpace) + strlen(DataType) + 1= 6); > // > > Plus 16 bytes to make more room. > > + = // Actually we just need 1 byte for "#" > > + = // Two bytes for "." and one byte for > > NULL terminator. > > + } > > + if (TargetDataType =3D=3D NULL) { > > + return RedfishCS_boolean_false; > > + } > > + TargetDataType [0] =3D 0; // Insert NULL terminator. > > + strcat (TargetDataType, "#"); > > + strcat (TargetDataType, NameSpace); > > + strcat (TargetDataType, "."); > > + if (Version !=3D NULL && (strcmp (Version, "noversioned") !=3D 0)) { > > + strcat(TargetDataType, Version); > > + strcat (TargetDataType, "."); > > + } > > + strcat (TargetDataType, DataType); > > + if (strcmp (Odata_Type, TargetDataType) =3D=3D 0) { > > + return RedfishCS_boolean_true; > > + } > > + free (TargetDataType); > > + return RedfishCS_boolean_false; > > +} > > + > > +RedfishCS_status > > +CreateCsUriOrJsonByNode (void *Cs, json_t *JsonObj, RedfishCS_char > > +*NodeName, RedfishCS_char *ParentUri, RedfishCS_Link *LinkHead) { > > + json_t *JsonObjTemp; > > + RedfishCS_Type_Uri_Data *CsTypeUri; > > + RedfishCS_Type_JSON_Data *CsTypeJson; > > + RedfishCS_status Status; > > + > > + Status =3D RedfishCS_status_invalid_parameter; > > + JsonObjTemp =3D json_object_get (JsonObj, NodeName); > > + if (JsonObjTemp =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + if (json_object_size(JsonObjTemp) =3D=3D 1) { > > + Status =3D CreateCsUriByNode (Cs, JsonObj, NodeName, ParentUri, > > &CsTypeUri); > > + if (Status =3D=3D RedfishCS_status_success) { > > + InsertTailLink (LinkHead, &CsTypeUri->Header.LinkEntry); > > + return RedfishCS_status_success; > > + } > > + } else { > > + Status =3D CreateCsJsonByNode (Cs, JsonObj, NodeName, ParentUri, > > &CsTypeJson); > > + if (Status =3D=3D RedfishCS_status_success) { > > + InsertTailLink (LinkHead, &CsTypeJson->Header.LinkEntry); > > + return RedfishCS_status_success; > > + } > > + } > > + return Status; > > +} > > + > > +RedfishCS_status > > +CreateCsUriOrJsonByNodeArray (void *Cs, json_t *JsonObj, > > RedfishCS_char > > +*NodeName, RedfishCS_char *ParentUri, RedfishCS_Link *LinkHead) { > > + json_t *JsonObjTemp; > > + json_t *JsonObjArray; > > + RedfishCS_Type_Uri_Data *CsTypeUri; > > + RedfishCS_Type_JSON_Data *CsTypeJson; > > + RedfishCS_status Status; > > + RedfishCS_uint16 ArrayIndex; > > + > > + Status =3D RedfishCS_status_invalid_parameter; > > + JsonObjTemp =3D json_object_get (JsonObj, NodeName); > > + if (JsonObjTemp =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + if (json_array_size (JsonObjTemp) =3D=3D 0) { > > + return RedfishCS_status_success; > > + } > > + for (ArrayIndex =3D 0; ArrayIndex < (RedfishCS_uint16)json_array_siz= e > > (JsonObjTemp); ArrayIndex ++) { > > + JsonObjArray =3D json_array_get (JsonObjTemp, (size_t)ArrayIndex); > > + if (JsonObjArray =3D=3D NULL) { > > + continue; > > + } > > + if (json_object_size(JsonObjArray) =3D=3D 1) { > > + Status =3D CreateCsUriByNode (Cs, JsonObjArray, NULL, ParentUri, > > &CsTypeUri); > > + if (Status =3D=3D RedfishCS_status_success) { > > + InsertTailLink (LinkHead, &CsTypeUri->Header.LinkEntry); > > + } > > + } else { > > + Status =3D CreateCsJsonByNode (Cs, JsonObjArray, NULL, ParentUri= , > > &CsTypeJson); > > + if (Status =3D=3D RedfishCS_status_success) { > > + InsertTailLink (LinkHead, &CsTypeJson->Header.LinkEntry); > > + } > > + } > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status > > +CreateJsonPayloadAndCs (char *JsonRawText, char *ResourceType, char > > +*ResourceVersion, char *TypeName, json_t **JsonObjReturned, void > **Cs, > > +int size) { > > + json_t *TempJsonObj; > > + RedfishCS_char *TempChar; > > + RedfishCS_Header *Header; > > + void *TempCS; > > + > > + if (JsonRawText =3D=3D NULL || > > + ResourceType =3D=3D NULL || > > + TypeName =3D=3D NULL || > > + Cs =3D=3D NULL || > > + size =3D=3D 0 > > + ) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + *JsonObjReturned =3D json_loads(JsonRawText, 0, NULL); > > + if (*JsonObjReturned =3D=3D NULL) { > > + return RedfishCS_status_unknown_error; > > + } > > + TempJsonObj =3D json_object_get(*JsonObjReturned, "@odata.type"); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + TempChar =3D (RedfishCS_char *)json_string_value(TempJsonObj); > > + if (TempChar =3D=3D NULL || ! SupportedRedfishResource (TempChar, > > ResourceType, ResourceVersion, TypeName)) { > > + return RedfishCS_status_unsupported; > > + } > > + TempCS =3D malloc (size); > > + if (TempCS =3D=3D NULL) { > > + return RedfishCS_status_insufficient_memory; > > + } > > + memset (TempCS, 0, size); > > + Header =3D (RedfishCS_Header *)TempCS; > > + Header->ResourceType =3D RedfishCS_Type_CS; > > + Header->KeyName =3D NULL; > > + InitializeLinkHead (&Header->LinkEntry); > > + *Cs =3D TempCS; > > + return recordCsRootMemory (TempCS); > > +} > > + > > +RedfishCS_status GetRedfishPropertyStr (void *Cs, json_t *JsonObj, cha= r > > +*Key, RedfishCS_char **DstBuffer) { > > + json_t *TempJsonObj; > > + RedfishCS_status Status; > > + > > + if (DstBuffer =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + *DstBuffer =3D NULL; > > + > > + TempJsonObj =3D json_object_get(JsonObj, Key); > > + if (TempJsonObj =3D=3D NULL){ > > + return RedfishCS_status_not_found; > > + } > > + Status =3D allocateDuplicateStr (Cs, (char > > +*)json_string_value(TempJsonObj), (void **)DstBuffer); > > + return Status; > > +} > > + > > +RedfishCS_status GetRedfishPropertyBoolean (void *Cs, json_t *JsonObj, > > +char *Key, RedfishCS_bool **DstBuffer) { > > + json_t *TempJsonObj; > > + RedfishCS_status Status; > > + > > + if (DstBuffer =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + TempJsonObj =3D json_object_get(JsonObj, Key); > > + if (TempJsonObj =3D=3D NULL){ > > + return RedfishCS_status_not_found; > > + } > > + Status =3D allocateRecordCsMemory(Cs, sizeof(RedfishCS_bool), (void > > +**)DstBuffer); > > + if (Status !=3D RedfishCS_status_success){ > > + return Status; > > + } > > + if (json_is_true(TempJsonObj)) { > > + **DstBuffer =3D RedfishCS_boolean_true; > > + } else { > > + **DstBuffer =3D RedfishCS_boolean_false; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status GetRedfishPropertyInt64 (void *Cs, json_t *JsonObj, > > +char *Key, RedfishCS_int64 **Dst) { > > + RedfishCS_status Status; > > + const json_t *TempJsonObj; > > + > > + if (Dst =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + > > + TempJsonObj =3D json_object_get(JsonObj, Key); > > + if (TempJsonObj =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + Status =3D allocateRecordCsMemory(Cs, sizeof(RedfishCS_int64), (void > > +**)Dst); > > + if (Status !=3D RedfishCS_status_success){ > > + return Status; > > + } > > + **Dst =3D (RedfishCS_int64)json_integer_value(TempJsonObj); > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status GetRedfishPropertyVague (void *Cs, json_t *JsonObj, > > +char *Key, RedfishCS_Vague **DstBuffer) { > > + json_t *TempJsonObj; > > + RedfishCS_status Status; > > + RedfishCS_Vague *VagueData; > > + > > + if (DstBuffer =3D=3D NULL) { > > + return RedfishCS_status_not_found; > > + } > > + TempJsonObj =3D json_object_get(JsonObj, Key); if (TempJsonObj =3D= =3D > > + NULL){ > > + return RedfishCS_status_not_found; > > + } > > + Status =3D allocateRecordCsMemory(Cs, sizeof(RedfishCS_Vague), (void > > + **)&VagueData); if (Status !=3D RedfishCS_status_success){ > > + return Status; > > + } > > + > > + if (json_is_string(TempJsonObj)) { > > + VagueData->DataType =3D RedfishCS_Vague_DataType_String; > > + Status =3D GetRedfishPropertyStr (Cs, JsonObj, Key, > > +&VagueData->DataValue.CharPtr); > > + } else if (json_is_integer(TempJsonObj)) { > > + VagueData->DataType =3D RedfishCS_Vague_DataType_Int64; > > + Status =3D GetRedfishPropertyInt64 (Cs, JsonObj, Key, > > +&VagueData->DataValue.Int64Ptr); > > + } else if (json_is_boolean(TempJsonObj)) { > > + VagueData->DataType =3D RedfishCS_Vague_DataType_Bool; > > + Status =3D GetRedfishPropertyBoolean (Cs, JsonObj, Key, > > +&VagueData->DataValue.BoolPtr); > > + } else if (json_is_null(TempJsonObj)) { > > + *DstBuffer =3D NULL; // No value for this key > > + free (VagueData); > > + return RedfishCS_status_success; > > + } else { > > + return RedfishCS_status_unsupported; > > + } > > + if (Status =3D=3D RedfishCS_status_success) { > > + *DstBuffer =3D VagueData; > > + } > > + return Status; > > +} > > + > > +RedfishCS_status InsertJsonStringObj (json_t *ParentJsonObj, char *Key= , > > +RedfishCS_char *StringValue) { > > + json_t *JsonValue; > > + RedfishCS_char NullStr[] =3D ""; > > + RedfishCS_char *InsertStr; > > + > > + InsertStr =3D StringValue; > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (InsertStr =3D=3D (char *)NULL) { > > + InsertStr =3D NullStr; > > + } > > + JsonValue =3D json_string(InsertStr); > > + if (JsonValue =3D=3D NULL) { > > + return RedfishCS_status_unsupported; > > + } > > + if (json_object_set_new (ParentJsonObj, Key, JsonValue) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonBoolObj (json_t *ParentJsonObj, char *Key, > > +RedfishCS_bool *BoolValue) { > > + json_t *JsonValue; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (BoolValue =3D=3D (RedfishCS_bool *)NULL) { > > + return RedfishCS_status_success; // No value for this key. > > + } > > + JsonValue =3D json_boolean((BOOLEAN)*BoolValue); > > + if (JsonValue =3D=3D NULL) { > > + return RedfishCS_status_unsupported; > > + } > > + if (json_object_set_new (ParentJsonObj, Key, JsonValue) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonInt64Obj (json_t *ParentJsonObj, char *Key, > > +RedfishCS_int64 *Int64Value) { > > + json_t *JsonValue; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (Int64Value =3D=3D (RedfishCS_int64 *)NULL) { > > + return RedfishCS_status_success; // No value for this key. > > + } > > + JsonValue =3D json_integer((json_int_t)*Int64Value); > > + if (JsonValue =3D=3D NULL) { > > + return RedfishCS_status_unsupported; > > + } > > + if (json_object_set_new (ParentJsonObj, Key, JsonValue) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonVagueObj (json_t *ParentJsonObj, char *Key, > > +RedfishCS_Vague *VagueValue) { > > + json_t *JsonValue; > > + RedfishCS_char NullStr[] =3D ""; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (VagueValue =3D=3D (RedfishCS_Vague *)NULL) { > > + JsonValue =3D json_null(); // No value for this key. > > + } else if (VagueValue->DataType =3D=3D RedfishCS_Vague_DataType_Stri= ng) > { > > + if (VagueValue->DataValue.CharPtr =3D=3D NULL) { > > + JsonValue =3D json_string(NullStr); > > + } else { > > + JsonValue =3D json_string(VagueValue->DataValue.CharPtr); > > + } > > + } else if (VagueValue->DataType =3D=3D RedfishCS_Vague_DataType_Int6= 4) { > > + JsonValue =3D > > +json_integer((json_int_t)*VagueValue->DataValue.Int64Ptr); > > + } else if (VagueValue->DataType =3D=3D RedfishCS_Vague_DataType_Bool= ) { > > + JsonValue =3D json_boolean((BOOLEAN)*VagueValue- > >DataValue.BoolPtr); > > + } else { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (json_object_set_new (ParentJsonObj, Key, JsonValue) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonLinkObj (json_t *JsonObj, char *Key, > > +RedfishCS_Link *Link) { > > + json_t *JsonTextObj; > > + RedfishCS_Type_JSON_Data *CsJsonHeader; > > + > > + if (Link =3D=3D NULL || JsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (IsLinkEmpty (Link)) { > > + return RedfishCS_status_success; > > + } > > + > > + CsJsonHeader =3D (RedfishCS_Type_JSON_Data *)GetFirstLink (Link); i= f > > + (CsJsonHeader->Header.ResourceType !=3D RedfishCS_Type_JSON && > > + CsJsonHeader->Header.ResourceType !=3D RedfishCS_Type_Uri) { > > + // Only support JSON/URI property for CStructure to JSON > > + return RedfishCS_status_unsupported; } if (CsJsonHeader->JsonTex= t > > + =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + > > + if (CsJsonHeader->Header.ResourceType =3D=3D RedfishCS_Type_JSON) { > > + JsonTextObj =3D json_loads(CsJsonHeader->JsonText, 0, NULL); > > + if (json_object_set_new (JsonObj, Key, JsonTextObj) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + } else { > > + JsonTextObj =3D json_string (CsJsonHeader->JsonText); > > + if (json_object_set_new (JsonObj, Key, JsonTextObj) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + } > > + > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonStringArrayObj (json_t *ParentJsonObj, char > > +*Key, RedfishCS_char_Array *StringValueArray) { > > + json_t *ArrayJson; > > + json_t *ArrayMember; > > + RedfishCS_char_Array *NextArray; > > + RedfishCS_char NullStr[] =3D ""; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (StringValueArray =3D=3D (RedfishCS_char_Array *)NULL) { > > + return RedfishCS_status_success; // No value for this key. > > + } > > + ArrayJson =3D json_array(); > > + if (ArrayJson =3D=3D NULL) { > > + return RedfishCS_status_unsupported; } NextArray =3D > > + StringValueArray; do { > > + if (NextArray->ArrayValue =3D=3D NULL) { > > + ArrayMember =3D json_string(NullStr); > > + } else { > > + ArrayMember =3D json_string(NextArray->ArrayValue); > > + } > > + if (json_array_append_new (ArrayJson, ArrayMember) !=3D 0) { > > + return RedfishCS_status_unsupported; > > + } > > + NextArray =3D NextArray->Next; > > + } while (NextArray !=3D NULL); > > + > > + if (json_object_set_new (ParentJsonObj, Key, ArrayJson) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonBoolArrayObj (json_t *ParentJsonObj, char > > +*Key, RedfishCS_bool_Array *BoolValueArray) { > > + json_t *ArrayJson; > > + json_t *ArrayMember; > > + RedfishCS_bool_Array *NextArray; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (BoolValueArray =3D=3D (RedfishCS_bool_Array *)NULL) { > > + return RedfishCS_status_success; // No value for this key. > > + } > > + ArrayJson =3D json_array(); > > + if (ArrayJson =3D=3D NULL) { > > + return RedfishCS_status_unsupported; } NextArray =3D > > + BoolValueArray; do { > > + ArrayMember =3D json_boolean((BOOLEAN)*NextArray->ArrayValue); > > + if (json_array_append_new (ArrayJson, ArrayMember) !=3D 0) { > > + return RedfishCS_status_unsupported; > > + } > > + NextArray =3D NextArray->Next; > > + } while (NextArray !=3D NULL); > > + > > + if (json_object_set_new (ParentJsonObj, Key, ArrayJson) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonInt64ArrayObj (json_t *ParentJsonObj, char > > +*Key, RedfishCS_int64_Array *Int64ValueArray) { > > + json_t *ArrayJson; > > + json_t *ArrayMember; > > + RedfishCS_int64_Array *NextArray; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (Int64ValueArray =3D=3D (RedfishCS_int64_Array *)NULL) { > > + return RedfishCS_status_success; // No value for this key. > > + } > > + ArrayJson =3D json_array(); > > + if (ArrayJson =3D=3D NULL) { > > + return RedfishCS_status_unsupported; } NextArray =3D > > + Int64ValueArray; do { > > + ArrayMember =3D json_integer(*NextArray->ArrayValue); > > + if (json_array_append_new (ArrayJson, ArrayMember) !=3D 0) { > > + return RedfishCS_status_unsupported; > > + } > > + NextArray =3D NextArray->Next; > > + } while (NextArray !=3D NULL); > > + > > + if (json_object_set_new (ParentJsonObj, Key, ArrayJson) =3D=3D -1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status InsertJsonLinkArrayObj (json_t *ParentJsonObj, char > > +*Key, RedfishCS_Link *LinkArray) { > > + json_t *ArrayJson; > > + json_t *ArrayMember; > > + RedfishCS_Type_Uri_Data *ThisLink; > > + > > + if (ParentJsonObj =3D=3D NULL) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + > > + if (IsLinkEmpty (LinkArray)) { > > + return RedfishCS_status_success; > > + } > > + > > + ArrayJson =3D json_array(); > > + if (ArrayJson =3D=3D NULL) { > > + return RedfishCS_status_unsupported; > > + } > > + ThisLink =3D (RedfishCS_Type_Uri_Data *)GetFirstLink (LinkArray); > > + while (RedfishCS_boolean_true){ > > + if (ThisLink->Header.ResourceType !=3D RedfishCS_Type_Uri) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + if (ThisLink->Uri !=3D (RedfishCS_char *)NULL) { > > + ArrayMember =3D json_string(ThisLink->Uri); > > + if (json_array_append_new (ArrayJson, ArrayMember) !=3D 0) { > > + return RedfishCS_status_unsupported; > > + } > > + } > > + if (IsLinkAtEnd (LinkArray, &ThisLink->Header.LinkEntry)) { > > + if (json_object_set_new (ParentJsonObj, Key, ArrayJson) =3D=3D -= 1) { > > + return RedfishCS_status_unsupported; > > + } > > + return RedfishCS_status_success; > > + } > > + ThisLink =3D (RedfishCS_Type_Uri_Data *)GetNextLink(LinkArray, > > +&ThisLink->Header.LinkEntry); > > + }; > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status CsEmptyPropLinkToJson(json_t *ParentJsonObj, char > > +*Key, RedfishCS_Link *Link) { > > + RedfishCS_uint32 Index; > > + RedfishCS_Type_EmptyProp_CS_Data *EmptyProp_CS_Ptr; > > + RedfishCS_EmptyProp_KeyValue *KeyValuePtr; > > + json_t *JsonObj; > > + RedfishCS_status Status; > > + > > + EmptyProp_CS_Ptr =3D (RedfishCS_Type_EmptyProp_CS_Data > > + *)GetFirstLink(Link); if (EmptyProp_CS_Ptr->Header.ResourceType !=3D > > RedfishCS_Type_CS_EmptyProp) { > > + return RedfishCS_status_unsupported; > > + } > > + > > + JsonObj =3D json_object(); > > + KeyValuePtr =3D EmptyProp_CS_Ptr->KeyValuePtr; > > + for (Index =3D 0; Index < EmptyProp_CS_Ptr->NunmOfProperties; Index+= +) > { > > + Status =3D InsertJsonVagueObj(JsonObj, KeyValuePtr->KeyNamePtr, > > KeyValuePtr->Value); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + KeyValuePtr =3D KeyValuePtr->NextKeyValuePtr; > > + } > > + if (json_object_set_new(ParentJsonObj, Key, JsonObj) !=3D 0) { > > + return RedfishCS_status_unknown_error; > > + } > > + return RedfishCS_status_success; > > +} > > + > > diff --git a/RedfishClientPkg/ConverterLib/src/RedfishCsMemory.c > > b/RedfishClientPkg/ConverterLib/src/RedfishCsMemory.c > > new file mode 100644 > > index 0000000000..9dbab2c0b1 > > --- /dev/null > > +++ b/RedfishClientPkg/ConverterLib/src/RedfishCsMemory.c > > @@ -0,0 +1,144 @@ > > +/** @file > > + > > + (C) Copyright 2018-2021 Hewlett Packard Enterprise Development > LP
> > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "RedfishCsMemoryInternal.h" > > +#include > > +#include > > + > > +RedfishCS_Link CsMemRoot =3D {&CsMemRoot, &CsMemRoot}; > > + > > +RedfishCS_status recordCsRootMemory (void *memCs) { > > + RedfishCS_Internal_memory_root *memRoot; > > + > > + memRoot =3D malloc (sizeof(RedfishCS_Internal_memory_root)); > > + if (memRoot =3D=3D NULL) { > > + return RedfishCS_status_insufficient_memory; > > + } > > + InitializeLinkHead (&memRoot->nextRoot); > > + InitializeLinkHead (&memRoot->memBlocks); > > + memRoot->CsPtr =3D memCs; > > + InsertTailLink (&CsMemRoot, &memRoot->nextRoot); > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status allocateRecordCsMemory (RedfishCS_void *rootCs, > > +RedfishCS_uint32 size, RedfishCS_void **Dst) { > > + RedfishCS_Internal_memory_root *memRoot; > > + RedfishCS_Internal_memory_link *memLink; > > + > > + if (IsLinkEmpty (&CsMemRoot)) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + memRoot =3D (RedfishCS_Internal_memory_root *)GetFirstLink > > + (&CsMemRoot); while (RedfishCS_boolean_true){ > > + if (memRoot->CsPtr =3D=3D rootCs) { > > + // Allocation memory and record it. > > + memLink =3D malloc (sizeof(RedfishCS_Internal_memory_link)); > > + if (memLink =3D=3D NULL) { > > + return RedfishCS_status_insufficient_memory; > > + } > > + *Dst =3D malloc (size); > > + if (*Dst =3D=3D NULL) { > > + free (memLink); > > + return RedfishCS_status_insufficient_memory; > > + } > > + memset (*Dst, 0, size); > > + memset (memLink, 0, sizeof(RedfishCS_Internal_memory_link)); > > + InitializeLinkHead (&memLink->nextLink); > > + memLink->memoryPtr =3D *Dst; > > + InsertTailLink (&memRoot->memBlocks, &memLink->nextLink); > > + return RedfishCS_status_success; > > + } > > + if (IsLinkAtEnd (&CsMemRoot, (RedfishCS_Link *)&memRoot- > >nextRoot)) > > { > > + break; > > + } > > + memRoot =3D (RedfishCS_Internal_memory_root *)GetNextLink > > + (&CsMemRoot, &memRoot->nextRoot); }; > > + > > + return RedfishCS_status_invalid_parameter; > > +} > > + > > +RedfishCS_status allocateRecordCsZeroMemory (RedfishCS_void *rootCs, > > +RedfishCS_uint32 size, RedfishCS_void **Dst) { > > + RedfishCS_status Status; > > + > > + Status =3D allocateRecordCsMemory (rootCs, size, Dst); > > + if (Status !=3D RedfishCS_status_success || *Dst =3D=3D NULL) { > > + return Status; > > + } > > + memset (*Dst, 0, size); > > + return RedfishCS_status_success; > > +} > > + > > +RedfishCS_status DestoryCsMemory (RedfishCS_void *rootCs) { > > + RedfishCS_Internal_memory_root *memRoot; > > + RedfishCS_Internal_memory_link *memLink; > > + > > + if (IsLinkEmpty (&CsMemRoot)) { > > + return RedfishCS_status_invalid_parameter; > > + } > > + memRoot =3D (RedfishCS_Internal_memory_root *)GetFirstLink > > +(&CsMemRoot); > > + while (RedfishCS_boolean_true){ > > + if (memRoot->CsPtr =3D=3D rootCs) { > > + if (IsLinkEmpty (&memRoot->memBlocks)) { > > + return RedfishCS_status_success; > > + } > > + while (RedfishCS_boolean_true) { > > + memLink =3D (RedfishCS_Internal_memory_link > > *)GetLastLink(&memRoot->memBlocks); > > + if (memLink->memoryPtr !=3D NULL) { > > + free (memLink->memoryPtr); > > + RemoveLink (&memLink->nextLink); > > + free (memLink); > > + } > > + if (IsLinkEmpty (&memRoot->memBlocks)) { > > + RemoveLink (&memRoot->nextRoot); > > + free (memRoot); > > + free (rootCs); > > + return RedfishCS_status_success; > > + } > > + } > > + } > > + if (IsLinkAtEnd (&CsMemRoot, (RedfishCS_Link *)&memRoot- > >nextRoot)) > > { > > + break; > > + } > > + memRoot =3D (RedfishCS_Internal_memory_root *)GetNextLink > > +(&CsMemRoot, &memRoot->nextRoot); > > + }; > > + return RedfishCS_status_invalid_parameter; > > +} > > +RedfishCS_status allocateArrayRecordCsMemory(RedfishCS_void *rootCs, > > +RedfishCS_uint32 ArrayInstanceSize, RedfishCS_uint64 ArraySize, > > +RedfishCS_void **Dst) { > > + RedfishCS_uint16 Index; > > + RedfishCS_void *ArrayInstance; > > + RedfishCS_void *PreArrayInstance; > > + RedfishCS_status Status; > > + RedfishCS_uint16 SizeOfVoid; > > + > > + for (Index =3D 0; Index < ArraySize; Index ++) { > > + Status =3D allocateRecordCsMemory(rootCs, ArrayInstanceSize, > > &ArrayInstance); > > + if (Status !=3D RedfishCS_status_success) { > > + return Status; > > + } > > + memset (ArrayInstance, 0, ArrayInstanceSize); > > + if (Index =3D=3D 0) { > > + *Dst =3D ArrayInstance; > > + } else { > > + SizeOfVoid =3D sizeof (RedfishCS_void *); > > + if (SizeOfVoid =3D=3D sizeof (RedfishCS_uint32)) { > > + *((RedfishCS_uint32 *)PreArrayInstance) =3D > > (RedfishCS_uint32)(unsigned long long)ArrayInstance; // Next link. > > + } else if (SizeOfVoid =3D=3D sizeof (RedfishCS_uint64)){ > > + *((RedfishCS_uint64 *)PreArrayInstance) =3D > > (RedfishCS_uint64)ArrayInstance; // Next link. > > + } else { > > + return RedfishCS_status_invalid_parameter; > > + } > > + } > > + PreArrayInstance =3D ArrayInstance; > > + } > > + return RedfishCS_status_success; > > +} > > -- > > 2.17.1