950413db2d40e223b719ab1835e0bd85a5618143
[olsrd.git] / lib / pud / src / configTools.c
1 #include "configTools.h"
2
3 /* Plugin includes */
4 #include "pud.h"
5
6 /* OLSR includes */
7
8 /* System includes */
9 #include <stdlib.h>
10 #include <errno.h>
11 #include <assert.h>
12
13 /**
14  Read an unsigned long long number from a string
15
16  @param parameterName
17  The name of the parameter, used when reporting errors
18  @param str
19  The string to convert to a number
20  @param dst
21  A pointer to the location where to store the number upon successful conversion
22  Not touched when errors are reported.
23
24  @return
25  - true on success
26  - false otherwise
27  */
28 bool readULL(const char * parameterName, const char * str, unsigned long long * dst) {
29         char * endPtr = NULL;
30         unsigned long long value;
31
32         assert(parameterName != NULL);
33         assert(str != NULL);
34         assert(dst != NULL);
35
36         errno = 0;
37         value = strtoull(str, &endPtr, 10);
38
39         if (!((endPtr != str) && (*str != '\0') && (*endPtr == '\0'))) {
40                 /* invalid conversion */
41                 pudError(true, "Value of parameter %s (%s) could not be converted to a number", parameterName, str);
42                 return false;
43         }
44
45         *dst = value;
46         return true;
47 }
48
49 /**
50  Read a double number from a string
51
52  @param parameterName
53  The name of the parameter, used when reporting errors
54  @param str
55  The string to convert to a number
56  @param dst
57  A pointer to the location where to store the number upon successful conversion
58  Not touched when errors are reported.
59
60  @return
61  - true on success
62  - false otherwise
63  */
64  bool readDouble(const char * parameterName, const char * str, double * dst) {
65         char * endPtr = NULL;
66         double value;
67
68         assert(parameterName != NULL);
69         assert(str != NULL);
70         assert(dst != NULL);
71
72         errno = 0;
73         value = strtod(str, &endPtr);
74
75         if (!((endPtr != str) && (*str != '\0') && (*endPtr == '\0'))) {
76                 /* invalid conversion */
77                 pudError(true, "Value of parameter %s (%s) could not be converted to a number", parameterName, str);
78                 return false;
79         }
80
81         *dst = value;
82         return true;
83 }