aboutsummaryrefslogblamecommitdiffstats
path: root/libgamma_behex_edid_lowercase.c
blob: 41a2563c73bd4ad3ebb5b871dfd6b97c6b122f1f (plain) (tree)


















                                                                                    



                                                         













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


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

	/* Allocate memory area for the output string */
	if (length > (SIZE_MAX / sizeof(char) - 1) / 2) {
		errno = ENOMEM;
		return NULL;
	}
	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;
}