xref: /netbsd-src/external/bsd/libfido2/dist/src/util.c (revision 2d40c4512a84c0d064ec30a492c5e2a14d230bc3)
1*2d40c451Schristos /*
2*2d40c451Schristos  * Copyright (c) 2022 Yubico AB. All rights reserved.
3*2d40c451Schristos  * Use of this source code is governed by a BSD-style
4*2d40c451Schristos  * license that can be found in the LICENSE file.
5*2d40c451Schristos  * SPDX-License-Identifier: BSD-2-Clause
6*2d40c451Schristos  */
7*2d40c451Schristos 
8*2d40c451Schristos #include <errno.h>
9*2d40c451Schristos #include <stdint.h>
10*2d40c451Schristos #include <stdlib.h>
11*2d40c451Schristos 
12*2d40c451Schristos #include "fido.h"
13*2d40c451Schristos 
14*2d40c451Schristos int
fido_to_uint64(const char * str,int base,uint64_t * out)15*2d40c451Schristos fido_to_uint64(const char *str, int base, uint64_t *out)
16*2d40c451Schristos {
17*2d40c451Schristos 	char *ep;
18*2d40c451Schristos 	unsigned long long ull;
19*2d40c451Schristos 
20*2d40c451Schristos 	errno = 0;
21*2d40c451Schristos 	ull = strtoull(str, &ep, base);
22*2d40c451Schristos 	if (str == ep || *ep != '\0')
23*2d40c451Schristos 		return -1;
24*2d40c451Schristos 	else if (ull == ULLONG_MAX && errno == ERANGE)
25*2d40c451Schristos 		return -1;
26*2d40c451Schristos 	else if (ull > UINT64_MAX)
27*2d40c451Schristos 		return -1;
28*2d40c451Schristos 	*out = (uint64_t)ull;
29*2d40c451Schristos 
30*2d40c451Schristos 	return 0;
31*2d40c451Schristos }
32