Blame SOURCES/file-5.39-floating-point-exception.patch

286be5
diff --git a/src/Makefile.am b/src/Makefile.am
286be5
index b43cb8e..93d6625 100644
286be5
--- a/src/Makefile.am
286be5
+++ b/src/Makefile.am
286be5
@@ -17,10 +17,10 @@ MINGWLIBS = -lgnurx -lshlwapi
286be5
 else
286be5
 MINGWLIBS =
286be5
 endif
286be5
-libmagic_la_LIBADD = $(LTLIBOBJS) $(MINGWLIBS)
286be5
+libmagic_la_LIBADD = -lm $(LTLIBOBJS) $(MINGWLIBS)
286be5
 
286be5
 file_SOURCES = file.c seccomp.c
286be5
-file_LDADD = libmagic.la
286be5
+file_LDADD = libmagic.la -lm
286be5
 CLEANFILES = magic.h
286be5
 EXTRA_DIST = magic.h.in
286be5
 HDR= $(top_srcdir)/src/magic.h.in
286be5
diff --git a/src/softmagic.c b/src/softmagic.c
286be5
index becc53c..39c7e0b 100644
286be5
--- a/src/softmagic.c
286be5
+++ b/src/softmagic.c
286be5
@@ -37,6 +37,7 @@ FILE_RCSID("@(#)$File: softmagic.c,v 1.299 2020/06/07 21:58:01 christos Exp $")
286be5
 
286be5
 #include "magic.h"
286be5
 #include <assert.h>
286be5
+#include <math.h>
286be5
 #include <string.h>
286be5
 #include <ctype.h>
286be5
 #include <stdlib.h>
286be5
@@ -2074,19 +2075,19 @@ magiccheck(struct magic_set *ms, struct magic *m, file_regex_t **m_cache)
286be5
 			break;
286be5
 
286be5
 		case '!':
286be5
-			matched = fv != fl;
286be5
+			matched = isunordered(fl, fv) ? 1 : fv != fl;
286be5
 			break;
286be5
 
286be5
 		case '=':
286be5
-			matched = fv == fl;
286be5
+			matched = isunordered(fl, fv) ? 0 : fv == fl;
286be5
 			break;
286be5
 
286be5
 		case '>':
286be5
-			matched = fv > fl;
286be5
+			matched = isgreater(fv, fl);
286be5
 			break;
286be5
 
286be5
 		case '<':
286be5
-			matched = fv < fl;
286be5
+			matched = isless(fv, fl);
286be5
 			break;
286be5
 
286be5
 		default:
286be5
@@ -2107,19 +2108,19 @@ magiccheck(struct magic_set *ms, struct magic *m, file_regex_t **m_cache)
286be5
 			break;
286be5
 
286be5
 		case '!':
286be5
-			matched = dv != dl;
286be5
+			matched = isunordered(dv, dl) ? 1 : dv != dl;
286be5
 			break;
286be5
 
286be5
 		case '=':
286be5
-			matched = dv == dl;
286be5
+			matched = isunordered(dv, dl) ? 0 : dv == dl;
286be5
 			break;
286be5
 
286be5
 		case '>':
286be5
-			matched = dv > dl;
286be5
+			matched = isgreater(dv, dl);
286be5
 			break;
286be5
 
286be5
 		case '<':
286be5
-			matched = dv < dl;
286be5
+			matched = isless(dv, dl);
286be5
 			break;
286be5
 
286be5
 		default: