1 /*
2  * Copyright (C) 2018-2022 Intel Corporation.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #include <stdlib.h>
9 #include <string.h>
10 #include <stdio.h>
11 #include <errno.h>
12 #include "dm_string.h"
13 
14 int
dm_strtol(const char * s,char ** end,unsigned int base,long * val)15 dm_strtol(const char *s, char **end, unsigned int base, long *val)
16 {
17 	if (!s)
18 		return -1;
19 
20 	*val = strtol(s, end, base);
21 	if ((end && *end == s) || errno == ERANGE)
22 		return -1;
23 	return 0;
24 }
25 
26 int
dm_strtoi(const char * s,char ** end,unsigned int base,int * val)27 dm_strtoi(const char *s, char **end, unsigned int base, int *val)
28 {
29 	long l_val;
30 	int ret;
31 
32 	l_val = 0;
33 	ret = dm_strtol(s, end, base, &l_val);
34 	if (ret == 0)
35 		*val = (int)l_val;
36 	return ret;
37 }
38 
39 int
dm_strtoul(const char * s,char ** end,unsigned int base,unsigned long * val)40 dm_strtoul(const char *s, char **end, unsigned int base, unsigned long *val)
41 {
42 	if (!s)
43 		return -1;
44 
45 	*val = strtoul(s, end, base);
46 	if ((end && *end == s) || errno == ERANGE)
47 		return -1;
48 	return 0;
49 }
50 
51 int
dm_strtoui(const char * s,char ** end,unsigned int base,unsigned int * val)52 dm_strtoui(const char *s, char **end, unsigned int base, unsigned int *val)
53 {
54 	unsigned long l_val;
55 	int ret;
56 
57 	l_val = 0;
58 	ret = dm_strtoul(s, end, base, &l_val);
59 	if (ret == 0)
60 		*val = (unsigned int)l_val;
61 	return ret;
62 }
63