@@ -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