From c549d4fe64c48ab645740e6d12c69c91250fad3d Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 1 May 2014 15:18:06 -0300 Subject: 'lua_strtonum' (and 'luaO_str2num') now return string size, instead of receiving it --- lobject.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'lobject.c') diff --git a/lobject.c b/lobject.c index a95948f5..bc594482 100644 --- a/lobject.c +++ b/lobject.c @@ -1,5 +1,5 @@ /* -** $Id: lobject.c,v 2.82 2014/04/29 18:14:16 roberto Exp roberto $ +** $Id: lobject.c,v 2.83 2014/04/30 16:48:44 roberto Exp roberto $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ @@ -254,22 +254,21 @@ static lua_Number lua_strx2number (const char *s, char **endptr) { /* }====================================================== */ -static int l_str2d (const char *s, size_t len, lua_Number *result) { +static const char *l_str2d (const char *s, lua_Number *result) { char *endptr; if (strpbrk(s, "nN")) /* reject 'inf' and 'nan' */ - return 0; + return NULL; else if (strpbrk(s, "xX")) /* hexa? */ *result = lua_strx2number(s, &endptr); else *result = lua_str2number(s, &endptr); if (endptr == s) return 0; /* nothing recognized */ while (lisspace(cast_uchar(*endptr))) endptr++; - return (endptr == s + len); /* OK if no trailing characters */ + return (*endptr == '\0' ? endptr : NULL); /* OK if no trailing characters */ } -static int l_str2int (const char *s, size_t len, lua_Integer *result) { - const char *ends = s + len; +static const char *l_str2int (const char *s, lua_Integer *result) { lua_Unsigned a = 0; int empty = 1; int neg; @@ -290,25 +289,26 @@ static int l_str2int (const char *s, size_t len, lua_Integer *result) { } } while (lisspace(cast_uchar(*s))) s++; /* skip trailing spaces */ - if (empty || s != ends) return 0; /* something wrong in the numeral */ + if (empty || *s != '\0') return NULL; /* something wrong in the numeral */ else { *result = l_castU2S((neg) ? 0u - a : a); - return 1; + return s; } } -int luaO_str2num (const char *s, size_t len, TValue *o) { +size_t luaO_str2num (const char *s, TValue *o) { lua_Integer i; lua_Number n; - if (l_str2int(s, len, &i)) { /* try as an integer */ + const char *e; + if ((e = l_str2int(s, &i)) != NULL) { /* try as an integer */ setivalue(o, i); } - else if (l_str2d(s, len, &n)) { /* else try as a float */ + else if ((e = l_str2d(s, &n)) != NULL) { /* else try as a float */ setfltvalue(o, n); } else return 0; /* conversion failed */ - return 1; /* success */ + return (e - s + 1); /* success; return string size */ } -- cgit v1.2.3-55-g6feb