|
@@ -1,6 +1,6 @@
|
|
|
// -*- mode: cpp; mode: fold -*-
|
|
// -*- mode: cpp; mode: fold -*-
|
|
|
// Description /*{{{*/
|
|
// Description /*{{{*/
|
|
|
-// $Id: deblistparser.cc,v 1.1 1998/07/04 05:58:08 jgg Exp $
|
|
|
|
|
|
|
+// $Id: deblistparser.cc,v 1.2 1998/07/04 22:32:17 jgg Exp $
|
|
|
/* ######################################################################
|
|
/* ######################################################################
|
|
|
|
|
|
|
|
Package Cache Generator - Generator for the cache structure.
|
|
Package Cache Generator - Generator for the cache structure.
|
|
@@ -20,7 +20,6 @@
|
|
|
/* */
|
|
/* */
|
|
|
debListParser::debListParser(File &File) : Tags(File)
|
|
debListParser::debListParser(File &File) : Tags(File)
|
|
|
{
|
|
{
|
|
|
- Step();
|
|
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// ListParser::FindTag - Find the tag and return a string /*{{{*/
|
|
// ListParser::FindTag - Find the tag and return a string /*{{{*/
|
|
@@ -35,6 +34,30 @@ string debListParser::FindTag(const char *Tag)
|
|
|
return string(Start,Stop - Start);
|
|
return string(Start,Stop - Start);
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
+// ListParser::FindTagI - Find the tag and return an int /*{{{*/
|
|
|
|
|
+// ---------------------------------------------------------------------
|
|
|
|
|
+/* */
|
|
|
|
|
+signed long debListParser::FindTagI(const char *Tag,signed long Default)
|
|
|
|
|
+{
|
|
|
|
|
+ const char *Start;
|
|
|
|
|
+ const char *Stop;
|
|
|
|
|
+ if (Section.Find(Tag,Start,Stop) == false)
|
|
|
|
|
+ return Default;
|
|
|
|
|
+
|
|
|
|
|
+ // Copy it into a temp buffer so we can use strtol
|
|
|
|
|
+ char S[300];
|
|
|
|
|
+ if ((unsigned)(Stop - Start) >= sizeof(S))
|
|
|
|
|
+ return Default;
|
|
|
|
|
+ strncpy(S,Start,Stop-Start);
|
|
|
|
|
+ S[Stop - Start] = 0;
|
|
|
|
|
+
|
|
|
|
|
+ char *End;
|
|
|
|
|
+ signed long Result = strtol(S,&End,10);
|
|
|
|
|
+ if (S == End)
|
|
|
|
|
+ return Default;
|
|
|
|
|
+ return Result;
|
|
|
|
|
+}
|
|
|
|
|
+ /*}}}*/
|
|
|
// ListParser::UniqFindTagWrite - Find the tag and write a unq string /*{{{*/
|
|
// ListParser::UniqFindTagWrite - Find the tag and write a unq string /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
@@ -115,7 +138,35 @@ bool debListParser::NewPackage(pkgCache::PkgIterator Pkg)
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
|
bool debListParser::NewVersion(pkgCache::VerIterator Ver)
|
|
bool debListParser::NewVersion(pkgCache::VerIterator Ver)
|
|
|
-{
|
|
|
|
|
|
|
+{
|
|
|
|
|
+ // Parse the section
|
|
|
|
|
+ if ((Ver->Section = UniqFindTagWrite("Section")) == 0)
|
|
|
|
|
+ return _error->Warning("Missing Section tag");
|
|
|
|
|
+
|
|
|
|
|
+ // Archive Size
|
|
|
|
|
+ if ((Ver->Size = (unsigned)FindTagI("Size")) == 0)
|
|
|
|
|
+ return _error->Error("Unparsable Size field");
|
|
|
|
|
+
|
|
|
|
|
+ // Unpacked Size (in K)
|
|
|
|
|
+ if ((Ver->InstalledSize = (unsigned)FindTagI("Installed-Size")) == 0)
|
|
|
|
|
+ return _error->Error("Unparsable Installed-Size field");
|
|
|
|
|
+ Ver->InstalledSize *= 1024;
|
|
|
|
|
+
|
|
|
|
|
+ // Priority
|
|
|
|
|
+ const char *Start;
|
|
|
|
|
+ const char *Stop;
|
|
|
|
|
+ if (Section.Find("Priority",Start,Stop) == true)
|
|
|
|
|
+ {
|
|
|
|
|
+ WordList PrioList[] = {{"important",pkgCache::Important},
|
|
|
|
|
+ {"required",pkgCache::Required},
|
|
|
|
|
+ {"standard",pkgCache::Standard},
|
|
|
|
|
+ {"optional",pkgCache::Optional},
|
|
|
|
|
+ {"extra",pkgCache::Extra}};
|
|
|
|
|
+ if (GrabWord(string(Start,Stop-Start),PrioList,
|
|
|
|
|
+ _count(PrioList),Ver->Priority) == false)
|
|
|
|
|
+ return _error->Error("Malformed Priority line");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
@@ -247,9 +298,26 @@ bool debListParser::GrabWord(string Word,WordList *List,int Count,
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// ListParser::Step - Move to the next section in the file /*{{{*/
|
|
// ListParser::Step - Move to the next section in the file /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
-/* */
|
|
|
|
|
|
|
+/* This has to be carefull to only process the correct architecture */
|
|
|
bool debListParser::Step()
|
|
bool debListParser::Step()
|
|
|
{
|
|
{
|
|
|
- return Tags.Step(Section);
|
|
|
|
|
|
|
+ while (Tags.Step(Section) == true)
|
|
|
|
|
+ {
|
|
|
|
|
+ /* See if this is the correct Architecture, if it isnt then we
|
|
|
|
|
+ drop the whole section */
|
|
|
|
|
+ const char *Start;
|
|
|
|
|
+ const char *Stop;
|
|
|
|
|
+ if (Section.Find("Architecture",Start,Stop) == false)
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+ if (strncmp(Start,"i386",Stop - Start) == 0 &&
|
|
|
|
|
+ strlen("i386") == (unsigned)(Stop - Start))
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+ if (strncmp(Start,"all",Stop - Start) == 0 &&
|
|
|
|
|
+ 3 == (unsigned)(Stop - Start))
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|