Skip to content

Commit 867a91c

Browse files
committed
Avoid duplicate keys in service_access
Splits service_access into service_host and service_access, both arrays of string.
1 parent 3197e5f commit 867a91c

File tree

1 file changed

+32
-8
lines changed

1 file changed

+32
-8
lines changed

npdm.c

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -726,21 +726,43 @@ void cJSON_AddU64ToObject(cJSON *obj, const char *name, uint64_t val) {
726726
cJSON_AddStringToObject(obj, name, buf);
727727
}
728728

729-
static cJSON *sac_get_json(char *sac, uint32_t sac_size) {
730-
cJSON *sac_json = cJSON_CreateObject();
729+
static cJSON *sac_access_get_json(char *sac, uint32_t sac_size) {
730+
cJSON *sac_json = cJSON_CreateArray();
731+
char service[9] = {0};
732+
uint32_t ofs = 0;
733+
uint32_t service_len;
734+
char ctrl;
735+
while (ofs < sac_size) {
736+
ctrl = sac[ofs++];
737+
service_len = (ctrl & 0x7) + 1;
738+
if (!(ctrl & 0x80)) {
739+
memset(service, 0, sizeof(service));
740+
memcpy(service, &sac[ofs], service_len);
741+
cJSON_AddItemToArray(sac_json, cJSON_CreateString(service));
742+
}
743+
ofs += service_len;
744+
}
745+
746+
return sac_json;
747+
}
748+
749+
static cJSON *sac_host_get_json(char *sac, uint32_t sac_size) {
750+
cJSON *sac_json = cJSON_CreateArray();
731751
char service[9] = {0};
732752
uint32_t ofs = 0;
733753
uint32_t service_len;
734754
char ctrl;
735755
while (ofs < sac_size) {
736-
memset(service, 0, sizeof(service));
737756
ctrl = sac[ofs++];
738757
service_len = (ctrl & 0x7) + 1;
739-
memcpy(service, &sac[ofs], service_len);
740-
cJSON_AddBoolToObject(sac_json, service, (ctrl & 0x80) != 0);
758+
if (ctrl & 0x80) {
759+
memset(service, 0, sizeof(service));
760+
memcpy(service, &sac[ofs], service_len);
761+
cJSON_AddItemToArray(sac_json, cJSON_CreateString(service));
762+
}
741763
ofs += service_len;
742764
}
743-
765+
744766
return sac_json;
745767
}
746768

@@ -879,8 +901,10 @@ char *npdm_get_json(npdm_t *npdm) {
879901
cJSON_AddItemToObject(npdm_json, "filesystem_access", fac_json);
880902

881903
/* Add SAC. */
882-
cJSON *sac_json = sac_get_json((char *)aci0 + aci0->sac_offset, aci0->sac_size);
883-
cJSON_AddItemToObject(npdm_json, "service_access", sac_json);
904+
cJSON *sac_access_json = sac_access_get_json((char *)aci0 + aci0->sac_offset, aci0->sac_size);
905+
cJSON *sac_host_json = sac_host_get_json((char *)aci0 + aci0->sac_offset, aci0->sac_size);
906+
cJSON_AddItemToObject(npdm_json, "service_access", sac_access_json);
907+
cJSON_AddItemToObject(npdm_json, "service_host", sac_host_json);
884908

885909
/* Add KAC. */
886910
cJSON *kac_json = kac_get_json((uint32_t *)((char *)aci0 + aci0->kac_offset), aci0->kac_size / sizeof(uint32_t));

0 commit comments

Comments
 (0)