blob: 4b259878403b99ca6473c4a8d003736703453773 (
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 */
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;
}
|