#include <string.h>
#include <strings.h>
#include <errno.h>
+#include <stdbool.h>
#include <libsigrok/libsigrok.h>
#include "libsigrok-internal.h"
int64_t denominator = 1;
int32_t fractional_len = 0;
int32_t exponent = 0;
+ bool is_negative = false;
errno = 0;
integral = g_ascii_strtoll(str, &endptr, 10);
- if (errno)
+ if (str == endptr && (str[0] == '-' || str[0] == '+') && str[1] == '.')
+ endptr += 1;
+ else if (errno)
return SR_ERR;
+ if (integral < 0 || str[0] == '-')
+ is_negative = true;
+
if (*endptr == '.') {
const char* start = endptr + 1;
fractional = g_ascii_strtoll(start, &endptr, 10);
integral *= 10;
exponent -= fractional_len;
- if (integral >= 0)
+ if (!is_negative)
integral += fractional;
else
integral -= fractional;