-// $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 <enrico.scholz@informatik.tu-chemnitz.de>
//
#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)