]> git.saurik.com Git - apt.git/blobdiff - ftparchive/override.cc
Port TagIterator to correctly support ReMap (doh).
[apt.git] / ftparchive / override.cc
index 045a8b1132608f7263cee627ee5411b98b734b5f..8a0c5bab1d887bbd193b21e6d04dd2ea5e14a9f7 100644 (file)
 // Include Files                                                       /*{{{*/
 #include <config.h>
 
-#include <apti18n.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/error.h>
 
 #include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <utility>
 
 #include "override.h"
+
+#include <apti18n.h>
                                                                        /*}}}*/
 
 // Override::ReadOverride - Read the override file                     /*{{{*/
@@ -33,8 +37,8 @@ bool Override::ReadOverride(string const &File,bool const &Source)
    if (F == 0)
       return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
    
-   char Line[500];
-   unsigned long Counter = 0;
+   char Line[1000];
+   unsigned long long Counter = 0;
    while (fgets(Line,sizeof(Line),F) != 0)
    {
       Counter++;
@@ -48,48 +52,44 @@ bool Override::ReadOverride(string const &File,bool const &Source)
       // Strip space leading up to the package name, skip blank lines
       char *Pkg = Line;
       for (; isspace(*Pkg) && *Pkg != 0;Pkg++);
-      if (Pkg == 0)
+      if (*Pkg == 0)
         continue;
 
+#define APT_FIND_NEXT_FIELD \
+      for (End++; isspace(*End) != 0 && *End != 0; ++End) \
+        /* skip spaces */ ; \
+      Start = End; \
+      for (; isspace(*End) == 0 && *End != 0; ++End) \
+        /* find end of word */ ;
+
+#define APT_WARNING_MALFORMED_LINE(FIELD) \
+      if (*End == 0) \
+      { \
+        _error->Warning(_("Malformed override %s line %llu (%s)"),File.c_str(), \
+                        Counter, FIELD ); \
+        continue; \
+      } \
+      *End = 0;
+
       // Find the package and zero..
-      char *Start = Pkg;
+      char *Start;
       char *End = Pkg;
       for (; isspace(*End) == 0 && *End != 0; End++);
-      if (*End == 0)
-      {
-        _error->Warning(_("Malformed override %s line %lu #1"),File.c_str(),
-                        Counter);
-        continue;
-      }      
-      *End = 0;
+      APT_WARNING_MALFORMED_LINE("pkgname");
+
+      APT_FIND_NEXT_FIELD;
 
       // Find the priority
       if (Source == false)
       {
-        for (End++; isspace(*End) != 0 && *End != 0; End++);
-        Start = End;
-        for (; isspace(*End) == 0 && *End != 0; End++);
-        if (*End == 0)
-        {
-           _error->Warning(_("Malformed override %s line %lu #2"),File.c_str(),
-                           Counter);
-           continue;
-        }
-        *End = 0;
+        APT_WARNING_MALFORMED_LINE("priority");
         Itm.Priority = Start;
+
+        APT_FIND_NEXT_FIELD;
       }
-      
+
       // Find the Section
-      for (End++; isspace(*End) != 0 && *End != 0; End++);
-      Start = End;
-      for (; isspace(*End) == 0 && *End != 0; End++);
-      if (*End == 0)
-      {
-        _error->Warning(_("Malformed override %s line %lu #3"),File.c_str(),
-                        Counter);
-        continue;
-      }      
-      *End = 0;
+      APT_WARNING_MALFORMED_LINE("section");
       Itm.FieldOverride["Section"] = Start;
 
       // Source override files only have the two columns
@@ -98,7 +98,7 @@ bool Override::ReadOverride(string const &File,bool const &Source)
         Mapping[Pkg] = Itm;
         continue;
       }
-      
+
       // Find the =>
       for (End++; isspace(*End) != 0 && *End != 0; End++);
       if (*End != 0)
@@ -132,7 +132,7 @@ bool Override::ReadOverride(string const &File,bool const &Source)
 // Override::ReadExtraOverride - Read the extra override file          /*{{{*/
 // ---------------------------------------------------------------------
 /* This parses the extra override file and reads it into the map */
-bool Override::ReadExtraOverride(string const &File,bool const &Source)
+bool Override::ReadExtraOverride(string const &File,bool const &/*Source*/)
 {
    if (File.empty() == true)
       return true;
@@ -141,8 +141,8 @@ bool Override::ReadExtraOverride(string const &File,bool const &Source)
    if (F == 0)
       return _error->Errno("fopen",_("Unable to open %s"),File.c_str());
   
-   char Line[500];
-   unsigned long Counter = 0;
+   char Line[1000];
+   unsigned long long Counter = 0;
    while (fgets(Line,sizeof(Line),F) != 0)
    {
       Counter++;
@@ -163,7 +163,7 @@ bool Override::ReadExtraOverride(string const &File,bool const &Source)
       for (; isspace(*End) == 0 && *End != 0; End++);
       if (*End == 0)
       {
-        _error->Warning(_("Malformed override %s line %lu #1"),File.c_str(),
+        _error->Warning(_("Malformed override %s line %llu #1"),File.c_str(),
                         Counter);
         continue;
       }      
@@ -175,7 +175,7 @@ bool Override::ReadExtraOverride(string const &File,bool const &Source)
       for (; isspace(*End) == 0 && *End != 0; End++);
       if (*End == 0)
       {
-        _error->Warning(_("Malformed override %s line %lu #2"),File.c_str(),
+        _error->Warning(_("Malformed override %s line %llu #2"),File.c_str(),
                         Counter);
         continue;
       }
@@ -188,7 +188,7 @@ bool Override::ReadExtraOverride(string const &File,bool const &Source)
       for (; isspace(*(End-1)) && End > Value; End--);
       if (End == Value)
       {
-        _error->Warning(_("Malformed override %s line %lu #3"),File.c_str(),
+        _error->Warning(_("Malformed override %s line %llu #3"),File.c_str(),
                         Counter);
         continue;
       }      
@@ -204,7 +204,7 @@ bool Override::ReadExtraOverride(string const &File,bool const &Source)
 }
                                                                        /*}}}*/
 
-// Override::GetItem - Get a architecture specific item        /*{{{*/
+// Override::GetItem - Get a architecture specific item                        /*{{{*/
 // ---------------------------------------------------------------------
 /* Returns a override item for the given package and the given architecture.
  * Treats "all" special
@@ -231,14 +231,14 @@ Override::Item* Override::GetItem(string const &Package, string const &Architect
         if (R->OldMaint != "") result->OldMaint = R->OldMaint;
         if (R->NewMaint != "") result->NewMaint = R->NewMaint;
         for (map<string,string>::const_iterator foI = R->FieldOverride.begin();
-             foI != R->FieldOverride.end(); foI++)
+             foI != R->FieldOverride.end(); ++foI)
          {
            result->FieldOverride[foI->first] = foI->second;
         }
-      } 
-   } 
+      }
+   }
    return result;
-};
+}
 
 
 // Override::Item::SwapMaint - Swap the maintainer field if necessary  /*{{{*/
@@ -268,7 +268,7 @@ string Override::Item::SwapMaint(string const &Orig,bool &Failed)
       string::const_iterator Start = End;      
       for (; End < OldMaint.end() &&
           (End + 3 >= OldMaint.end() || End[0] != ' ' || 
-           End[1] != '/' || End[2] != '/'); End++);
+           End[1] != '/' || End[2] != '/'); ++End);
       if (stringcasecmp(Start,End,Orig.begin(),Orig.end()) == 0)
         return NewMaint;
       
@@ -276,7 +276,7 @@ string Override::Item::SwapMaint(string const &Orig,bool &Failed)
         break;
 
       // Skip the divider and white space
-      for (; End < OldMaint.end() && (*End == '/' || *End == ' '); End++);
+      for (; End < OldMaint.end() && (*End == '/' || *End == ' '); ++End);
    }
 #else
    if (stringcasecmp(OldMaint.begin(),OldMaint.end(),Orig.begin(),Orig.end()) == 0)