Adjusted packing properties as appropriatate
[pspp-builds.git] / lib / gtksheet / psppire-axis-impl.c
index 48059c1a92600137e5a107c9f0872c3d8a1883a5..38ade632366633714d579be5ad9718a46278a15b 100644 (file)
@@ -264,7 +264,8 @@ psppire_axis_impl_append_n (PsppireAxisImpl *a, gint n_units, gint size)
 {
   struct axis_node *node;
 
-  g_return_if_fail (n_units > 0);
+  if  (n_units == 0)
+    return;
 
   node = pool_malloc (a->pool, sizeof *node);
 
@@ -331,12 +332,10 @@ psppire_axis_impl_insert (PsppireAxisImpl *a, gint posn, gint size)
   struct axis_node *before = NULL;
   struct axis_node *new_node;
 
-  g_return_if_fail ( posn < tower_height (&a->unit_tower));
   g_return_if_fail ( posn >= 0);
+  g_return_if_fail ( posn <= tower_height (&a->unit_tower));
 
-  new_node = pool_malloc (a->pool, sizeof (*new_node));
-
-  if ( posn > 0)
+  if ( posn < tower_height (&a->unit_tower))
     {
       unsigned long int start = 0;
       struct tower_node *n;
@@ -349,6 +348,8 @@ psppire_axis_impl_insert (PsppireAxisImpl *a, gint posn, gint size)
       before = tower_data (n, struct axis_node, unit_node);
     }
 
+  new_node = pool_malloc (a->pool, sizeof (*new_node));
+
   tower_insert (&a->unit_tower,
                1,
                &new_node->unit_node,
@@ -398,6 +399,7 @@ resize (PsppireAxis *axis, gint posn, glong size)
 
   struct axis_node *an;
   g_return_if_fail (posn >= 0);
+  g_return_if_fail (size > 0);
 
   /* Silently ignore this request if the position is greater than the number of
      units in the axis */
@@ -436,12 +438,13 @@ psppire_axis_impl_delete (PsppireAxisImpl *a, gint first, gint n_units)
 {
   gint units_to_delete = n_units;
   unsigned long int start;
-  g_return_if_fail (first + n_units < tower_height (&a->unit_tower));
+  struct tower_node *unit_node ;
+  g_return_if_fail (first + n_units <= tower_height (&a->unit_tower));
 
   split (a, first);
   split (a, first + n_units);
 
-  struct tower_node *unit_node = tower_lookup (&a->unit_tower, first, &start);
+  unit_node = tower_lookup (&a->unit_tower, first, &start);
   g_assert (start == first);
 
   while (units_to_delete > 0)