]> git.saurik.com Git - apt.git/blobdiff - ftparchive/override.cc
ensure proper teardown in dpkg error cases
[apt.git] / ftparchive / override.cc
index 1288ff133483c83fb9289520649bb26a12e6aa55..b4cd49b6c9dd50353670f363c04963ede56bd750 100644 (file)
@@ -16,6 +16,9 @@
 #include <apt-pkg/error.h>
 
 #include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <utility>
 
 #include "override.h"
 
@@ -52,45 +55,41 @@ bool Override::ReadOverride(string const &File,bool const &Source)
       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 %llu #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 %llu #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 %llu #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
@@ -99,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)
@@ -133,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;
@@ -205,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
@@ -236,10 +235,10 @@ Override::Item* Override::GetItem(string const &Package, string const &Architect
          {
            result->FieldOverride[foI->first] = foI->second;
         }
-      } 
-   } 
+      }
+   }
    return result;
-};
+}
 
 
 // Override::Item::SwapMaint - Swap the maintainer field if necessary  /*{{{*/