metex14: Fix parsing of measurement flags.

strcmp(buf + 9, "  mA") does not work because buf is CR-terminated,
while "  mA" is NUL-terminated.

Drop ambiguities arising from the termination of the strings, and
only compare the characters we care about, using strncmp().

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
This commit is contained in:
Alexandru Gagniuc 2012-11-30 13:11:04 -06:00 committed by Uwe Hermann
parent e82d7dbc20
commit 3ebc9b59a2
1 changed files with 11 additions and 11 deletions

View File

@ -135,27 +135,27 @@ static void parse_flags(const char *buf, struct metex14_info *info)
/* Bytes 3-8: See parse_value(). */ /* Bytes 3-8: See parse_value(). */
/* Bytes 9-12: Unit */ /* Bytes 9-12: Unit */
if (!strcmp(buf + 9, " A")) if (!strncmp(buf + 9, " A", 4))
info->is_ampere = TRUE; info->is_ampere = TRUE;
else if (!strcmp(buf + 9, " mA")) else if (!strncmp(buf + 9, " mA", 4))
info->is_milli = info->is_ampere = TRUE; info->is_milli = info->is_ampere = TRUE;
else if (!strcmp(buf + 9, " V")) else if (!strncmp(buf + 9, " V", 4))
info->is_volt = TRUE; info->is_volt = TRUE;
else if (!strcmp(buf + 9, " mV")) else if (!strncmp(buf + 9, " mV", 4))
info->is_milli = info->is_volt = TRUE; info->is_milli = info->is_volt = TRUE;
else if (!strcmp(buf + 9, " Ohm")) else if (!strncmp(buf + 9, " Ohm", 4))
info->is_ohm = TRUE; info->is_ohm = TRUE;
else if (!strcmp(buf + 9, "KOhm")) else if (!strncmp(buf + 9, "KOhm", 4))
info->is_kilo = info->is_ohm = TRUE; info->is_kilo = info->is_ohm = TRUE;
else if (!strcmp(buf + 9, "MOhm")) else if (!strncmp(buf + 9, "MOhm", 4))
info->is_mega = info->is_ohm = TRUE; info->is_mega = info->is_ohm = TRUE;
else if (!strcmp(buf + 9, " nF")) else if (!strncmp(buf + 9, " nF", 4))
info->is_nano = info->is_farad = TRUE; info->is_nano = info->is_farad = TRUE;
else if (!strcmp(buf + 9, " uF")) else if (!strncmp(buf + 9, " uF", 4))
info->is_micro = info->is_farad = TRUE; info->is_micro = info->is_farad = TRUE;
else if (!strcmp(buf + 9, " KHz")) else if (!strncmp(buf + 9, " KHz", 4))
info->is_kilo = info->is_hertz = TRUE; info->is_kilo = info->is_hertz = TRUE;
else if (!strcmp(buf + 9, " C")) else if (!strncmp(buf + 9, " C", 4))
info->is_celsius = TRUE; info->is_celsius = TRUE;
/* Byte 13: Always '\r' (carriage return, 0x0d, 13) */ /* Byte 13: Always '\r' (carriage return, 0x0d, 13) */