enhanced the isNumber() method:
[util-vserver.git] / util-vserver / lib_internal / util-isnumber.c
index f5a41c7..165b7a7 100644 (file)
 #endif
 
 #include "util.h"
+#include "util-isnumber.hc"
+#include <limits.h>
 
-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)