]> git.saurik.com Git - apt-legacy.git/blobdiff - apt-pkg/tagfile.cc
Ported to APT 0.7.25.3.
[apt-legacy.git] / apt-pkg / tagfile.cc
index 7ef5df38e808ab5f03ebb957bf23ddc63a738612..046156476100800debf71affb1b87987a8fa3a9f 100644 (file)
@@ -144,10 +144,12 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
 
    if (Stop == 0)
       return false;
-   
+
    TagCount = 0;
    while (TagCount+1 < sizeof(Indexes)/sizeof(Indexes[0]) && Stop < End)
    {
+       TrimRecord(true,End);
+
       // Start a new index and add it to the hash
       if (isspace(Stop[0]) == 0)
       {
@@ -164,14 +166,14 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
          Stop = End;
          goto end;
       }
-      
+
       for (; Stop+1 < End && Stop[1] == '\r'; Stop++);
 
       // Double newline marks the end of the record
       if (Stop+1 == End || Stop[1] == '\n')
       end: {
         Indexes[TagCount] = Stop - Section;
-        for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
+        TrimRecord(false,End);
         return true;
       }
       
@@ -181,6 +183,16 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
    return false;
 }
                                                                        /*}}}*/
+// TagSection::TrimRecord - Trim off any garbage before/after a record /*{{{*/
+// ---------------------------------------------------------------------
+/* There should be exactly 2 newline at the end of the record, no more. */
+void pkgTagSection::TrimRecord(bool BeforeRecord, const char*& End)
+{
+   if (BeforeRecord == true)
+      return;
+   for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
+}
+                                                                       /*}}}*/
 // TagSection::Trim - Trim off any trailing garbage                    /*{{{*/
 // ---------------------------------------------------------------------
 /* There should be exactly 1 newline at the end of the buffer, no more. */
@@ -331,7 +343,6 @@ bool pkgTagSection::FindFlag(const char *Tag,unsigned long &Flags,
    return true;
 }
                                                                        /*}}}*/
-
 // TFRewrite - Rewrite a control record                                        /*{{{*/
 // ---------------------------------------------------------------------
 /* This writes the control record to stdout rewriting it as necessary. The