X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8d99802677287a86759232898199db40add923fd..7aee90b638490036b8f4244dcb3d14ba0bc6dd8a:/apt-pkg/contrib/configuration.cc diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 56eb374c6..4b2c0fbb5 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: configuration.cc,v 1.26 2003/07/25 20:45:13 mdz Exp $ +// $Id: configuration.cc,v 1.28 2004/04/30 04:00:15 mdz Exp $ /* ###################################################################### Configuration Class @@ -325,6 +325,47 @@ void Configuration::Set(const char *Name,int Value) char S[300]; snprintf(S,sizeof(S),"%i",Value); Itm->Value = S; +} + /*}}}*/ +// Configuration::Clear - Clear an single value from a list /*{{{*/ +// --------------------------------------------------------------------- +/* */ +void Configuration::Clear(string Name, int Value) +{ + char S[300]; + snprintf(S,sizeof(S),"%i",Value); + Clear(Name, S); +} + /*}}}*/ +// Configuration::Clear - Clear an single value from a list /*{{{*/ +// --------------------------------------------------------------------- +/* */ +void Configuration::Clear(string Name, string Value) +{ + Item *Top = Lookup(Name.c_str(),false); + if (Top == 0 || Top->Child == 0) + return; + + Item *Tmp, *Prev, *I; + Prev = I = Top->Child; + + while(I != NULL) + { + if(I->Value == Value) + { + Tmp = I; + // was first element, point parent to new first element + if(Top->Child == Tmp) + Top->Child = I->Next; + I = I->Next; + Prev->Next = I; + delete Tmp; + } else { + Prev = I; + I = I->Next; + } + } + } /*}}}*/ // Configuration::Clear - Clear an entire tree /*{{{*/ @@ -333,9 +374,10 @@ void Configuration::Set(const char *Name,int Value) void Configuration::Clear(string Name) { Item *Top = Lookup(Name.c_str(),false); - if (Top == 0) + if (Top == 0) { + cout << "config item: " << Name << " not found" << endl; return; - + } Top->Value = string(); Item *Stop = Top; Top = Top->Child; @@ -392,7 +434,7 @@ bool Configuration::ExistsAny(const char *Name) const } else { - _error->Warning("Unrecognized type abbreviation: '%c'", key.end()[-3]); + _error->Warning(_("Unrecognized type abbreviation: '%c'"), key.end()[-3]); } return Exists(Name); @@ -452,7 +494,7 @@ bool ReadConfigFile(Configuration &Conf,string FName,bool AsSectional, if (!F != 0) return _error->Errno("ifstream::ifstream",_("Opening configuration file %s"),FName.c_str()); - char Buffer[300]; + char Buffer[1024]; string LineBuffer; string Stack[100]; unsigned int StackPos = 0; @@ -466,6 +508,10 @@ bool ReadConfigFile(Configuration &Conf,string FName,bool AsSectional, { F.getline(Buffer,sizeof(Buffer)); CurLine++; + // This should be made to work instead, but this is better than looping + if (F.fail() && !F.eof()) + return _error->Error(_("Line %d too long (max %d)"), CurLine, sizeof(Buffer)); + _strtabexpand(Buffer,sizeof(Buffer)); _strstrip(Buffer); @@ -579,7 +625,7 @@ bool ReadConfigFile(Configuration &Conf,string FName,bool AsSectional, string Tag; const char *Pos = LineBuffer.c_str(); if (ParseQuoteWord(Pos,Tag) == false) - return _error->Error(_("Syntax error %s:%u: Malformed Tag"),FName.c_str(),CurLine); + return _error->Error(_("Syntax error %s:%u: Malformed tag"),FName.c_str(),CurLine); // Parse off the word string Word;