blob: 42bf31e393baf8153443127f37446065878c76ce [file] [log] [blame]
#include <stdbool.h>
#include "util/mcumgr_util.h"
int
ull_to_s(unsigned long long val, int dst_max_len, char *dst)
{
unsigned long copy;
int digit;
int off;
int len;
/* First, calculate the length of the resulting string. */
copy = val;
for (len = 0; copy != 0; len++) {
copy /= 10;
}
/* A value of 0 still requires one character ("0"). */
if (len == 0) {
len = 1;
}
/* Ensure the buffer can accommodate the string and terminator. */
if (len >= dst_max_len - 1) {
return -1;
}
/* Encode the string from right to left. */
off = len;
dst[off--] = '\0';
do {
digit = val % 10;
dst[off--] = '0' + digit;
val /= 10;
} while (val > 0);
return len;
}
int
ll_to_s(long long val, int dst_max_len, char *dst)
{
unsigned long long ull;
if (val < 0) {
if (dst_max_len < 1) {
return -1;
}
dst[0] = '-';
dst_max_len--;
dst++;
ull = -val;
} else {
ull = val;
}
return ull_to_s(ull, dst_max_len, dst);
}