All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 5/7] lib: split out strtoxxxx functions out of vsprintf.c
Date: Fri,  4 Dec 2015 23:27:39 +0100	[thread overview]
Message-ID: <1449268061-805-6-git-send-email-sjoerd.simons@collabora.co.uk> (raw)
In-Reply-To: <1449268061-805-1-git-send-email-sjoerd.simons@collabora.co.uk>

To allow the various string to number conversion functions to be used
when using tiny-printf,split them out into their own file which gets
build regardless of what printf implementation is used.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
---

 lib/Makefile   |   6 +-
 lib/strto.c    | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/vsprintf.c | 164 -----------------------------------------------------
 3 files changed, 177 insertions(+), 167 deletions(-)
 create mode 100644 lib/strto.c

diff --git a/lib/Makefile b/lib/Makefile
index ae84833..dd36f25 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -85,13 +85,13 @@ obj-$(CONFIG_LIB_RAND) += rand.o
 ifdef CONFIG_SPL_BUILD
 # SPL U-Boot may use full-printf, tiny-printf or none at all
 ifdef CONFIG_USE_TINY_PRINTF
-obj-$(CONFIG_SPL_SERIAL_SUPPORT) += tiny-printf.o panic.o
+obj-$(CONFIG_SPL_SERIAL_SUPPORT) += tiny-printf.o panic.o strto.o
 else
-obj-$(CONFIG_SPL_SERIAL_SUPPORT) += vsprintf.o panic.o
+obj-$(CONFIG_SPL_SERIAL_SUPPORT) += vsprintf.o panic.o strto.o
 endif
 else
 # Main U-Boot always uses the full printf support
-obj-y += vsprintf.o panic.o
+obj-y += vsprintf.o panic.o strto.o
 endif
 
 subdir-ccflags-$(CONFIG_CC_OPTIMIZE_LIBS_FOR_SPEED) += -O2
diff --git a/lib/strto.c b/lib/strto.c
new file mode 100644
index 0000000..a6c0157
--- /dev/null
+++ b/lib/strto.c
@@ -0,0 +1,174 @@
+/*
+ *  linux/lib/vsprintf.c
+ *
+ *  Copyright (C) 1991, 1992  Linus Torvalds
+ */
+
+/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
+/*
+ * Wirzenius wrote this portably, Torvalds fucked it up :-)
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <linux/ctype.h>
+
+unsigned long simple_strtoul(const char *cp, char **endp,
+				unsigned int base)
+{
+	unsigned long result = 0;
+	unsigned long 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;
+}
+
+int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
+{
+	char *tail;
+	unsigned long val;
+	size_t len;
+
+	*res = 0;
+	len = strlen(cp);
+	if (len == 0)
+		return -EINVAL;
+
+	val = simple_strtoul(cp, &tail, base);
+	if (tail == cp)
+		return -EINVAL;
+
+	if ((*tail == '\0') ||
+		((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {
+		*res = val;
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+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);
+}
+
+unsigned long ustrtoul(const char *cp, char **endp, unsigned int base)
+{
+	unsigned long result = simple_strtoul(cp, endp, base);
+	switch (**endp) {
+	case 'G':
+		result *= 1024;
+		/* fall through */
+	case 'M':
+		result *= 1024;
+		/* fall through */
+	case 'K':
+	case 'k':
+		result *= 1024;
+		if ((*endp)[1] == 'i') {
+			if ((*endp)[2] == 'B')
+				(*endp) += 3;
+			else
+				(*endp) += 2;
+		}
+	}
+	return result;
+}
+
+unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base)
+{
+	unsigned long long result = simple_strtoull(cp, endp, base);
+	switch (**endp) {
+	case 'G':
+		result *= 1024;
+		/* fall through */
+	case 'M':
+		result *= 1024;
+		/* fall through */
+	case 'K':
+	case 'k':
+		result *= 1024;
+		if ((*endp)[1] == 'i') {
+			if ((*endp)[2] == 'B')
+				(*endp) += 3;
+			else
+				(*endp) += 2;
+		}
+	}
+	return result;
+}
+
+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;
+}
+
+long trailing_strtoln(const char *str, const char *end)
+{
+	const char *p;
+
+	if (!end)
+		end = str + strlen(str);
+	for (p = end - 1; p > str; p--) {
+		if (!isdigit(*p))
+			return simple_strtoul(p + 1, NULL, 10);
+	}
+
+	return -1;
+}
+
+long trailing_strtol(const char *str)
+{
+	return trailing_strtoln(str, NULL);
+}
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index bf5fd01..24167a1 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -15,176 +15,12 @@
 #include <linux/types.h>
 #include <linux/string.h>
 #include <linux/ctype.h>
-#include <errno.h>
 
 #include <common.h>
-#if !defined(CONFIG_PANIC_HANG)
-#include <command.h>
-#endif
 
 #include <div64.h>
 #define noinline __attribute__((noinline))
 
-unsigned long simple_strtoul(const char *cp, char **endp,
-				unsigned int base)
-{
-	unsigned long result = 0;
-	unsigned long 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;
-}
-
-int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
-{
-	char *tail;
-	unsigned long val;
-	size_t len;
-
-	*res = 0;
-	len = strlen(cp);
-	if (len == 0)
-		return -EINVAL;
-
-	val = simple_strtoul(cp, &tail, base);
-	if (tail == cp)
-		return -EINVAL;
-
-	if ((*tail == '\0') ||
-		((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {
-		*res = val;
-		return 0;
-	}
-
-	return -EINVAL;
-}
-
-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);
-}
-
-unsigned long ustrtoul(const char *cp, char **endp, unsigned int base)
-{
-	unsigned long result = simple_strtoul(cp, endp, base);
-	switch (**endp) {
-	case 'G':
-		result *= 1024;
-		/* fall through */
-	case 'M':
-		result *= 1024;
-		/* fall through */
-	case 'K':
-	case 'k':
-		result *= 1024;
-		if ((*endp)[1] == 'i') {
-			if ((*endp)[2] == 'B')
-				(*endp) += 3;
-			else
-				(*endp) += 2;
-		}
-	}
-	return result;
-}
-
-unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base)
-{
-	unsigned long long result = simple_strtoull(cp, endp, base);
-	switch (**endp) {
-	case 'G':
-		result *= 1024;
-		/* fall through */
-	case 'M':
-		result *= 1024;
-		/* fall through */
-	case 'K':
-	case 'k':
-		result *= 1024;
-		if ((*endp)[1] == 'i') {
-			if ((*endp)[2] == 'B')
-				(*endp) += 3;
-			else
-				(*endp) += 2;
-		}
-	}
-	return result;
-}
-
-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;
-}
-
-long trailing_strtoln(const char *str, const char *end)
-{
-	const char *p;
-
-	if (!end)
-		end = str + strlen(str);
-	for (p = end - 1; p > str; p--) {
-		if (!isdigit(*p))
-			return simple_strtoul(p + 1, NULL, 10);
-	}
-
-	return -1;
-}
-
-long trailing_strtol(const char *str)
-{
-	return trailing_strtoln(str, NULL);
-}
-
 /* we use this so that we can do without the ctype library */
 #define is_digit(c)	((c) >= '0' && (c) <= '9')
 
-- 
2.6.2

  parent reply	other threads:[~2015-12-04 22:27 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-04 22:27 [U-Boot] [PATCH 0/7] Switch rockchip firefly to using tiny-printf Sjoerd Simons
2015-12-04 22:27 ` [U-Boot] [PATCH 1/7] spl: use panic_str instead of panic Sjoerd Simons
2015-12-06 16:45   ` Simon Glass
2015-12-08  0:39     ` Simon Glass
2015-12-14  3:44       ` Simon Glass
2015-12-04 22:27 ` [U-Boot] [PATCH 2/7] spl: mmc: Explicitly init mmc struct Sjoerd Simons
2015-12-06 16:45   ` Simon Glass
2015-12-04 22:27 ` [U-Boot] [PATCH 3/7] lib/tiny-printf.c: Implement vprintf Sjoerd Simons
2015-12-08  0:39   ` Simon Glass
2015-12-14  3:44     ` Simon Glass
2015-12-04 22:27 ` [U-Boot] [PATCH 4/7] lib: Split panic functions out of vsprintf.c Sjoerd Simons
2015-12-08  0:39   ` Simon Glass
2015-12-08  7:27     ` Sjoerd Simons
2015-12-08 19:34       ` Simon Glass
2015-12-08 19:36         ` Scott Wood
2015-12-08 19:38           ` Simon Glass
2015-12-14  3:45             ` Simon Glass
2015-12-14  7:38               ` Sjoerd Simons
2015-12-04 22:27 ` Sjoerd Simons [this message]
2015-12-08  0:39   ` [U-Boot] [PATCH 5/7] lib: split out strtoxxxx " Simon Glass
2015-12-08  7:30     ` Sjoerd Simons
2015-12-14  3:45       ` Simon Glass
2015-12-04 22:27 ` [U-Boot] [PATCH 6/7] mmc: mmc: Don't use sprintf when using tiny-printf Sjoerd Simons
2015-12-08  0:40   ` Simon Glass
2015-12-08  7:34     ` Sjoerd Simons
2015-12-14  3:45       ` Simon Glass
2015-12-04 22:27 ` [U-Boot] [PATCH 7/7] rockchip: firefly: Use tiny-printf Sjoerd Simons
2015-12-08  0:40   ` Simon Glass
2015-12-14  3:45     ` Simon Glass
2015-12-05 10:00 ` [U-Boot] [PATCH 0/7] Switch rockchip firefly to using tiny-printf Stefan Roese
2015-12-07 21:43   ` Simon Glass
2015-12-07 21:53     ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1449268061-805-6-git-send-email-sjoerd.simons@collabora.co.uk \
    --to=sjoerd.simons@collabora.co.uk \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.