Commit 56d68a3c authored by Willy Tarreau's avatar Willy Tarreau Committed by Paul E. McKenney

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: default avatarWilly Tarreau <w@1wt.eu>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent eba6d00d
......@@ -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 */
......@@ -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)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment