...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <signal.h> #include <stdlib.h> volatile sig_atomic_t denom; void sighandle(int s) { /* Fix the offending volatile */ if (denom == 0) { denom = 1; } } int main(int argc, char *argv[]) { int result = 0; if (argc < 2) { return 0; } denom = (sig_atomic_t) strtol(argv[1], NULL, 10); signal(SIGFPE, (*sighandle)); result = 100 / (int)denom; return 0; } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <signal.h> #include <stdlib.h> volatile sig_atomic_t denom; void sighandle(int s) { /* Recovery is impossible */ abort(); } int main(int argc, char *argv[]) { int result = 0; if (argc < 2) { return 0; } denom = (sig_atomic_t) strtol(argv[1], NULL, 10); signal(SIGFPE, (*sighandle)); result = 100 / (int)denom; return 0; } |
...