aboutsummaryrefslogblamecommitdiffstats
path: root/libgamma_behex_edid_uppercase.c
blob: 5545aa57d42bf2fb413adc0788576b6858f02b97 (plain) (tree)
































                                                                                     
/* See LICENSE file for copyright and license details. */
#include "common.h"


/**
 * Convert a raw representation of an EDID to an uppercase hexadecimal representation
 * 
 * @param   edid    The EDID in raw representation
 * @param   length  The length of `edid`
 * @return          The EDID in uppercase hexadecimal representation,
 *                  NULL` on allocation error, `errno` will be set accordingly
 */
char *
libgamma_behex_edid_uppercase(const unsigned char *restrict edid, size_t length)
{
	char *restrict out;
	size_t i;

	/* Allocate memory area for the output string */
	out = malloc((length * 2 + 1) * sizeof(char));
	if (!out)
		return NULL;

	/* Translate from raw octets to hexadecimal */
	for (i = 0; i < length; i++) {
		out[i * 2 + 0] = "0123456789ABCDEF"[(edid[i] >> 4) & 15];
		out[i * 2 + 1] = "0123456789ABCDEF"[(edid[i] >> 0) & 15];
	}
	/* NUL-terminate the output string */
	out[length * 2] = '\0';

	return out;
}