From: Andy Shevchenko <ext-andriy.shevche...@nokia.com>

Try to use simple_strtoul() kernel native method instead.

However, there are opened questions:
 - why type of Atoi() is s32 if the sign is used only to detect base?
 - should we really to check hex integers like DEAD0123h?
 - how many spaces could lead token?

Signed-off-by: Andy Shevchenko <ext-andriy.shevche...@nokia.com>
---
 drivers/dsp/bridge/rmgr/dbdcd.c |   42 +++++---------------------------------
 1 files changed, 6 insertions(+), 36 deletions(-)

diff --git a/drivers/dsp/bridge/rmgr/dbdcd.c b/drivers/dsp/bridge/rmgr/dbdcd.c
index 9efb7dc..a460d1a 100644
--- a/drivers/dsp/bridge/rmgr/dbdcd.c
+++ b/drivers/dsp/bridge/rmgr/dbdcd.c
@@ -1001,50 +1001,20 @@ DSP_STATUS DCD_UnregisterObject(IN struct DSP_UUID 
*pUuid,
  */
 static s32 Atoi(char *pszBuf)
 {
-       s32 result = 0;
        char *pch = pszBuf;
-       char c;
-       char first;
-       s32 base = 10;
-       s32 len;
+       s32 base = 0;
 
        while (isspace(*pch))
                pch++;
 
-       first = *pch;
-       if (first == '-' || first == '+') {
+       if (*pch == '-' || *pch == '+') {
+               base = 10;
                pch++;
-       } else {
-               /* Determine if base 10 or base 16 */
-               len = strlen(pch);
-               if (len  > 1) {
-                       c = pch[1];
-                       if ((*pch == '0' && (c == 'x' || c == 'X'))) {
-                               base = 16;
-                               pch += 2;
-                       }
-                       c = pch[len - 1];
-                       if (c == 'h' || c == 'H')
-                               base = 16;
-
-               }
-       }
-
-       while (isdigit(c = *pch) || ((base == 16) && isxdigit(c))) {
-               result *= base;
-               if ('A' <= c && c <= 'F') {
-                       c = c - 'A' + 10;
-               } else {
-                       if ('a' <= c && c <= 'f')
-                               c = c - 'a' + 10;
-                       else
-                               c -= '0';
-               }
-               result += c;
-               ++pch;
+       } else if (*pch && tolower(pch[strlen(pch) - 1]) == 'h') {
+               base = 16;
        }
 
-       return result;
+       return simple_strtoul(pch, NULL, base);
 }
 
 /*
-- 
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to