ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek/*
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek SSSD
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek SSSD Utility functions
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek Copyright (C) Stephen Gallagher <sgallagh@redhat.com> 2009
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek This program is free software; you can redistribute it and/or modify
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek it under the terms of the GNU General Public License as published by
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek the Free Software Foundation; either version 3 of the License, or
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek (at your option) any later version.
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek This program is distributed in the hope that it will be useful,
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek GNU General Public License for more details.
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek You should have received a copy of the GNU General Public License
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek*/
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include <ctype.h>
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include <stdlib.h>
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include <errno.h>
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include "config.h"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include "util/util.h"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek#include "util/strtonum.h"
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek/* strtoint32 */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozekint32_t strtoint32(const char *nptr, char **endptr, int base)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek{
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek long long ret = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek ret = strtoll(nptr, endptr, base);
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek if (ret > INT32_MAX) {
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = ERANGE;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return INT32_MAX;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek }
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek else if (ret < INT32_MIN) {
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = ERANGE;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return INT32_MIN;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek }
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek /* If errno was set by strtoll, we'll pass it back as-is */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return (int32_t)ret;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek}
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek/* strtouint32 */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozekuint32_t strtouint32(const char *nptr, char **endptr, int base)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek{
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek unsigned long long ret = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek ret = strtoull(nptr, endptr, base);
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek if (ret > UINT32_MAX) {
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = ERANGE;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return UINT32_MAX;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek }
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek /* If errno was set by strtoll, we'll pass it back as-is */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return (uint32_t)ret;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek}
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek/* strtouint16 */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozekuint16_t strtouint16(const char *nptr, char **endptr, int base)
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek{
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek unsigned long long ret = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = 0;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek ret = strtoull(nptr, endptr, base);
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek if (ret > UINT16_MAX) {
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek errno = ERANGE;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return UINT16_MAX;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek }
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek /* If errno was set by strtoll, we'll pass it back as-is */
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek return (uint16_t)ret;
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek}
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek
ddb51fdac4fbb97a72ba70ae7345c62a03e90c26Jakub Hrozek