#include "libsigrok.h"
#include "libsigrok-internal.h"
-/* Message logging helpers with subsystem-specific prefix string. */
-#define LOG_PREFIX "strutil: "
-#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args)
-#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args)
-#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args)
-#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args)
-#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
-#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args)
+#define LOG_PREFIX "strutil"
/**
* @file
*/
/**
+ * @private
+ *
* 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
}
/**
+ * @private
+ *
* 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
}
/**
+ * @private
+ *
* 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
}
/**
+ * @private
+ *
* 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
SR_GHZ(1000), SR_GHZ(1000 * 1000), SR_GHZ(1000 * 1000 * 1000),
};
const char *p, prefix[] = "\0kMGTPE";
- char fmt[8], fract[20] = "", *f;
+ char fmt[16], fract[20] = "", *f;
if (unit == NULL)
unit = "";
for (i = 0; (quot = x / divisor[i]) >= 1000; i++);
if (i) {
- sprintf(fmt, ".%%0%dlu", i * 3);
+ sprintf(fmt, ".%%0%d"PRIu64, i * 3);
f = fract + sprintf(fract, fmt, x % divisor[i]) - 1;
while (f >= fract && strchr("0.", *f))
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);
}
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;