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;
}
示例#2
0
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;
}