38 lines
599 B
C
38 lines
599 B
C
|
|
char tmp[sizeof(value) * CHAR_BIT + 2];
|
||
|
|
char *current, *end;
|
||
|
|
int sign;
|
||
|
|
|
||
|
|
end = tmp + sizeof(tmp);
|
||
|
|
current = end;
|
||
|
|
sign = 0;
|
||
|
|
|
||
|
|
/* Check for sign */
|
||
|
|
if (value < 0)
|
||
|
|
{
|
||
|
|
sign = 1;
|
||
|
|
value = -value;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Fill buffer from the end */
|
||
|
|
*(--current) = 0;
|
||
|
|
while (value)
|
||
|
|
{
|
||
|
|
*(--current) = digits[value % base];
|
||
|
|
value /= base;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Append sign */
|
||
|
|
if (sign)
|
||
|
|
*(--current) = '-';
|
||
|
|
|
||
|
|
/* Check that string have space for the result */
|
||
|
|
if (size < (size_t)(end - current))
|
||
|
|
return BH_ERROR;
|
||
|
|
|
||
|
|
/* Copy data */
|
||
|
|
memcpy(string, current, end - current);
|
||
|
|
if (actual)
|
||
|
|
*actual = end - current;
|
||
|
|
|
||
|
|
return BH_OK;
|