tools/nolibc/stdlib: move ltoa() to stdlib.h

This function is not standard and performs the opposite of atol(). Let's
move it with atol(). It's been split between a reentrant function and one
using a static buffer.

There's no more definition in nolibc.h anymore now.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
Willy Tarreau 2022-02-07 17:23:26 +01:00 committed by Paul E. McKenney
parent eba6d00d38
commit 56d68a3c1f
2 changed files with 32 additions and 22 deletions

View file

@ -94,26 +94,4 @@
/* Used by programs to avoid std includes */
#define NOLIBC
static __attribute__((unused))
const char *ltoa(long in)
{
/* large enough for -9223372036854775808 */
static char buffer[21];
char *pos = buffer + sizeof(buffer) - 1;
int neg = in < 0;
unsigned long n = neg ? -in : in;
*pos-- = '\0';
do {
*pos-- = '0' + n % 10;
n /= 10;
if (pos < buffer)
return pos + 1;
} while (n);
if (neg)
*pos-- = '-';
return pos + 1;
}
#endif /* _NOLIBC_H */

View file

@ -45,6 +45,38 @@ int atoi(const char *s)
return atol(s);
}
/* performs the opposite of atol() using a user-fed buffer. The buffer must be
* at least 21 bytes long (large enough for "-9223372036854775808").
*/
static __attribute__((unused))
const char *ltoa_r(long in, char *buffer)
{
char *pos = buffer + 21 - 1;
int neg = in < 0;
unsigned long n = neg ? -in : in;
*pos-- = '\0';
do {
*pos-- = '0' + n % 10;
n /= 10;
if (pos < buffer)
return pos + 1;
} while (n);
if (neg)
*pos-- = '-';
return pos + 1;
}
/* performs the opposite of atol() using a statically allocated buffer */
static __attribute__((unused))
const char *ltoa(long in)
{
/* large enough for -9223372036854775808 */
static char buffer[21];
return ltoa_r(in, buffer);
}
static __attribute__((unused))
int msleep(unsigned int msecs)
{