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*2d40c451Schristosfido_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