parse_size_string() incorrectly parses a real number, e.g. 1.5 kHz ends up
being 1Hz.
This patch fixes parse_size_string() to take the fractional part as well into
account. The fractional part is parsed as an double precision floating point
number while ignoring the locale.
---
strutil.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/strutil.c b/strutil.c
index 17d59e8..f4e4825 100644
--- a/strutil.c
+++ b/strutil.c
@@ -422,15 +422,20 @@ SR_API char **sr_parse_triggerstring(const struct
sr_dev_inst *sdi,
SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size)
{
int multiplier, done;
+ double frac_part;
char *s;
*size = strtoull(sizestring, &s, 10);
multiplier = 0;
+ frac_part = 0;
done = FALSE;
while (s && *s && multiplier == 0 && !done) {
switch (*s) {
case ' ':
break;
+ case '.':
+ frac_part = g_ascii_strtod(s, &s);
+ break;
case 'k':
case 'K':
multiplier = SR_KHZ(1);
@@ -449,8 +454,11 @@ SR_API int sr_parse_sizestring(const char *sizestring,
uint64_t *size)
}
s++;
}
- if (multiplier > 0)
+ if (multiplier > 0) {
*size *= multiplier;
+ *size += frac_part * multiplier;
+ } else
+ *size += frac_part;
if (*s && strcasecmp(s, "Hz"))
return SR_ERR;
--
1.8.5.3
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
sigrok-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sigrok-devel