Add read_version() to convert version string to numbers
read_version() takes a version string in format "x.y.z" with x being major, y minor, and z patch number. It transforms reads them into separate numbers, and outputs in the correspondingly named variables.
This commit is contained in:
@@ -132,3 +132,21 @@ void set_priority(int priority)
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Convert a version string x.y.z into numbers.
|
||||
*
|
||||
* The function takes a version string of format "x.y.z" where x is the major
|
||||
* version number, y minor, z patch. It tries to match version, and outputs the
|
||||
* numbers in the correspondingly named variables.
|
||||
*
|
||||
* @return The number of version parts matched (should be three on x.y.z).
|
||||
*/
|
||||
int read_version(const char *version, uint8_t *major, uint8_t *minor, uint8_t *patch)
|
||||
{
|
||||
int ret = sscanf(version, "%hhu.%hhu.%hhu", major, minor, patch);
|
||||
// EOF means "end of input reached or matching failure"
|
||||
if (ret == EOF)
|
||||
return 3;
|
||||
return ret; // ret has number of items matched
|
||||
}
|
||||
|
||||
@@ -107,6 +107,10 @@ void set_priority(int priority);
|
||||
|
||||
char *itoa(int i);
|
||||
|
||||
#define STRINGIFY(S) #S
|
||||
#define TO_STRING(S) STRINGIFY(S)
|
||||
int read_version(const char *version, uint8_t *major, uint8_t *minor, uint8_t *patch);
|
||||
|
||||
#define findInList(keY, result, list, element_type) {\
|
||||
int i;\
|
||||
for (i=0; i<sizeof(list)/sizeof(element_type) ; i++)\
|
||||
|
||||
Reference in New Issue
Block a user