]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/deblistparser.cc
Hide hit for local uris
[apt.git] / apt-pkg / deb / deblistparser.cc
index c2ae6de9cb70e9314a5f6b65a25cef1aa59d22b1..669c5cd50e3cdb69fd5bff0126d85bb63504db13 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: deblistparser.cc,v 1.8 1998/07/19 04:42:16 jgg Exp $
+// $Id: deblistparser.cc,v 1.13 1998/12/14 08:07:29 jgg Exp $
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
 /* */
 debListParser::debListParser(FileFd &File) : Tags(File)
 {
-}
-                                                                       /*}}}*/
-// ListParser::FindTag - Find the tag and return a string              /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string debListParser::FindTag(const char *Tag)
-{
-   const char *Start;
-   const char *Stop;
-   if (Section.Find(Tag,Start,Stop) == false)
-      return string();
-   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  /*{{{*/
@@ -73,45 +37,12 @@ unsigned long debListParser::UniqFindTagWrite(const char *Tag)
    return WriteUniqString(Start,Stop - Start);
 }
                                                                        /*}}}*/
-// ListParser::HandleFlag - Sets a flag variable based on a tag                /*{{{*/
-// ---------------------------------------------------------------------
-/* This checks the tag for true/false yes/no etc */
-bool debListParser::HandleFlag(const char *Tag,unsigned long &Flags,
-                              unsigned long Flag)
-{
-   const char *Start;
-   const char *Stop;
-   if (Section.Find(Tag,Start,Stop) == false)
-      return true;
-   
-   int Set = 2;
-   if (stringcasecmp(Start,Stop,"yes") == 0)
-      Set = 1;
-   if (stringcasecmp(Start,Stop,"true") == 0)
-      Set = 1;
-   if (stringcasecmp(Start,Stop,"no") == 0)
-      Set = 0;
-   if (stringcasecmp(Start,Stop,"false") == 0)
-      Set = 0;
-   if (Set == 2)
-   {
-      _error->Warning("Unknown flag value");
-      return true;
-   }
-   
-   if (Set == 0)
-      Flags &= ~Flag;
-   if (Set == 1)
-      Flags |= Flag;
-   return true;
-}
-                                                                       /*}}}*/
 // ListParser::Package - Return the package name                       /*{{{*/
 // ---------------------------------------------------------------------
 /* This is to return the name of the package this section describes */
 string debListParser::Package()
 {
-   string Result = FindTag("Package");
+   string Result = Section.FindS("Package");
    if (Result.empty() == true)
       _error->Error("Encoutered a section with no Package: header");
    return Result;
@@ -124,7 +55,7 @@ string debListParser::Package()
    entry is assumed to only describe package properties */
 string debListParser::Version()
 {
-   return FindTag("Version");
+   return Section.FindS("Version");
 }
                                                                        /*}}}*/
 // ListParser::NewVersion - Fill in the version structure              /*{{{*/
@@ -133,16 +64,13 @@ string debListParser::Version()
 bool debListParser::NewVersion(pkgCache::VerIterator Ver)
 {
    // Parse the section
-   if ((Ver->Section = UniqFindTagWrite("Section")) == 0)
-      return _error->Warning("Missing Section tag");
+   Ver->Section = UniqFindTagWrite("Section");
    
    // Archive Size
-   if ((Ver->Size = (unsigned)FindTagI("Size")) == 0)
-      return _error->Error("Unparsable Size field");
+   Ver->Size = (unsigned)Section.FindI("Size");
    
    // Unpacked Size (in K)
-   if ((Ver->InstalledSize = (unsigned)FindTagI("Installed-Size")) == 0)
-      return _error->Error("Unparsable Installed-Size field");
+   Ver->InstalledSize = (unsigned)Section.FindI("Installed-Size");
    Ver->InstalledSize *= 1024;
 
    // Priority
@@ -170,7 +98,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator Ver)
       return false;
    if (ParseDepends(Ver,"Conflicts",pkgCache::Dep::Conflicts) == false)
       return false;
-   if (ParseDepends(Ver,"Replaces",pkgCache::Dep::Depends) == false)
+   if (ParseDepends(Ver,"Replaces",pkgCache::Dep::Replaces) == false)
       return false;
 
    if (ParseProvides(Ver) == false)
@@ -187,11 +115,10 @@ bool debListParser::UsePackage(pkgCache::PkgIterator Pkg,
                               pkgCache::VerIterator Ver)
 {
    if (Pkg->Section == 0)
-      if ((Pkg->Section = UniqFindTagWrite("Section")) == 0)
-        return false;
-   if (HandleFlag("Essential",Pkg->Flags,pkgCache::Flag::Essential) == false)
+      Pkg->Section = UniqFindTagWrite("Section");
+   if (Section.FindFlag("Essential",Pkg->Flags,pkgCache::Flag::Essential) == false)
       return false;
-   if (HandleFlag("Immediate-Configure",Pkg->Flags,pkgCache::Flag::ImmediateConf) == false)
+   if (Section.FindFlag("Immediate-Configure",Pkg->Flags,pkgCache::Flag::ImmediateConf) == false)
       return false;
    if (ParseStatus(Pkg,Ver) == false)
       return false;
@@ -516,3 +443,36 @@ bool debListParser::Step()
    return false;
 }
                                                                        /*}}}*/
+// ListParser::LoadReleaseInfo - Load the release information          /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
+                                   FileFd &File)
+{
+   pkgTagFile Tags(File);
+   pkgTagSection Section;
+   if (Tags.Step(Section) == false)
+      return false;
+
+   const char *Start;
+   const char *Stop;
+   if (Section.Find("Archive",Start,Stop) == true)
+      FileI->Archive = WriteUniqString(Start,Stop - Start);
+   if (Section.Find("Component",Start,Stop) == true)
+      FileI->Component = WriteUniqString(Start,Stop - Start);
+   if (Section.Find("Version",Start,Stop) == true)
+      FileI->Version = WriteUniqString(Start,Stop - Start);
+   if (Section.Find("Origin",Start,Stop) == true)
+      FileI->Origin = WriteUniqString(Start,Stop - Start);
+   if (Section.Find("Label",Start,Stop) == true)
+      FileI->Label = WriteUniqString(Start,Stop - Start);
+   if (Section.Find("Architecture",Start,Stop) == true)
+      FileI->Architecture = WriteUniqString(Start,Stop - Start);
+   
+   if (Section.FindFlag("NotAutomatic",FileI->Flags,
+                       pkgCache::Flag::NotAutomatic) == false)
+      _error->Warning("Bad NotAutomatic flag");
+   
+   return !_error->PendingError();
+}
+                                                                       /*}}}*/