Пример #1
0
/*
 * out_get_checksum -- return checksum string with result
 */
const char *
out_get_checksum(void *addr, size_t len, uint64_t *csump)
{
	static char str_buff[STR_MAX] = {0, };
	int ret = 0;
	/*
	 * The memory range can be mapped with PROT_READ, so allocate a new
	 * buffer for the checksum and calculate there.
	 */

	void *buf = Malloc(len);
	if (buf == NULL) {
		ret = snprintf(str_buff, STR_MAX, "failed");
		if (ret < 0 || ret >= STR_MAX)
			return "";
		return str_buff;
	}
	memcpy(buf, addr, len);
	uint64_t *ncsump = (uint64_t *)
		((char *)buf + ((char *)csump - (char *)addr));

	uint64_t csum = *csump;

	/* validate checksum and get correct one */
	int valid = util_validate_checksum(buf, len, ncsump);

	if (valid)
		ret = snprintf(str_buff, STR_MAX, "0x%" PRIx64" [OK]",
			le64toh(csum));
	else
		ret = snprintf(str_buff, STR_MAX,
			"0x%" PRIx64 " [wrong! should be: 0x%" PRIx64 "]",
			le64toh(csum), le64toh(*ncsump));

	Free(buf);

	if (ret < 0 || ret >= STR_MAX)
		return "";

	return str_buff;
}
Пример #2
0
/*
 * out_get_checksum -- return checksum string with result
 */
const char *
out_get_checksum(void *addr, size_t len, uint64_t *csump)
{
	static char str_buff[STR_MAX] = {0, };
	uint64_t csum = *csump;

	/* validate checksum and get correct one */
	int valid = util_validate_checksum(addr, len, csump);

	if (valid)
		snprintf(str_buff, STR_MAX, "0x%08x [OK]", (uint32_t)csum);
	else
		snprintf(str_buff, STR_MAX,
			"0x%08x [wrong! should be: 0x%08x]",
			(uint32_t)csum, (uint32_t)*csump);

	/* restore original checksum */
	*csump = csum;

	return str_buff;
}