Michael Vogt лет назад: 20
Родитель
Сommit
3969913970
4 измененных файлов с 30 добавлено и 59 удалено
  1. 23 55
      apt-pkg/tagfile.cc
  2. 0 2
      apt-pkg/tagfile.h
  3. 1 1
      configure.in
  4. 6 1
      debian/changelog

+ 23 - 55
apt-pkg/tagfile.cc

@@ -33,33 +33,22 @@ using std::string;
 /* */
 /* */
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
      Fd(*pFd),
      Fd(*pFd),
-     Size(Size),
-     Map(NULL),
-     Buffer(0)
+     Size(Size)
 {
 {
    if (Fd.IsOpen() == false)
    if (Fd.IsOpen() == false)
    {
    {
+      Buffer = 0;
       Start = End = Buffer = 0;
       Start = End = Buffer = 0;
       Done = true;
       Done = true;
       iOffset = 0;
       iOffset = 0;
-      Map = NULL;
       return;
       return;
    }
    }
    
    
-   // check if we can MMap it
-   if(Fd.Size() == 0)
-   {
-      Buffer = new char[Size];
-      Start = End = Buffer;
-      Done = false;
-      Fill();
-   } else {
-      Map = new MMap (Fd, MMap::Public | MMap::ReadOnly);
-      Buffer = (char *) Map->Data ();
-      Start = Buffer;
-      End = Buffer + Map->Size ();
-   }
+   Buffer = new char[Size];
+   Start = End = Buffer;
+   Done = false;
    iOffset = 0;
    iOffset = 0;
+   Fill();
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
@@ -67,8 +56,7 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
-   if(!Map) delete [] Buffer;
-   delete Map;
+   delete [] Buffer;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::Step - Advance to the next section				/*{{{*/
 // TagFile::Step - Advance to the next section				/*{{{*/
@@ -76,15 +64,8 @@ pkgTagFile::~pkgTagFile()
 /* If the Section Scanner fails we refill the buffer and try again. */
 /* If the Section Scanner fails we refill the buffer and try again. */
 bool pkgTagFile::Step(pkgTagSection &Tag)
 bool pkgTagFile::Step(pkgTagSection &Tag)
 {
 {
-   if ((Map != NULL) && (Start == End))
-      return false;
-
    if (Tag.Scan(Start,End - Start) == false)
    if (Tag.Scan(Start,End - Start) == false)
    {
    {
-      if (Map != NULL)
-	 return _error->Error(_("Unable to parse package file %s (1)"),
-			      Fd.Name().c_str());
-
       if (Fill() == false)
       if (Fill() == false)
 	 return false;
 	 return false;
       
       
@@ -158,30 +139,23 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
       return Step(Tag);
       return Step(Tag);
    }
    }
 
 
+   // Reposition and reload..
    iOffset = Offset;
    iOffset = Offset;
-   if (Map != NULL)
-   {
-      Start = Buffer + iOffset;
-   } 
-   else 
-   {
-      // Reposition and reload..
-      Done = false;
-      if (Fd.Seek(Offset) == false)
-	 return false;
-      End = Start = Buffer;
+   Done = false;
+   if (Fd.Seek(Offset) == false)
+      return false;
+   End = Start = Buffer;
    
    
-      if (Fill() == false)
-	 return false;
+   if (Fill() == false)
+      return false;
 
 
-      if (Tag.Scan(Start,End - Start) == true)
-	 return true;
+   if (Tag.Scan(Start,End - Start) == true)
+      return true;
+   
+   // This appends a double new line (for the real eof handling)
+   if (Fill() == false)
+      return false;
    
    
-      // This appends a double new line (for the real eof handling)
-      if (Fill() == false)
-	 return false;
-   }
-
    if (Tag.Scan(Start,End - Start) == false)
    if (Tag.Scan(Start,End - Start) == false)
       return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
       return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
    
    
@@ -192,12 +166,12 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This looks for the first double new line in the data stream. It also
 /* This looks for the first double new line in the data stream. It also
    indexes the tags in the section. This very simple hash function for the
    indexes the tags in the section. This very simple hash function for the
-   first 3 letters gives very good performance on the debian package files */
+   last 8 letters gives very good performance on the debian package files */
 inline static unsigned long AlphaHash(const char *Text, const char *End = 0)
 inline static unsigned long AlphaHash(const char *Text, const char *End = 0)
 {
 {
    unsigned long Res = 0;
    unsigned long Res = 0;
    for (; Text != End && *Text != ':' && *Text != 0; Text++)
    for (; Text != End && *Text != ':' && *Text != 0; Text++)
-      Res = (unsigned long)(*Text) ^ (Res << 2);
+      Res = ((unsigned long)(*Text) & 0xDF) ^ (Res << 1);
    return Res & 0xFF;
    return Res & 0xFF;
 }
 }
 
 
@@ -207,7 +181,7 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
    Stop = Section = Start;
    Stop = Section = Start;
    memset(AlphaIndexes,0,sizeof(AlphaIndexes));
    memset(AlphaIndexes,0,sizeof(AlphaIndexes));
 
 
-   if (Stop == 0 || MaxLength == 0)
+   if (Stop == 0)
       return false;
       return false;
    
    
    TagCount = 0;
    TagCount = 0;
@@ -238,12 +212,6 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
       Stop++;
       Stop++;
    }
    }
 
 
-   if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r'))
-   {
-      Indexes[TagCount] = (End - 1) - Section;
-      return true;
-   }
-
    return false;
    return false;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 0 - 2
apt-pkg/tagfile.h

@@ -25,7 +25,6 @@
 #endif 
 #endif 
 
 
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/fileutl.h>
-#include <apt-pkg/mmap.h>
 #include <stdio.h>
 #include <stdio.h>
     
     
 class pkgTagSection
 class pkgTagSection
@@ -70,7 +69,6 @@ class pkgTagSection
 class pkgTagFile
 class pkgTagFile
 {
 {
    FileFd &Fd;
    FileFd &Fd;
-   MMap *Map;
    char *Buffer;
    char *Buffer;
    char *Start;
    char *Start;
    char *End;
    char *End;

+ 1 - 1
configure.in

@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 
 dnl -- SET THIS TO THE RELEASE VERSION --
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.45")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.45.1")
 PACKAGE="apt"
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
 AC_SUBST(PACKAGE)

+ 6 - 1
debian/changelog

@@ -22,8 +22,13 @@ apt (0.6.45.1) unstable; urgency=low
     * fi.po: Updated to 512t. Closes: #382702
     * fi.po: Updated to 512t. Closes: #382702
   * share/archive-archive.gpg:
   * share/archive-archive.gpg:
     - removed the outdated amd64 and debian-2004 keys
     - removed the outdated amd64 and debian-2004 keys
+  * apt-pkg/tagfile.cc:
+    - applied patch from Jeroen van Wolffelaar to make the tags
+      caseinsensitive (closes: #384182)
+    - reverted MMap use in the tagfile because it does not work 
+      across pipes (closes: #383487) 
   
   
- -- 
+ --
 
 
 apt (0.6.45) unstable; urgency=low
 apt (0.6.45) unstable; urgency=low