On Mon, May 09, 2005 at 10:56:58PM +0200, Jose Carlos Garcia Sogo wrote:
> El dom, 08-05-2005 a las 20:48 -0700, Rick Younie escribi??:
> > reopen 292337
> > thanks
> > 
> > doc++ builds ok but segfaults when run
> > during libupnp_1.2.1-1 build.
> 
>  This bug arises from time to time, depending on the m68k buildd being
> used. I am not sure that the problem is in the package itself, or it
> using too much memory.
> 
>  Anyway, you should ask upstream to use doxygen instead of doc++. The
> latter is abandoned upstream and will be dropped as soon as possible.

Sure, but right now it's easier to fix doc++ that to fix the 5 packages
depending on it.  Anyway, I've uploaded a revised NMU verified to work
with all 5; patch attached.

Thanks,

Matej
--- ../Attic/doc++/doc++-3.4.10/debian/changelog        2005-05-10 
15:06:19.000000000 +0200
+++ doc++-3.4.10/debian/changelog       2005-05-10 15:17:00.000000000 +0200
@@ -1,3 +1,13 @@
+doc++ (3.4.10-3.2) unstable; urgency=high
+
+  * NMU.
+  * Fix another segfault on m68k.  Closes: #292337.
+    - src/McDirectory.h, src/McDirectory.cc, src/html.cc, src/readfiles.ll:
+      Use std::sort instead of home-brewn code.  (I have no idea why the
+      latter crashes--replacing the algorithm doesn't help.)
+
+ -- Matej Vela <[EMAIL PROTECTED]>  Tue, 10 May 2005 15:17:00 +0200
+
 doc++ (3.4.10-3.1) unstable; urgency=high
 
   * NMU during BSP.
--- ../Attic/doc++/doc++-3.4.10/debian/patches/segfault_fix.patch       
2005-05-10 15:06:19.000000000 +0200
+++ doc++-3.4.10/debian/patches/segfault_fix.patch      2005-05-10 
15:04:30.000000000 +0200
@@ -1,26 +1,5 @@
---- doc++-3.4.10.dist/src/McSorter.h   2000-07-30 12:41:05.000000000 +0200
-+++ doc++-3.4.10/src/McSorter.h        2005-05-08 15:46:50.000000000 +0200
-@@ -46,6 +46,9 @@
-     int       i0, i1, j;
-     double c;
- 
-+    if (start + 1 >= end)
-+      return;
-+
-     T work, mid, tmp;
- 
-     work = t[start];
-@@ -85,7 +88,7 @@
- 
-     if(start < i0 - 1)
-       sort(t, i0, compare, start);
--    if(i1 + 1 < end)
-+    if(i1 + 1 < end - 1)
-       sort(t, end, compare, i1 + 1);
- }
- 
 --- doc++-3.4.10.dist/src/McDArray.h   2000-07-30 12:40:48.000000000 +0200
-+++ doc++-3.4.10/src/McDArray.h        2005-05-08 05:55:58.000000000 +0200
++++ doc++-3.4.10/src/McDArray.h        2005-05-10 15:02:06.000000000 +0200
 @@ -80,9 +80,14 @@
      McDArray(const McDArray& old) : memFactor(old.memFactor),
        thesize(old.thesize), themax(old.themax)
@@ -39,9 +18,114 @@
        assert(isConsistent());
        }
  
+--- doc++-3.4.10.dist/src/McDirectory.cc       2000-03-14 22:17:36.000000000 
+0100
++++ doc++-3.4.10/src/McDirectory.cc    2005-05-10 15:02:18.000000000 +0200
+@@ -23,12 +23,13 @@
+ */
+ 
+ #include "McDirectory.h"
+-#include "McSorter.h"
+ #include "McString.h"
+ #include "doc.h"
+ 
+ #include <stdio.h>
+ 
++#include <algorithm>
++
+ #ifdef WIN32
+ #include <windows.h>
+ #ifdef __BORLANDC__
+@@ -62,7 +63,7 @@
+     FindClose(searchHandle);
+     StringCompare comp;
+     if(list.size())
+-      sort((char **)list, list.size(), comp, 0);
++      std::sort((char **)list, (char **)list + list.size(), comp);
+     return 0;
+ }
+ 
+@@ -107,7 +108,7 @@
+     closedir(dir);
+     StringCompare comp;
+     if(list.size())
+-      sort((char **)list, list.size(), comp, 0);
++      std::sort((char **)list, (char **)list + list.size(), comp);
+     return list.size();
+ }
+ 
+--- doc++-3.4.10.dist/src/McDirectory.h        2000-06-28 21:54:58.000000000 
+0200
++++ doc++-3.4.10/src/McDirectory.h     2005-05-10 15:02:18.000000000 +0200
+@@ -59,9 +59,9 @@
+     class StringCompare
+       {
+       public:
+-          int operator()(const char *t1, const char *t2)
++          bool operator()(const char *t1, const char *t2)
+               {
+-              return strcmp(t1, t2);
++              return strcmp(t1, t2) < 0;
+               }
+       };
+ };
 --- doc++-3.4.10.dist/src/html.cc      2001-02-17 07:34:49.000000000 +0100
-+++ doc++-3.4.10/src/html.cc   2005-05-08 14:42:12.000000000 +0200
-@@ -487,7 +487,7 @@
++++ doc++-3.4.10/src/html.cc   2005-05-10 15:02:18.000000000 +0200
+@@ -38,9 +38,10 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ 
++#include <algorithm>
++
+ #include "McDirectory.h"
+ #include "McHashTable.h"
+-#include "McSorter.h"
+ #include "classgraph.h"
+ #include "doc.h"
+ #include "gifs.h"
+@@ -314,9 +315,11 @@
+       virtual void writeMember(Entry *e, bool links, bool withSub = true);
+       class EntryCompare {
+           public:
+-              int operator()(const MemberWriterListEntry& l1, const 
MemberWriterListEntry& l2)
++              bool operator()(const MemberWriterListEntry& l1, const 
MemberWriterListEntry& l2)
+                   {
+-                  return strcmp(l1.entry->fullName.c_str(), 
l2.entry->fullName.c_str());
++                  const char *s1 = l1.entry->fullName.c_str();
++                  const char *s2 = l2.entry->fullName.c_str();
++                  return strcmp(s1, s2) < 0;
+                   }
+       };
+     public:
+@@ -324,7 +327,7 @@
+           {
+           EntryCompare comp;
+           if(list.size())
+-              ::sort((MemberWriterListEntry *)list, list.size(), comp, 0);
++              std::sort((MemberWriterListEntry *)list, (MemberWriterListEntry 
*)list + list.size(), comp);
+           }
+       virtual void startList(FILE *f, char *heading, bool withLinks);
+       virtual void addMember(Entry *e, bool links, bool withSub = true)
+@@ -376,7 +379,7 @@
+           int lp;
+ 
+           if(list.size() > 1)
+-              ::sort((TOCListEntry *)list, list.size(), comp, 0);
++              std::sort((TOCListEntry *)list, (TOCListEntry *)list + 
list.size(), comp);
+ 
+           // Sort subsections
+           for(lp = 0; lp < list.size(); lp++)
+@@ -385,9 +388,9 @@
+           }
+       class EntryCompare {
+           public:
+-              int operator()(TOCListEntry& l1, TOCListEntry& l2)
++              bool operator()(const TOCListEntry& l1, const TOCListEntry& l2)
+                   {
+-                  return strcmp(l1.name, l2.name);
++                  return strcmp(l1.name, l2.name) < 0;
+                   }
+       };
+       void addEntry(Entry *entry, TOClist *tl);
+@@ -487,7 +490,7 @@
  
      for(i = 0; i < list.size(); i++)
        if(list[i].tl)
@@ -50,3 +134,34 @@
  }
  
  class HIERlist;
+@@ -509,7 +512,7 @@
+           int i;
+ 
+           if(list.size() > 1)
+-              ::sort((HIERListEntry *)list, list.size(), comp, 0);
++              std::sort((HIERListEntry *)list, (HIERListEntry *)list + 
list.size(), comp);
+ 
+           // Sort subentries
+           for(i = 0; i < list.size(); i++)
+@@ -519,9 +522,9 @@
+       class EntryCompare
+           {
+           public:
+-              int operator()(HIERListEntry& l1, HIERListEntry& l2)
++              bool operator()(const HIERListEntry& l1, const HIERListEntry& 
l2)
+                   {
+-                  return strcmp(l1.name, l2.name);
++                  return strcmp(l1.name, l2.name) < 0;
+                   }
+           };
+       void addEntry(Entry *entry, HIERlist *hl);
+--- doc++-3.4.10.dist/src/readfiles.ll 2001-11-25 18:04:48.000000000 +0100
++++ doc++-3.4.10/src/readfiles.ll      2005-05-10 15:02:18.000000000 +0200
+@@ -28,7 +28,6 @@
+ #include <sys/types.h>
+ 
+ #include "McDirectory.h"
+-#include "McSorter.h"
+ #include "McString.h"
+ #include "doc.h"
+ #include "nametable.h"

Reply via email to