xcf: fix float comparison in xcf generic loader.
authorCedric BAIL <cedric@osg.samsung.com>
Mon, 19 Dec 2016 20:11:37 +0000 (12:11 -0800)
committerCedric BAIL <cedric@osg.samsung.com>
Tue, 20 Dec 2016 00:33:46 +0000 (16:33 -0800)
src/generic/evas/xcf/pixelfuncs.c

index 67d66d8..a243c79 100644 (file)
 
 #include "common.h"
 
+#include <float.h>
+
+#define EINA_FLT_CMP(a, b) (fabsf((float)a - (float)b) <= FLT_EPSILON)
+
 #define RS R_VAL(src + s_idx)
 #define GS G_VAL(src + s_idx)
 #define BS B_VAL(src + s_idx)
@@ -128,7 +132,7 @@ hls_to_rgb (DATA8 *hue, DATA8 *lightness, DATA8 *saturation)
   l = *lightness;
   s = *saturation;
 
-  if (s == 0)
+  if (EINA_FLT_CMP(s, 0))
     {
       /*  achromatic case  */
       *hue        = l;
@@ -138,9 +142,9 @@ hls_to_rgb (DATA8 *hue, DATA8 *lightness, DATA8 *saturation)
   else
     {
       if (l < 128)
-       m2 = (l * (255 + s)) / 65025.0;
+        m2 = (l * (255 + s)) / 65025.0;
       else
-       m2 = (l + s - (l * s) / 255.0) / 255.0;
+        m2 = (l + s - (l * s) / 255.0) / 255.0;
 
       m1 = (l / 127.5) - m2;
 
@@ -184,23 +188,23 @@ rgb_to_hsv (DATA8 *red, DATA8 *green, DATA8 *blue)
   else
     s = 0;
 
-  if (s == 0)
+  if (EINA_FLT_CMP(s, 0))
     h = 0;
   else
     {
       delta = max - min;
       if (r == max)
-       h = (g - b) / (double) delta;
+        h = (g - b) / (double) delta;
       else if (g == max)
-       h = 2 + (b - r) / (double) delta;
+        h = 2 + (b - r) / (double) delta;
       else if (b == max)
-       h = 4 + (r - g) / (double) delta;
+        h = 4 + (r - g) / (double) delta;
       h *= 42.5;
 
       if (h < 0)
-       h += 255;
+        h += 255;
       if (h > 255)
-       h -= 255;
+        h -= 255;
     }
 
   *red   = h;