diff options
| author | Karel Klic <kklic@redhat.com> | 2009-12-18 19:12:50 +0100 |
|---|---|---|
| committer | Karel Klic <kklic@redhat.com> | 2009-12-18 19:12:50 +0100 |
| commit | e7661d7e411172ddad8838040ded025ad6bfbb14 (patch) | |
| tree | f2451b553b4fcf959bd2bfc29172f9fb855e5fdd /lib/Utils/xatonum.cpp | |
| parent | ce1904e24b576a7356488852a240d777717b2598 (diff) | |
| parent | 46b2fb8df8d4e025f5bbdd9f53be1f658a9e82c6 (diff) | |
| download | abrt-e7661d7e411172ddad8838040ded025ad6bfbb14.tar.gz abrt-e7661d7e411172ddad8838040ded025ad6bfbb14.tar.xz abrt-e7661d7e411172ddad8838040ded025ad6bfbb14.zip | |
Merge branch 'master' of git://git.fedorahosted.org/git/abrt
Diffstat (limited to 'lib/Utils/xatonum.cpp')
| -rw-r--r-- | lib/Utils/xatonum.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/Utils/xatonum.cpp b/lib/Utils/xatonum.cpp new file mode 100644 index 0000000..b096ca8 --- /dev/null +++ b/lib/Utils/xatonum.cpp @@ -0,0 +1,50 @@ +/* + * Utility routines. + * + * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> + * + * Licensed under GPLv2, see file LICENSE in this tarball for details. + */ +#include "abrtlib.h" + +unsigned xatou(const char *numstr) +{ + unsigned r; + int old_errno; + char *e; + + if (*numstr < '0' || *numstr > '9') + goto inval; + + old_errno = errno; + errno = 0; + r = strtoul(numstr, &e, 10); + if (errno || numstr == e || *e != '\0') + goto inval; /* error / no digits / illegal trailing chars */ + errno = old_errno; /* Ok. So restore errno. */ + return r; + + inval: + error_msg_and_die("invalid number '%s'", numstr); +} + +int xatoi_u(const char *numstr) +{ + unsigned r = xatou(numstr); + if (r > (unsigned)INT_MAX) + error_msg_and_die("invalid number '%s'", numstr); + return r; +} + +int xatoi(const char *numstr) +{ + unsigned r; + + if (*numstr != '-') + return xatoi_u(numstr); + + r = xatou(numstr + 1); + if (r > (unsigned)INT_MAX + 1) + error_msg_and_die("invalid number '%s'", numstr); + return - (int)r; +} |
