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