=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/file/magic-test.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- src/usr.bin/file/magic-test.c 2015/05/29 15:58:01 1.6 +++ src/usr.bin/file/magic-test.c 2015/08/11 22:12:48 1.7 @@ -1,4 +1,4 @@ -/* $OpenBSD: magic-test.c,v 1.6 2015/05/29 15:58:01 nicm Exp $ */ +/* $OpenBSD: magic-test.c,v 1.7 2015/08/11 22:12:48 nicm Exp $ */ /* * Copyright (c) 2015 Nicholas Marriott @@ -206,6 +206,18 @@ } static int +magic_test_double(struct magic_line *ml, double value, double wanted) +{ + switch (ml->test_operator) { + case 'x': + return (1); + case '=': + return (value == wanted); + } + return (-1); +} + +static int magic_test_type_none(__unused struct magic_line *ml, __unused struct magic_state *ms) { @@ -417,6 +429,7 @@ { uint32_t value0; double value; + int result; if (magic_copy_from(ms, -1, &value0, sizeof value0) != 0) return (0); @@ -429,11 +442,11 @@ if (ml->type_operator != ' ') return (-1); - if (ml->test_operator != 'x') - return (-1); - - magic_add_result(ms, ml, "%g", value); - ms->offset += sizeof value0; + result = magic_test_double(ml, value, (float)ml->test_double); + if (result == !ml->test_not && ml->result != NULL) { + magic_add_result(ms, ml, "%g", value); + ms->offset += sizeof value0; + } return (1); } @@ -442,6 +455,7 @@ { uint64_t value0; double value; + int result; if (magic_copy_from(ms, -1, &value0, sizeof value0) != 0) return (0); @@ -454,11 +468,11 @@ if (ml->type_operator != ' ') return (-1); - if (ml->test_operator != 'x') - return (-1); - - magic_add_result(ms, ml, "%g", value); - ms->offset += sizeof value0; + result = magic_test_double(ml, value, (double)ml->test_double); + if (result == !ml->test_not && ml->result != NULL) { + magic_add_result(ms, ml, "%g", value); + ms->offset += sizeof value0; + } return (1); }