http://www.jwz.org/xscreensaver/xscreensaver-5.12.tar.gz
[xscreensaver] / hacks / glx / polyhedra.c
index 72538b34a0042e35b2746ea83c7d10c8804e64a9..7fa22b5c5ae1a76828189d32e256422e9ffd8377 100644 (file)
@@ -91,23 +91,23 @@ extern const char *progname;
     } while(0)
 
 #define Malloc(lvalue,n,type) do {\
-       if (!(lvalue = (type*) malloc((n) * sizeof(type)))) \
-           Err("out of memory");\
+       if (!(lvalue = (type*) calloc((n), sizeof(type)))) \
+           abort();\
     } while(0)
 
 #define Realloc(lvalue,n,type) do {\
        if (!(lvalue = (type*) realloc(lvalue, (n) * sizeof(type)))) \
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Calloc(lvalue,n,type) do {\
        if (!(lvalue = (type*) calloc(n, sizeof(type))))\
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Matalloc(lvalue,n,m,type) do {\
        if (!(lvalue = (type**) matalloc(n, (m) * sizeof(type))))\
-           Err("out of memory");\
+           abort();\
     } while(0)
 
 #define Sprintfrac(lvalue,x) do {\
@@ -2263,7 +2263,7 @@ construct_polyhedron (Polyhedron *P, Vector *v, int V, Vector *f, int F,
         facelets++;
 
       } else if (P->even != -1) {
-        if (hit[i]) {
+        if (hit && hit[i]) {
           push_face3 (result, P->incid[3][i], P->incid[0][i],  ii);
           push_face3 (result, P->incid[1][i], P->incid[2][i],  ii);
         } else {
@@ -2418,7 +2418,7 @@ construct_polyhedra (polyhedron ***polyhedra_ret)
 
   int count = 0;
   polyhedron **result;
-  Malloc (result, last_uniform * 2 + 1, polyhedron*);
+  Malloc (result, last_uniform * 2 + 3, polyhedron*);
 
   while (index < last_uniform) {
     char sym[4];
@@ -2443,5 +2443,6 @@ construct_polyhedra (polyhedron ***polyhedra_ret)
   }
 
   *polyhedra_ret = result;
+  count++; /* leave room for teapot */
   return count;
 }