Hi,

On 2/3/2010 4:14 AM, Andy Shevchenko wrote:
From: Andy Shevchenko<ext-andriy.shevche...@nokia.com>

Try to use simple_strtol() kernel native method instead.

strtol or strtoul?


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 caa57f1..fe2ed57 100644
--- a/drivers/dsp/bridge/rmgr/dbdcd.c
+++ b/drivers/dsp/bridge/rmgr/dbdcd.c
@@ -1002,50 +1002,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&&  (pch[strlen(pch) - 1] | 0x20 == 'h')) {

perhaps tolower(x)

otherwise: (pch[strlen(pch) - 1] | 0x20 == 'h')
should be ((pch[strlen(pch) - 1] | 0x20) == 'h')

+               base = 16;
        }

-       return result;
+       return simple_strtoul(pch, NULL, base);
  }

  /*

- omar
--
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