Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
#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);
}