X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib_internal%2Futil-isnumber.c;h=66e01fec4e68865f5885fe58ddfc085a6e95c84d;hb=fc28db1eb4146796ec27c2fb15780d6303120261;hp=2fea0e4ecd1199df6c4e24bcd38cb57d773ab914;hpb=8cf13bb177d92c93eb73dc8939777150536c2d00;p=util-vserver.git diff --git a/lib_internal/util-isnumber.c b/lib_internal/util-isnumber.c index 2fea0e4..66e01fe 100644 --- a/lib_internal/util-isnumber.c +++ b/lib_internal/util-isnumber.c @@ -1,4 +1,4 @@ -// $Id: util-isnumber.c,v 1.1 2005/07/04 22:35:47 ensc Exp $ --*- c -*-- +// $Id: util-isnumber.c 2255 2006-01-22 11:23:47Z ensc $ --*- c -*-- // Copyright (C) 2005 Enrico Scholz // @@ -21,18 +21,15 @@ #endif #include "util.h" +#include "util-isnumber.hc" +#include -bool -isNumber(char const *str, signed long *result) +static inline bool +checkConstraints(signed long val, unsigned int fac) { - char * errptr; - signed long val; - - val = strtol(str, &errptr, 0); - if (*errptr!='\0' || errptr==str) - return false; - else { - if (result) *result = val; - return true; - } + if (val>0 && (signed long)(LONG_MAX/fac) <= val) return false; + if (val<0 && (signed long)(LONG_MIN/fac) >= val) return false; + return true; } + +ENSC_DECL_UTIL_ISNUMBER(isNumber, signed long, strtol)