|
|
@@ -81,7 +81,7 @@ bool pkgTagFile::Resize()
|
|
|
End = Start + EndSize;
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
+ /*}}}*/
|
|
|
// TagFile::Step - Advance to the next section /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* If the Section Scanner fails we refill the buffer and try again.
|
|
|
@@ -212,10 +212,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)
|
|
|
{
|
|
|
@@ -227,14 +229,14 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
|
|
|
|
|
|
if (Stop == 0)
|
|
|
return false;
|
|
|
-
|
|
|
+
|
|
|
for (; Stop+1 < End && Stop[1] == '\r'; Stop++);
|
|
|
|
|
|
// Double newline marks the end of the record
|
|
|
if (Stop+1 < End && Stop[1] == '\n')
|
|
|
{
|
|
|
Indexes[TagCount] = Stop - Section;
|
|
|
- for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++);
|
|
|
+ TrimRecord(false,End);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -244,6 +246,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. */
|
|
|
@@ -390,7 +402,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
|