]> git.saurik.com Git - apt.git/commitdiff
Source record file list parsing
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:53:23 +0000 (16:53 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:53:23 +0000 (16:53 +0000)
Author: jgg
Date: 1999-04-04 08:07:39 GMT
Source record file list parsing

apt-pkg/contrib/strutl.cc
apt-pkg/deb/debsrcrecords.cc
apt-pkg/deb/debsrcrecords.h
apt-pkg/srcrecords.h

index a6eaeaa79aa9f3980ccfb6db78e9d5f5b6dc1e05..2411623c573bc9fe87e7702528f09c69e8c4c35d 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: strutl.cc,v 1.23 1999/03/16 07:27:17 jgg Exp $
+// $Id: strutl.cc,v 1.24 1999/04/04 08:07:39 jgg Exp $
 /* ######################################################################
 
    String Util - Some usefull string functions.
 /* ######################################################################
 
    String Util - Some usefull string functions.
@@ -97,7 +97,7 @@ bool ParseQuoteWord(const char *&String,string &Res)
       return false;
    
    // Jump to the next word
       return false;
    
    // Jump to the next word
-   for (;*C != 0 && *C != ' '; C++)
+   for (;*C != 0 && isspace(*C) == 0; C++)
    {
       if (*C == '"')
       {
    {
       if (*C == '"')
       {
@@ -133,7 +133,7 @@ bool ParseQuoteWord(const char *&String,string &Res)
    Res = Buffer;
    
    // Skip ending white space
    Res = Buffer;
    
    // Skip ending white space
-   for (;*C != 0 && *C == ' '; C++);
+   for (;*C != 0 && isspace(*C) != 0; C++);
    String = C;
    return true;
 }
    String = C;
    return true;
 }
index bfbb9e202b60518655d55d44ae234e7907bd729a..fa8407c510a0ad76966300afca07d25ead17d3e9 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: debsrcrecords.cc,v 1.1 1999/04/04 01:17:29 jgg Exp $
+// $Id: debsrcrecords.cc,v 1.2 1999/04/04 08:07:39 jgg Exp $
 /* ######################################################################
    
    Debian Source Package Records - Parser implementation for Debian style
 /* ######################################################################
    
    Debian Source Package Records - Parser implementation for Debian style
@@ -15,6 +15,7 @@
 
 #include <apt-pkg/debsrcrecords.h>
 #include <apt-pkg/error.h>
 
 #include <apt-pkg/debsrcrecords.h>
 #include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
                                                                        /*}}}*/
 
 // SrcRecordParser::Binaries - Return the binaries field               /*{{{*/
                                                                        /*}}}*/
 
 // SrcRecordParser::Binaries - Return the binaries field               /*{{{*/
@@ -61,3 +62,42 @@ const char **debSrcRecordParser::Binaries()
    return StaticBinList;
 }
                                                                        /*}}}*/
    return StaticBinList;
 }
                                                                        /*}}}*/
+// SrcRecordParser::Files - Return a list of files for this source     /*{{{*/
+// ---------------------------------------------------------------------
+/* This parses the list of files and returns it, each file is required to have
+   a complete source package */
+bool debSrcRecordParser::Files(vector<pkgSrcRecords::File> &List)
+{
+   List.erase(List.begin(),List.end());
+   
+   string Files = Sect.FindS("Files");
+   if (Files.empty() == true)
+      return false;
+
+   // Stash the / terminated directory prefix
+   string Base = Sect.FindS("Directory:");
+   if (Base.empty() == false && Base[Base.length()-1] != '/')
+      Base += '/';
+       
+   // Iterate over the entire list grabbing each triplet
+   const char *C = Files.c_str();
+   while (*C != 0)
+   {   
+      pkgSrcRecords::File F;
+      string Size;
+      
+      // Parse each of the elements
+      if (ParseQuoteWord(C,F.MD5Hash) == false ||
+         ParseQuoteWord(C,Size) == false ||
+         ParseQuoteWord(C,F.Path) == false)
+        return _error->Error("Error parsing file record");
+      
+      // Parse the size and append the directory
+      F.Size = atoi(Size.c_str());
+      F.Path = Base + F.Path;
+      List.push_back(F);
+   }
+   
+   return true;
+}
+                                                                       /*}}}*/
index 5d3b2048800c37b70197b199e2858097ef8f073d..76a0e2c33ff0fba5724f08a13c8e8681397e90b0 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: debsrcrecords.h,v 1.1 1999/04/04 01:17:29 jgg Exp $
+// $Id: debsrcrecords.h,v 1.2 1999/04/04 08:07:39 jgg Exp $
 /* ######################################################################
    
    Debian Source Package Records - Parser implementation for Debian style
 /* ######################################################################
    
    Debian Source Package Records - Parser implementation for Debian style
@@ -38,6 +38,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
    virtual string Section() {return Sect.FindS("Section");};
    virtual const char **Binaries();
    virtual unsigned long Offset() {return iOffset;};
    virtual string Section() {return Sect.FindS("Section");};
    virtual const char **Binaries();
    virtual unsigned long Offset() {return iOffset;};
+   virtual bool Files(vector<pkgSrcRecords::File> &F);
    
    debSrcRecordParser(FileFd *File) : Parser(File), 
                    Tags(*File,sizeof(Buffer)) {};
    
    debSrcRecordParser(FileFd *File) : Parser(File), 
                    Tags(*File,sizeof(Buffer)) {};
index bd39b93bb1b2c018c6d539c1af0f5533319569ac..253a3283e48b3e6e6f08056bff53cb7471ff8cf0 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: srcrecords.h,v 1.1 1999/04/04 01:17:29 jgg Exp $
+// $Id: srcrecords.h,v 1.2 1999/04/04 08:07:39 jgg Exp $
 /* ######################################################################
    
    Source Package Records - Allows access to source package records
 /* ######################################################################
    
    Source Package Records - Allows access to source package records
 class pkgSrcRecords
 {
    public:
 class pkgSrcRecords
 {
    public:
+
+   // Describes a single file
+   struct File
+   {
+      string MD5Hash;
+      unsigned long Size;
+      string Path;
+   };
    
    
+   // Abstract parser for each source record
    class Parser
    {
       FileFd *File;
    class Parser
    {
       FileFd *File;
@@ -40,6 +49,7 @@ class pkgSrcRecords
       virtual string Maintainer() = 0;
       virtual string Section() = 0;
       virtual const char **Binaries() = 0;
       virtual string Maintainer() = 0;
       virtual string Section() = 0;
       virtual const char **Binaries() = 0;
+      virtual bool Files(vector<File> &F) = 0;
       
       Parser(FileFd *File) : File(File) {};
       virtual ~Parser() {delete File;};
       
       Parser(FileFd *File) : File(File) {};
       virtual ~Parser() {delete File;};