http://ftp.x.org/contrib/applications/xscreensaver-2.24.tar.gz
[xscreensaver] / utils / colors.c
index 93366b64cff46c1c02962df2ce58ee788b91db1a..096311624e207601682f6542056870d1171b86bb 100644 (file)
@@ -25,11 +25,15 @@ void
 free_colors(Display *dpy, Colormap cmap, XColor *colors, int ncolors)
 {
   int i;
-  unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ncolors);
-  for (i = 0; i < ncolors; i++)
-    pixels[i] = colors[i].pixel;
-  XFreeColors (dpy, cmap, pixels, ncolors, 0L);
-  free(pixels);
+  if (ncolors > 0)
+    {
+      unsigned long *pixels = (unsigned long *)
+       malloc(sizeof(*pixels) * ncolors);
+      for (i = 0; i < ncolors; i++)
+       pixels[i] = colors[i].pixel;
+      XFreeColors (dpy, cmap, pixels, ncolors, 0L);
+      free(pixels);
+    }
 }
 
 
@@ -46,7 +50,7 @@ allocate_writable_colors (Display *dpy, Colormap cmap,
   while (got < desired
         && requested > 0)
     {
-      if (desired - got > requested)
+      if (desired - got < requested)
        requested = desired - got;
 
       if (XAllocColorCells (dpy, cmap, False, 0, 0, new_pixels, requested))
@@ -490,7 +494,7 @@ make_smooth_colormap (Display *dpy, Visual *visual, Colormap cmap,
          if (dh < 0) dh = -dh;
          if (dh > 0.5) dh = 0.5 - (dh - 0.5);
          distance = sqrt ((dh * dh) +
-                          ((s[j] - s[i]) * (s[j] - v[i])) +
+                          ((s[j] - s[i]) * (s[j] - s[i])) +
                           ((v[j] - v[i]) * (v[j] - v[i])));
          if (distance < 0.2)
            goto REPICK_THIS_COLOR;