Przeglądaj źródła

Dsync merge
Author: jgg
Date: 1999-01-18 06:20:07 GMT
Dsync merge

Arch Librarian 22 lat temu
rodzic
commit
7f25bdff3a

+ 8 - 3
apt-pkg/contrib/cmndline.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: cmndline.cc,v 1.7 1998/12/14 02:23:47 jgg Exp $
+// $Id: cmndline.cc,v 1.8 1999/01/18 06:20:07 jgg Exp $
 /* ######################################################################
 
    Command Line Class - Sophisticated command line parser
@@ -96,7 +96,6 @@ bool CommandLine::Parse(int argc,const char **argv)
 	 if (Opt == OptEnd)
 	    return _error->Error("Command line option %s is not understood",argv[I]);
 	 Opt++;
-	 cout << Opt << endl;
 	 
 	 for (A = ArgList; A->end() == false &&
 	      stringcasecmp(Opt,OptEnd,A->LongOpt) != 0; A++);
@@ -205,7 +204,13 @@ bool CommandLine::HandleOpt(int &I,int argc,const char *argv[],
 	 return true;
       }
       
-      Conf->Set(A->ConfName,Argument);
+      const char *I = A->ConfName;
+      for (; *I != 0 && *I != ' '; I++);
+      if (*I == ' ')
+	 Conf->Set(string(A->ConfName,0,I-A->ConfName),string(I+1) + Argument);
+      else
+	 Conf->Set(A->ConfName,string(I) + Argument);
+	 
       return true;
    }
    

+ 1 - 2
apt-pkg/contrib/cmndline.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: cmndline.h,v 1.5 1998/12/14 02:23:47 jgg Exp $
+// $Id: cmndline.h,v 1.6 1999/01/18 06:20:07 jgg Exp $
 /* ######################################################################
 
    Command Line Class - Sophisticated command line parser
@@ -38,7 +38,6 @@
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_CMNDLINE_H
 #define PKGLIB_CMNDLINE_H
 

+ 34 - 27
apt-pkg/contrib/configuration.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: configuration.cc,v 1.10 1998/11/05 07:21:43 jgg Exp $
+// $Id: configuration.cc,v 1.11 1999/01/18 06:20:07 jgg Exp $
 /* ######################################################################
 
    Configuration Class
@@ -43,10 +43,17 @@ Configuration::Item *Configuration::Lookup(Item *Head,const char *S,
    int Res = 1;
    Item *I = Head->Child;
    Item **Last = &Head->Child;
-   for (; I != 0; Last = &I->Next, I = I->Next)
-      if ((Res = stringcasecmp(I->Tag.begin(),I->Tag.end(),S,S + Len)) == 0)
-	 break;
    
+   // Empty strings match nothing. They are used for lists.
+   if (Len != 0)
+   {
+      for (; I != 0; Last = &I->Next, I = I->Next)
+	 if ((Res = stringcasecmp(I->Tag.begin(),I->Tag.end(),S,S + Len)) == 0)
+	    break;
+   }
+   else
+      for (; I != 0; Last = &I->Next, I = I->Next);
+      
    if (Res == 0)
       return I;
    if (Create == false)
@@ -73,7 +80,7 @@ Configuration::Item *Configuration::Lookup(const char *Name,bool Create)
    const char *End = Start + strlen(Name);
    const char *TagEnd = Name;
    Item *Itm = Root;
-   for (; End - TagEnd > 2; TagEnd++)
+   for (; End - TagEnd >= 2; TagEnd++)
    {
       if (TagEnd[0] == ':' && TagEnd[1] == ':')
       {
@@ -84,6 +91,13 @@ Configuration::Item *Configuration::Lookup(const char *Name,bool Create)
       }
    }   
 
+   // This must be a trailing ::, we create unique items in a list
+   if (End - Start == 0)
+   {
+      if (Create == false)
+	 return 0;
+   }
+   
    Itm = Lookup(Itm,Start,End - Start,Create);
    return Itm;
 }
@@ -377,17 +391,11 @@ bool ReadConfigFile(Configuration &Conf,string FName)
 	       continue;
 
 	    // Parse off the tag
-	    string::size_type Pos = LineBuffer.find(' ');
-	    if (Pos == string::npos)
-	    {
-	       if (TermChar == '{')
-		  Pos = LineBuffer.length();
-	       else
-		  return _error->Error("Syntax error %s:%u: Tag with no value",FName.c_str(),CurLine);
-	    }
+	    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);	    
 	    
-	    string Tag = string(LineBuffer,0,Pos);
-
 	    // Go down a level
 	    if (TermChar == '{')
 	    {
@@ -398,17 +406,16 @@ bool ReadConfigFile(Configuration &Conf,string FName)
 	       Tag = string();
 	    }
 
-	    // We dont have a value to set
-	    if (Pos == LineBuffer.length())
-	    {
-	       LineBuffer = string();
-	       continue;
-	    }
-	    
 	    // Parse off the word
 	    string Word;
-	    if (ParseCWord(LineBuffer.c_str()+Pos,Word) == false)
-	       return _error->Error("Syntax error %s:%u: Malformed value",FName.c_str(),CurLine);
+	    if (ParseCWord(Pos,Word) == false)
+	    {
+	       if (TermChar != '{')
+	       {
+		  Word = Tag;
+		  Tag = "";
+	       }	       
+	    }
 	    
 	    // Generate the item name
 	    string Item;
@@ -416,10 +423,10 @@ bool ReadConfigFile(Configuration &Conf,string FName)
 	       Item = Tag;
 	    else
 	    {
-	       if (Tag.empty() == true)
-		  Item = ParentTag;
-	       else
+	       if (TermChar != '{' || Tag.empty() == false)
 		  Item = ParentTag + "::" + Tag;
+	       else
+		  Item = ParentTag;
 	    }
 	    
 	    // Set the item in the configuration class

+ 7 - 3
apt-pkg/contrib/configuration.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: configuration.h,v 1.8 1998/11/04 07:11:12 jgg Exp $
+// $Id: configuration.h,v 1.9 1999/01/18 06:20:07 jgg Exp $
 /* ######################################################################
 
    Configuration Class
@@ -14,13 +14,17 @@
    And has associated with it a text string. The Configuration class only
    provides storage and lookup for this tree, other classes provide
    configuration file formats (and parsers/emitters if needed).
-   
+
    Most things can get by quite happily with,
      cout << _config->Find("Foo::Bar") << endl;
+
+   A special extension, support for ordered lists is provided by using the
+   special syntax, "block::list::" the trailing :: designates the 
+   item as a list. To access the list you must use the tree function on
+   "block::list".
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_CONFIGURATION_H
 #define PKGLIB_CONFIGURATION_H
 

+ 8 - 7
apt-pkg/contrib/error.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: error.cc,v 1.5 1998/09/18 02:42:40 jgg Exp $
+// $Id: error.cc,v 1.6 1999/01/18 06:20:07 jgg Exp $
 /* ######################################################################
    
    Global Erorr Class - Global error mechanism
@@ -80,8 +80,9 @@ bool GlobalError::Errno(const char *Function,const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
-   sprintf(S + strlen(S)," - %s (%i %s)",Function,errno,strerror(errno));
+   vsnprintf(S,sizeof(S),Description,args);
+   snprintf(S + strlen(S),sizeof(S) - strlen(S),
+	    " - %s (%i %s)",Function,errno,strerror(errno));
 
    // Put it on the list
    Item *Itm = new Item;
@@ -108,8 +109,8 @@ bool GlobalError::WarningE(const char *Function,const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
-   sprintf(S + strlen(S)," - %s (%i %s)",Function,errno,strerror(errno));
+   vsnprintf(S,sizeof(S),Description,args);
+   snprintf(S + strlen(S),sizeof(S) - strlen(S)," - %s (%i %s)",Function,errno,strerror(errno));
 
    // Put it on the list
    Item *Itm = new Item;
@@ -130,7 +131,7 @@ bool GlobalError::Error(const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
+   vsnprintf(S,sizeof(S),Description,args);
 
    // Put it on the list
    Item *Itm = new Item;
@@ -153,7 +154,7 @@ bool GlobalError::Warning(const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
+   vsnprintf(S,sizeof(S),Description,args);
 
    // Put it on the list
    Item *Itm = new Item;

+ 1 - 2
apt-pkg/contrib/error.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: error.h,v 1.5 1998/09/18 02:42:41 jgg Exp $
+// $Id: error.h,v 1.6 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    Global Erorr Class - Global error mechanism
@@ -37,7 +37,6 @@
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_ERROR_H
 #define PKGLIB_ERROR_H
 

+ 16 - 2
apt-pkg/contrib/fileutl.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: fileutl.cc,v 1.16 1998/11/27 04:20:52 jgg Exp $
+// $Id: fileutl.cc,v 1.17 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    File Utilities
@@ -102,8 +102,11 @@ string SafeGetCWD()
    // Stash the current dir.
    char S[300];
    S[0] = 0;
-   if (getcwd(S,sizeof(S)) == 0)
+   if (getcwd(S,sizeof(S)-2) == 0)
       return "/";
+   unsigned int Len = strlen(S);
+   S[Len] = '/';
+   S[Len+1] = 0;
    return S;
 }
 									/*}}}*/
@@ -263,6 +266,17 @@ bool FileFd::Seek(unsigned long To)
    return true;
 }
 									/*}}}*/
+// FileFd::Tell - Current seek position					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned long FileFd::Tell()
+{
+   off_t Res = lseek(iFd,0,SEEK_CUR);
+   if (Res == (off_t)-1)
+      _error->Errno("lseek","Failed to determine the current file position");
+   return Res;
+}
+									/*}}}*/
 // FileFd::Size - Return the size of the file				/*{{{*/
 // ---------------------------------------------------------------------
 /* */

+ 2 - 2
apt-pkg/contrib/fileutl.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: fileutl.h,v 1.11 1998/12/08 05:24:43 jgg Exp $
+// $Id: fileutl.h,v 1.12 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    File Utilities
@@ -18,7 +18,6 @@
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_FILEUTL_H
 #define PKGLIB_FILEUTL_H
 
@@ -43,6 +42,7 @@ class FileFd
    bool Read(void *To,unsigned long Size);
    bool Write(const void *From,unsigned long Size);
    bool Seek(unsigned long To);
+   unsigned long Tell();
    unsigned long Size();
    bool Close();
 

+ 7 - 3
apt-pkg/contrib/md5.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: md5.h,v 1.2 1998/11/25 23:54:45 jgg Exp $
+// $Id: md5.h,v 1.3 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    MD5SumValue - Storage for a MD5Sum
@@ -39,9 +39,13 @@ class MD5SumValue
    // Accessors
    bool operator ==(const MD5SumValue &rhs) const; 
    string Value() const;
-   inline operator string() const {return Value();}; 
+   inline void Value(unsigned char S[16]) 
+         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
+   inline operator string() const {return Value();};
    bool Set(string Str);
-   
+   inline void Set(unsigned char S[16]) 
+         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
+
    MD5SumValue(string Str);
    MD5SumValue();
 };

+ 1 - 2
apt-pkg/contrib/mmap.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: mmap.h,v 1.7 1998/11/12 03:14:40 jgg Exp $
+// $Id: mmap.h,v 1.8 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    MMap Class - Provides 'real' mmap or a faked mmap using read().
@@ -22,7 +22,6 @@
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_MMAP_H
 #define PKGLIB_MMAP_H
 

+ 1 - 2
apt-pkg/contrib/progress.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: progress.h,v 1.4 1998/10/02 04:39:54 jgg Exp $
+// $Id: progress.h,v 1.5 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    OpProgress - Operation Progress
@@ -18,7 +18,6 @@
    
    ##################################################################### */
 									/*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_PROGRESS_H
 #define PKGLIB_PROGRESS_H
 

+ 5 - 3
apt-pkg/contrib/strutl.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: strutl.cc,v 1.16 1998/12/31 05:45:26 jgg Exp $
+// $Id: strutl.cc,v 1.17 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
 
    String Util - Some usefull string functions.
@@ -189,7 +189,7 @@ string QuoteString(string Str,const char *Bad)
 	  *I <= 0x20 || *I >= 0x7F)
       {
 	 char Buf[10];
-	 sprintf(Buf,"%%%02x",(unsigned int)((unsigned char)*I));
+	 sprintf(Buf,"%%%02x",(int)*I);
 	 Res += Buf;
       }
       else
@@ -214,7 +214,7 @@ string SizeToStr(double Size)
    
    /* bytes, KiloBytes, MegaBytes, GigaBytes, TeraBytes, PetaBytes, 
       ExaBytes, ZettaBytes, YottaBytes */
-   char Ext[] = {'b','k','M','G','T','P','E','Z','Y'};
+   char Ext[] = {'\0','k','M','G','T','P','E','Z','Y'};
    int I = 0;
    while (I <= 8)
    {
@@ -456,6 +456,7 @@ int StringToBool(string Text,int Default = -1)
    if (strcasecmp(Text.c_str(),"no") == 0 ||
        strcasecmp(Text.c_str(),"false") == 0 ||
        strcasecmp(Text.c_str(),"without") == 0 ||
+       strcasecmp(Text.c_str(),"off") == 0 ||
        strcasecmp(Text.c_str(),"disable") == 0)
       return 0;
    
@@ -463,6 +464,7 @@ int StringToBool(string Text,int Default = -1)
    if (strcasecmp(Text.c_str(),"yes") == 0 ||
        strcasecmp(Text.c_str(),"true") == 0 ||
        strcasecmp(Text.c_str(),"with") == 0 ||
+       strcasecmp(Text.c_str(),"on") == 0 ||
        strcasecmp(Text.c_str(),"enable") == 0)
       return 1;
    

+ 1 - 2
apt-pkg/contrib/system.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: system.h,v 1.1 1998/07/02 02:58:13 jgg Exp $
+// $Id: system.h,v 1.2 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
    
    System Header - Usefull private definitions
@@ -11,7 +11,6 @@
    ##################################################################### */
 									/*}}}*/
 // Private header
-// Header section: /
 #ifndef SYSTEM_H
 #define SYSTEM_H
 

+ 4 - 2
methods/file.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: file.cc,v 1.6 1998/11/14 01:39:49 jgg Exp $
+// $Id: file.cc,v 1.7 1999/01/18 06:20:08 jgg Exp $
 /* ######################################################################
 
    File URI method for APT
@@ -37,7 +37,9 @@ bool FileMethod::Fetch(FetchItem *Itm)
    URI Get = Itm->Uri;
    string File = Get.Path;
    FetchResult Res;
-   
+   if (Get.Host.empty() == false)
+      return _error->Error("Invalid URI, local URIS must not start with //");
+
    // See if the file exists
    struct stat Buf;
    if (stat(File.c_str(),&Buf) == 0)