#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;
SR_API char *sr_voltage_string(uint64_t v_p, uint64_t v_q)
{
if (v_q == 1000)
- return g_strdup_printf("%" PRIu64 "mV", v_p);
+ return g_strdup_printf("%" PRIu64 " mV", v_p);
else if (v_q == 1)
- return g_strdup_printf("%" PRIu64 "V", v_p);
+ return g_strdup_printf("%" PRIu64 " V", v_p);
else
- return g_strdup_printf("%gV", (float)v_p / (float)v_q);
+ return g_strdup_printf("%g V", (float)v_p / (float)v_q);
}
/**