mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-23 17:55:01 +00:00
This reduces the number of exported header files to the minimum needed by
the existing userspace utilities and firmware implementations.
BUG=chromium:221544
BRANCH=none
TEST=manual, trybots
CQ-DEPEND=CL:47019,CL:47022,CL:47023
sudo FEATURES=test emerge vboot_reference
FEATURES=test emerge-$BOARD \
vboot_reference \
chromeos-cryptohome \
chromeos-installer \
chromeos-u-boot \
peach-u-boot \
depthcharge
Change-Id: I2946cc2dbaf5459a6c5eca92ca57d546498e6d85
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47021
Reviewed-by: Randall Spangler <rspangler@chromium.org>
75 lines
1.7 KiB
C
75 lines
1.7 KiB
C
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* String utility functions that need to be built as part of the firmware.
|
|
*/
|
|
|
|
#include "sysincludes.h"
|
|
|
|
#include "utility.h"
|
|
|
|
|
|
uint32_t Uint64ToString(char *buf, uint32_t bufsize, uint64_t value,
|
|
uint32_t radix, uint32_t zero_pad_width)
|
|
{
|
|
char ibuf[UINT64_TO_STRING_MAX];
|
|
char *s;
|
|
uint32_t usedsize = 1;
|
|
|
|
if (!buf)
|
|
return 0;
|
|
|
|
/* Clear output buffer in case of error */
|
|
*buf = '\0';
|
|
|
|
/* Sanity-check input args */
|
|
if (radix < 2 || radix > 36 || zero_pad_width >= UINT64_TO_STRING_MAX)
|
|
return 0;
|
|
|
|
/* Start at end of string and work backwards */
|
|
s = ibuf + UINT64_TO_STRING_MAX - 1;
|
|
*(s) = '\0';
|
|
do {
|
|
int v = value % radix;
|
|
value /= radix;
|
|
|
|
*(--s) = (char)(v < 10 ? v + '0' : v + 'a' - 10);
|
|
if (++usedsize > bufsize)
|
|
return 0; /* Result won't fit in buffer */
|
|
} while (value);
|
|
|
|
/* Zero-pad if necessary */
|
|
while (usedsize <= zero_pad_width) {
|
|
*(--s) = '0';
|
|
if (++usedsize > bufsize)
|
|
return 0; /* Result won't fit in buffer */
|
|
}
|
|
|
|
/* Now copy the string back to the input buffer. */
|
|
Memcpy(buf, s, usedsize);
|
|
|
|
/* Don't count the terminating null in the bytes used */
|
|
return usedsize - 1;
|
|
}
|
|
|
|
uint32_t StrnAppend(char *dest, const char *src, uint32_t destlen)
|
|
{
|
|
uint32_t used = 0;
|
|
|
|
if (!dest || !src || !destlen)
|
|
return 0;
|
|
|
|
/* Skip past existing string in destination.*/
|
|
while (dest[used] && used < destlen - 1)
|
|
used++;
|
|
|
|
/* Now copy source */
|
|
while (*src && used < destlen - 1)
|
|
dest[used++] = *src++;
|
|
|
|
/* Terminate destination and return count of non-null characters */
|
|
dest[used] = 0;
|
|
return used;
|
|
}
|