[Aptitude-svn-commit] r4139 - in branches/aptitude-0.3/aptitude: . src/vscreen

Daniel Burrows dburrows at costa.debian.org
Tue Sep 20 21:05:58 UTC 2005


Author: dburrows
Date: Tue Sep 20 21:05:55 2005
New Revision: 4139

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc
Log:
Don't crash when a tree is emptied by setting its root to NULL.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Tue Sep 20 21:05:55 2005
@@ -1,5 +1,10 @@
 2005-09-20  Daniel Burrows  <dburrows at debian.org>
 
+	* src/vscreen/vs_tree.cc:
+
+	  Be robust in the face of a totally empty tree (one with a NULL
+	  root pointer).
+
 	* src/solution_screen.cc:
 
 	  Display a list of the possible resolutions of the dependency

Modified: branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vs_tree.cc	Tue Sep 20 21:05:55 2005
@@ -295,12 +295,14 @@
 
 bool vs_tree::get_cursorvisible()
 {
-  return (selected!=end && selected->get_selectable());
+  return (root != NULL && selected != end && selected->get_selectable());
 }
 
 point vs_tree::get_cursorloc()
 {
-  if(selected==end || !selected->get_selectable())
+  if(root == NULL)
+    return point(0, 0);
+  else if(selected==end || !selected->get_selectable())
     return point(0,0);
   else
     return point(0, hierarchical?line_of(selected)-1:line_of(selected));
@@ -308,6 +310,9 @@
 
 void vs_tree::line_down()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -401,18 +406,21 @@
 
 void vs_tree::highlight_current()
 {
-  if(selected != end)
+  if(root != NULL && selected != end)
     selected->highlighted(this);
 }
 
 void vs_tree::unhighlight_current()
 {
-  if(selected != end)
+  if(root != NULL && selected != end)
     selected->unhighlighted(this);
 }
 
 void vs_tree::line_up()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -470,6 +478,9 @@
 
 void vs_tree::page_down()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -506,6 +517,9 @@
 
 void vs_tree::page_up()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -545,6 +559,9 @@
 
 void vs_tree::jump_to_begin()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -577,6 +594,9 @@
 
 void vs_tree::jump_to_end()
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   getmaxyx(height,width);
 
@@ -625,6 +645,9 @@
 
 void vs_tree::level_line_up()
 {
+  if(root == NULL)
+    return;
+
   vs_treeiterator tmp=selected;
   tmp.move_backward_level();
   if(tmp!=end)
@@ -633,6 +656,9 @@
 
 void vs_tree::level_line_down()
 {
+  if(root == NULL)
+    return;
+
   vs_treeiterator tmp=selected;
   tmp.move_forward_level();
   if(tmp!=end)
@@ -647,12 +673,12 @@
 
   if(selected!=vs_treeiterator(NULL))
     {
-      if(hierarchical && bindings->key_matches(k, "Parent"))
+      if(root != NULL && hierarchical && bindings->key_matches(k, "Parent"))
 	{
 	  if(!selected.is_root())
 	    set_selection(selected.get_up());
 	}
-      else if(!hierarchical && prev_level && bindings->key_matches(k, "Left"))
+      else if(root != NULL && !hierarchical && prev_level && bindings->key_matches(k, "Left"))
 	{
 	  selected->unhighlighted(this);
 
@@ -669,7 +695,7 @@
 
 	  vscreen_update();
 	}
-      else if(!hierarchical &&
+      else if(root != NULL && !hierarchical &&
 	      selected!=end && selected->get_selectable() &&
 	      selected->begin()!=selected->end() &&
 	      (bindings->key_matches(k, "Right") ||
@@ -714,7 +740,7 @@
       search_for("");*/
       else
 	{
-	  if(selected!=end && selected->get_selectable() &&
+	  if(root != NULL && selected!=end && selected->get_selectable() &&
 	     selected->dispatch_key(k, this))
 	    vscreen_update();
 	  else
@@ -727,6 +753,9 @@
 
 void vs_tree::search_for(vs_tree_search_func &matches)
 {
+  if(root == NULL)
+    return;
+
   vs_treeiterator curr((selected==vs_treeiterator(NULL))?begin:selected, hierarchical),
     start(curr);
   // Make an iterator that ignores all the rules >=)
@@ -765,6 +794,9 @@
 
 void vs_tree::search_back_for(vs_tree_search_func &matches)
 {
+  if(root == NULL)
+    return;
+
   vs_treeiterator curr((selected == vs_treeiterator(NULL))
 		       ? begin : selected, hierarchical),
     start(curr);
@@ -839,6 +871,9 @@
 
 void vs_tree::paint(const style &st)
 {
+  if(root == NULL)
+    return;
+
   int width,height;
   int selectedln=line_of(selected);
 
@@ -935,6 +970,9 @@
 
 void vs_tree::dispatch_mouse(short id, int x, int y, int z, mmask_t bstate)
 {
+  if(root == NULL)
+    return;
+
   if(!hierarchical)
     --y;
 



More information about the Aptitude-svn-commit mailing list