summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/contrib/configuration.cc2
-rw-r--r--apt-pkg/init.h2
-rw-r--r--apt-pkg/makefile2
-rw-r--r--apt-pkg/policy.cc18
-rw-r--r--apt-pkg/tagfile.cc21
-rw-r--r--apt-pkg/tagfile.h5
6 files changed, 39 insertions, 11 deletions
diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc
index a82311a3f..80584d3ea 100644
--- a/apt-pkg/contrib/configuration.cc
+++ b/apt-pkg/contrib/configuration.cc
@@ -582,7 +582,7 @@ bool ReadConfigFile(Configuration &Conf,const string &FName,bool AsSectional,
if (InQuote == true)
continue;
- if (*I == '/' && I + 1 != End && I[1] == '/')
+ if ((*I == '/' && I + 1 != End && I[1] == '/') || *I == '#')
{
End = I;
break;
diff --git a/apt-pkg/init.h b/apt-pkg/init.h
index 6d8693be9..165299253 100644
--- a/apt-pkg/init.h
+++ b/apt-pkg/init.h
@@ -18,7 +18,7 @@
// See the makefile
#define APT_PKG_MAJOR 4
-#define APT_PKG_MINOR 6
+#define APT_PKG_MINOR 8
#define APT_PKG_RELEASE 0
extern const char *pkgVersion;
diff --git a/apt-pkg/makefile b/apt-pkg/makefile
index 087f17740..059f8532b 100644
--- a/apt-pkg/makefile
+++ b/apt-pkg/makefile
@@ -13,7 +13,7 @@ include ../buildlib/defaults.mak
# methods/makefile - FIXME
LIBRARY=apt-pkg
LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER)
-MAJOR=4.7
+MAJOR=4.8
MINOR=0
SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil
APT_DOMAIN:=libapt-pkg$(MAJOR)
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 8b083fd44..98576fc91 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -239,7 +239,21 @@ signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg)
return 0;
}
/*}}}*/
-
+// PreferenceSection class - Overriding the default TrimRecord method /*{{{*/
+// ---------------------------------------------------------------------
+/* The preference file is a user generated file so the parser should
+ therefore be a bit more friendly by allowing comments and new lines
+ all over the place rather than forcing a special format */
+class PreferenceSection : public pkgTagSection
+{
+ void TrimRecord(bool BeforeRecord, const char* &End)
+ {
+ for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r' || Stop[0] == '#'); Stop++)
+ if (Stop[0] == '#')
+ Stop = (const char*) memchr(Stop,'\n',End-Stop);
+ }
+};
+ /*}}}*/
// ReadPinFile - Load the pin file into a Policy /*{{{*/
// ---------------------------------------------------------------------
/* I'd like to see the preferences file store more than just pin information
@@ -259,7 +273,7 @@ bool ReadPinFile(pkgPolicy &Plcy,string File)
if (_error->PendingError() == true)
return false;
- pkgTagSection Tags;
+ PreferenceSection Tags;
while (TF.Step(Tags) == true)
{
string Name = Tags.FindS("Package");
diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc
index 893cb8ee7..7c5d15a58 100644
--- a/apt-pkg/tagfile.cc
+++ b/apt-pkg/tagfile.cc
@@ -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
diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h
index 6536932dd..321329a23 100644
--- a/apt-pkg/tagfile.h
+++ b/apt-pkg/tagfile.h
@@ -27,7 +27,6 @@
class pkgTagSection
{
const char *Section;
- const char *Stop;
// We have a limit of 256 tags per section.
unsigned int Indexes[256];
@@ -35,6 +34,9 @@ class pkgTagSection
unsigned int TagCount;
+ protected:
+ const char *Stop;
+
public:
inline bool operator ==(const pkgTagSection &rhs) {return Section == rhs.Section;};
@@ -49,6 +51,7 @@ class pkgTagSection
bool Scan(const char *Start,unsigned long MaxLength);
inline unsigned long size() const {return Stop - Section;};
void Trim();
+ virtual void TrimRecord(bool BeforeRecord, const char* &End);
inline unsigned int Count() const {return TagCount;};
inline void Get(const char *&Start,const char *&Stop,unsigned int I) const