diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2009-09-10 15:56:52 -0400 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2009-09-10 17:28:35 -0400 |
commit | 0ec9546099dc0fc9685188cbe12175f7bfd9a47c (patch) | |
tree | 5fdee74d1e1eb0601d2163933edf20d65db37ece /server/util | |
parent | 514dcddae17141f286f70228ebce885256373be8 (diff) | |
download | sssd-0ec9546099dc0fc9685188cbe12175f7bfd9a47c.tar.gz sssd-0ec9546099dc0fc9685188cbe12175f7bfd9a47c.tar.bz2 sssd-0ec9546099dc0fc9685188cbe12175f7bfd9a47c.zip |
Add strtoint32 and strtouint32 convenience functions
Diffstat (limited to 'server/util')
-rw-r--r-- | server/util/strtonum.c | 65 | ||||
-rw-r--r-- | server/util/strtonum.h | 32 |
2 files changed, 97 insertions, 0 deletions
diff --git a/server/util/strtonum.c b/server/util/strtonum.c new file mode 100644 index 00000000..744e0f71 --- /dev/null +++ b/server/util/strtonum.c @@ -0,0 +1,65 @@ +/* + SSSD + + SSSD Utility functions + + Copyright (C) Stephen Gallagher <sgallagh@redhat.com> 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <ctype.h> +#include <stdlib.h> +#include <errno.h> +#include "config.h" +#include "util/util.h" +#include "util/strtonum.h" + +/* strtoint32 */ +int32_t strtoint32(const char *nptr, char **endptr, int base) +{ + long long ret = 0; + + errno = 0; + ret = strtoll(nptr, endptr, base); + + if (ret > INT32_MAX) { + errno = ERANGE; + return INT32_MAX; + } + else if (ret < INT32_MIN) { + errno = ERANGE; + return INT32_MIN; + } + + /* If errno was set by strtoll, we'll pass it back as-is */ + return (int32_t)ret; +} + + +/* strtouint32 */ +uint32_t strtouint32(const char *nptr, char **endptr, int base) +{ + long long ret = 0; + errno = 0; + ret = strtoull(nptr, endptr, base); + + if (ret > UINT32_MAX) { + errno = ERANGE; + return UINT32_MAX; + } + + /* If errno was set by strtoll, we'll pass it back as-is */ + return (uint32_t)ret; +} diff --git a/server/util/strtonum.h b/server/util/strtonum.h new file mode 100644 index 00000000..45095962 --- /dev/null +++ b/server/util/strtonum.h @@ -0,0 +1,32 @@ +/* + SSSD + + SSSD Utility functions + + Copyright (C) Stephen Gallagher 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _STRTONUM_H_ +#define _STRTONUM_H_ + +#include <ctype.h> +#include <stdlib.h> +#include <stdint.h> + +int32_t strtoint32(const char *nptr, char **endptr, int base); +uint32_t strtouint32(const char *nptr, char **endptr, int base); + +#endif /* _STRTONUM_H_ */ |