printf: move simple_strto*() functions to separate file
These are not needed in the PBL, so move them to a separate file. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
ce5299b0bf
commit
8a7335f8b5
|
@ -4,6 +4,7 @@ obj-y += ctype.o
|
||||||
obj-y += rbtree.o
|
obj-y += rbtree.o
|
||||||
obj-y += display_options.o
|
obj-y += display_options.o
|
||||||
obj-y += string.o
|
obj-y += string.o
|
||||||
|
obj-y += strtox.o
|
||||||
obj-y += vsprintf.o
|
obj-y += vsprintf.o
|
||||||
obj-y += div64.o
|
obj-y += div64.o
|
||||||
obj-y += misc.o
|
obj-y += misc.o
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
#include <common.h>
|
||||||
|
#include <linux/ctype.h>
|
||||||
|
|
||||||
|
unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
|
||||||
|
{
|
||||||
|
unsigned long result = 0,value;
|
||||||
|
|
||||||
|
if (*cp == '0') {
|
||||||
|
cp++;
|
||||||
|
if ((*cp == 'x') && isxdigit(cp[1])) {
|
||||||
|
base = 16;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
if (!base) {
|
||||||
|
base = 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!base) {
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
|
||||||
|
? toupper(*cp) : *cp)-'A'+10) < base) {
|
||||||
|
result = result*base + value;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
if (endp)
|
||||||
|
*endp = (char *)cp;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(simple_strtoul);
|
||||||
|
|
||||||
|
long simple_strtol(const char *cp,char **endp,unsigned int base)
|
||||||
|
{
|
||||||
|
if(*cp=='-')
|
||||||
|
return -simple_strtoul(cp+1,endp,base);
|
||||||
|
return simple_strtoul(cp,endp,base);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(simple_strtol);
|
||||||
|
|
||||||
|
unsigned long long simple_strtoull (const char *cp, char **endp, unsigned int base)
|
||||||
|
{
|
||||||
|
unsigned long long result = 0, value;
|
||||||
|
|
||||||
|
if (*cp == '0') {
|
||||||
|
cp++;
|
||||||
|
if ((*cp == 'x') && isxdigit (cp[1])) {
|
||||||
|
base = 16;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
if (!base) {
|
||||||
|
base = 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!base) {
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
while (isxdigit (*cp) && (value = isdigit (*cp)
|
||||||
|
? *cp - '0'
|
||||||
|
: (islower (*cp) ? toupper (*cp) : *cp) - 'A' + 10) < base) {
|
||||||
|
result = result * base + value;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
if (endp)
|
||||||
|
*endp = (char *) cp;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(simple_strtoull);
|
||||||
|
|
|
@ -18,72 +18,6 @@
|
||||||
#include <kallsyms.h>
|
#include <kallsyms.h>
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <led.h>
|
|
||||||
|
|
||||||
unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
|
|
||||||
{
|
|
||||||
unsigned long result = 0,value;
|
|
||||||
|
|
||||||
if (*cp == '0') {
|
|
||||||
cp++;
|
|
||||||
if ((*cp == 'x') && isxdigit(cp[1])) {
|
|
||||||
base = 16;
|
|
||||||
cp++;
|
|
||||||
}
|
|
||||||
if (!base) {
|
|
||||||
base = 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!base) {
|
|
||||||
base = 10;
|
|
||||||
}
|
|
||||||
while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
|
|
||||||
? toupper(*cp) : *cp)-'A'+10) < base) {
|
|
||||||
result = result*base + value;
|
|
||||||
cp++;
|
|
||||||
}
|
|
||||||
if (endp)
|
|
||||||
*endp = (char *)cp;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(simple_strtoul);
|
|
||||||
|
|
||||||
long simple_strtol(const char *cp,char **endp,unsigned int base)
|
|
||||||
{
|
|
||||||
if(*cp=='-')
|
|
||||||
return -simple_strtoul(cp+1,endp,base);
|
|
||||||
return simple_strtoul(cp,endp,base);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(simple_strtol);
|
|
||||||
|
|
||||||
unsigned long long simple_strtoull (const char *cp, char **endp, unsigned int base)
|
|
||||||
{
|
|
||||||
unsigned long long result = 0, value;
|
|
||||||
|
|
||||||
if (*cp == '0') {
|
|
||||||
cp++;
|
|
||||||
if ((*cp == 'x') && isxdigit (cp[1])) {
|
|
||||||
base = 16;
|
|
||||||
cp++;
|
|
||||||
}
|
|
||||||
if (!base) {
|
|
||||||
base = 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!base) {
|
|
||||||
base = 10;
|
|
||||||
}
|
|
||||||
while (isxdigit (*cp) && (value = isdigit (*cp)
|
|
||||||
? *cp - '0'
|
|
||||||
: (islower (*cp) ? toupper (*cp) : *cp) - 'A' + 10) < base) {
|
|
||||||
result = result * base + value;
|
|
||||||
cp++;
|
|
||||||
}
|
|
||||||
if (endp)
|
|
||||||
*endp = (char *) cp;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(simple_strtoull);
|
|
||||||
|
|
||||||
/* we use this so that we can do without the ctype library */
|
/* we use this so that we can do without the ctype library */
|
||||||
#define is_digit(c) ((c) >= '0' && (c) <= '9')
|
#define is_digit(c) ((c) >= '0' && (c) <= '9')
|
||||||
|
|
Loading…
Reference in New Issue