char *EstEID_mapEntryToJson(struct EstEID_MapEntry entry) { char *key = EstEID_jsonString(entry.key); if (!key) return NULL; char *value = EstEID_jsonString(entry.value); if (!value) goto EstEID_mapEntryToJson_cleanup; size_t const kLen = strlen(key); if (SIZE_MAX - kLen < 7u) goto EstEID_mapEntryToJson_cleanup_2; size_t const vLen = strlen(value); if (SIZE_MAX - kLen - 7u < vLen) goto EstEID_mapEntryToJson_cleanup_2; char *result = (char *)malloc(kLen + vLen + 7u); if (result) sprintf(result, "\"%s\": \"%s\"", key, value); free(key); free(value); return result; EstEID_mapEntryToJson_cleanup_2: free(value); EstEID_mapEntryToJson_cleanup: free(key); return NULL; }
char *EstEID_mapEntryToJson(struct EstEID_MapEntry entry) { char *k = EstEID_jsonString(entry.key); char *v = EstEID_jsonString(entry.value); char *result = (char *)malloc(strlen(k) + strlen(v) + 7); sprintf(result, "\"%s\": \"%s\"", k, v); free(k); free(v); return result; }
int main(void) { assertStringEquals("foo", EstEID_jsonString("foo")); assertStringEquals("foo\\\"", EstEID_jsonString("foo\"")); assertStringEquals("foo\\\\", EstEID_jsonString("foo\\")); assertStringEquals("\\n", EstEID_jsonString("\n")); assertStringEquals("foo\\\\bar\\r\\n\\\"test\\\"", EstEID_jsonString("foo\\bar\r\n\"test\"")); EstEID_Map map = NULL; assertStringEquals("{}", EstEID_mapToJson(map)); map = EstEID_mapPut(map, "foo", "bar"); assertStringEquals("{\"foo\": \"bar\"}", EstEID_mapToJson(map)); map = EstEID_mapPut(map, "a\nb", "\"123\""); assertStringEquals("{\"foo\": \"bar\", \"a\\nb\": \"\\\"123\\\"\"}", EstEID_mapToJson(map)); EstEID_mapFree(map); return 0; }