text: /*
   * Copyright (c) 2018-2021 mcumgr authors
   *
   * SPDX-License-Identifier: Apache-2.0
   */
  
  #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);
  }
  