strutil: Add helper functions: string to number.
This patch adds helper functions for converting a string to different number formats (double, long, float, int). These functions are exposed in the public API.
This commit is contained in:
parent
3ba7b61ab2
commit
9e4f8cf93b
4
proto.h
4
proto.h
|
@ -141,6 +141,10 @@ SR_API uint64_t sr_parse_timestring(const char *timestring);
|
|||
SR_API gboolean sr_parse_boolstring(const char *boolstring);
|
||||
SR_API int sr_parse_period(const char *periodstr, uint64_t *p, uint64_t *q);
|
||||
SR_API int sr_parse_voltage(const char *voltstr, uint64_t *p, uint64_t *q);
|
||||
SR_API int sr_atol(const char *str, long *ret);
|
||||
SR_API int sr_atoi(const char *str, int *ret);
|
||||
SR_API int sr_atod(const char *str, double *ret);
|
||||
SR_API int sr_atof(const char *str, float *ret);
|
||||
|
||||
/*--- version.c -------------------------------------------------------------*/
|
||||
|
||||
|
|
121
strutil.c
121
strutil.c
|
@ -21,6 +21,7 @@
|
|||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include "libsigrok.h"
|
||||
#include "libsigrok-internal.h"
|
||||
|
||||
|
@ -47,6 +48,126 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Convert a string representation of a numeric value to a long integer. The
|
||||
* conversion is strict and will fail if the complete string does not represent
|
||||
* a valid long integer. The function sets errno according to the details of the
|
||||
* failure.
|
||||
*
|
||||
* @param str The string representation to convert.
|
||||
* @param ret Pointer to long where the result of the conversion will be stored.
|
||||
*
|
||||
* @return SR_OK if conversion is successful, otherwise SR_ERR.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
SR_API int sr_atol(const char *str, long *ret)
|
||||
{
|
||||
long tmp;
|
||||
char *endptr = NULL;
|
||||
|
||||
errno = 0;
|
||||
tmp = strtol(str, &endptr, 0);
|
||||
|
||||
if (!endptr || *endptr || errno) {
|
||||
if (!errno)
|
||||
errno = EINVAL;
|
||||
return SR_ERR;
|
||||
}
|
||||
|
||||
*ret = tmp;
|
||||
return SR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string representation of a numeric value to an integer. The
|
||||
* conversion is strict and will fail if the complete string does not represent
|
||||
* a valid integer. The function sets errno according to the details of the
|
||||
* failure.
|
||||
*
|
||||
* @param str The string representation to convert.
|
||||
* @param ret Pointer to int where the result of the conversion will be stored.
|
||||
*
|
||||
* @return SR_OK if conversion is successful, otherwise SR_ERR.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
SR_API int sr_atoi(const char *str, int *ret)
|
||||
{
|
||||
long tmp;
|
||||
|
||||
if (sr_atol(str, &tmp) != SR_OK)
|
||||
return SR_ERR;
|
||||
|
||||
if ((int) tmp != tmp) {
|
||||
errno = ERANGE;
|
||||
return SR_ERR;
|
||||
}
|
||||
|
||||
*ret = (int) tmp;
|
||||
return SR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string representation of a numeric value to a double. The
|
||||
* conversion is strict and will fail if the complete string does not represent
|
||||
* a valid double. The function sets errno according to the details of the
|
||||
* failure.
|
||||
*
|
||||
* @param str The string representation to convert.
|
||||
* @param ret Pointer to double where the result of the conversion will be stored.
|
||||
*
|
||||
* @return SR_OK if conversion is successful, otherwise SR_ERR.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
SR_API int sr_atod(const char *str, double *ret)
|
||||
{
|
||||
double tmp;
|
||||
char *endptr = NULL;
|
||||
|
||||
errno = 0;
|
||||
tmp = strtof(str, &endptr);
|
||||
|
||||
if (!endptr || *endptr || errno) {
|
||||
if (!errno)
|
||||
errno = EINVAL;
|
||||
return SR_ERR;
|
||||
}
|
||||
|
||||
*ret = tmp;
|
||||
return SR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string representation of a numeric value to a float. The
|
||||
* conversion is strict and will fail if the complete string does not represent
|
||||
* a valid float. The function sets errno according to the details of the
|
||||
* failure.
|
||||
*
|
||||
* @param str The string representation to convert.
|
||||
* @param ret Pointer to float where the result of the conversion will be stored.
|
||||
*
|
||||
* @return SR_OK if conversion is successful, otherwise SR_ERR.
|
||||
*
|
||||
* @since 0.3.0
|
||||
*/
|
||||
SR_API int sr_atof(const char *str, float *ret)
|
||||
{
|
||||
double tmp;
|
||||
|
||||
if (sr_atod(str, &tmp) != SR_OK)
|
||||
return SR_ERR;
|
||||
|
||||
if ((float) tmp != tmp) {
|
||||
errno = ERANGE;
|
||||
return SR_ERR;
|
||||
}
|
||||
|
||||
*ret = (float) tmp;
|
||||
return SR_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a numeric value value to its "natural" string representation
|
||||
* in SI units.
|
||||
|
|
Loading…
Reference in New Issue