| #include "str2long.h" | |
| long str2long_robert_3(const char *str) | |
| { | |
| long result = 0; | |
| int i; | |
| if (str[0] == '-') { | |
| if (str[1] == '\0') | |
| error = 1; | |
| for (i=1; str[i]=='0'; i++) | |
| ; | |
| for (; str[i]; i++) { | |
| int c = str[i]; | |
| if (c < '0' || '9' < c) { | |
| error = 1; | |
| return 0; | |
| } else if (result < LONG_MIN/10) { | |
| error = 1; | |
| return 0; | |
| } else if (result * 10 < (LONG_MIN + (c - '0'))) { | |
| error = 1; | |
| return 0; | |
| } else | |
| result = result * 10 - (c - '0'); | |
| } | |
| } else { | |
| if (str[0] == '\0') | |
| error = 1; | |
| for (i=0; str[i]=='0'; i++) | |
| ; | |
| for (; str[i]; i++) { | |
| int c = str[i]; | |
| if (c < '0' || '9' < c) { | |
| error = 1; | |
| return 0; | |
| } else if (result > LONG_MAX/10) { | |
| error = 1; | |
| return 0; | |
| } else if (result * 10 > (LONG_MAX - (c - '0'))) { | |
| error = 1; | |
| return 0; | |
| } else | |
| result = result * 10 + (c - '0'); | |
| } | |
| } | |
| return result; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment