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