summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorArch Librarian <arch@canonical.com>2004-09-20 16:53:22 +0000
committerArch Librarian <arch@canonical.com>2004-09-20 16:53:22 +0000
commit11e7af846822e893604052db7822de016fb97417 (patch)
treeb2b2e51153079aa3e88de9b6e29a61b996f78dac /apt-pkg/deb
parent6c9079759285e073024f7e3193c990ede2a17cef (diff)
Source record parsing
Author: jgg Date: 1999-04-04 01:17:29 GMT Source record parsing
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/debsrcrecords.cc63
-rw-r--r--apt-pkg/deb/debsrcrecords.h46
2 files changed, 109 insertions, 0 deletions
diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc
new file mode 100644
index 000000000..bfbb9e202
--- /dev/null
+++ b/apt-pkg/deb/debsrcrecords.cc
@@ -0,0 +1,63 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+// $Id: debsrcrecords.cc,v 1.1 1999/04/04 01:17:29 jgg Exp $
+/* ######################################################################
+
+ Debian Source Package Records - Parser implementation for Debian style
+ source indexes
+
+ ##################################################################### */
+ /*}}}*/
+// Include Files /*{{{*/
+#ifdef __GNUG__
+#pragma implementation "apt-pkg/debsrcrecords.h"
+#endif
+
+#include <apt-pkg/debsrcrecords.h>
+#include <apt-pkg/error.h>
+ /*}}}*/
+
+// SrcRecordParser::Binaries - Return the binaries field /*{{{*/
+// ---------------------------------------------------------------------
+/* This member parses the binaries field into a pair of class arrays and
+ returns a list of strings representing all of the components of the
+ binaries field. The returned array need not be freed and will be
+ reused by the next Binaries function call. */
+const char **debSrcRecordParser::Binaries()
+{
+ string Bins = Sect.FindS("Binary");
+ char *Buf = Buffer;
+ unsigned int Bin = 0;
+ if (Bins.empty() == true)
+ return 0;
+
+ // Strip any leading spaces
+ string::const_iterator Start = Bins.begin();
+ for (; Start != Bins.end() && isspace(*Start) != 0; Start++);
+
+ string::const_iterator Pos = Start;
+ while (Pos != Bins.end())
+ {
+ // Skip to the next ','
+ for (; Pos != Bins.end() && *Pos != ','; Pos++);
+
+ // Back remove spaces
+ string::const_iterator End = Pos;
+ for (; End > Start && (End[-1] == ',' || isspace(End[-1]) != 0); End--);
+
+ // Stash the string
+ memcpy(Buf,Start,End-Start);
+ StaticBinList[Bin] = Buf;
+ Bin++;
+ Buf += End-Start;
+ *Buf++ = 0;
+
+ // Advance pos
+ for (; Pos != Bins.end() && (*Pos == ',' || isspace(*Pos) != 0); Pos++);
+ Start = Pos;
+ }
+
+ StaticBinList[Bin] = 0;
+ return StaticBinList;
+}
+ /*}}}*/
diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h
new file mode 100644
index 000000000..5d3b20488
--- /dev/null
+++ b/apt-pkg/deb/debsrcrecords.h
@@ -0,0 +1,46 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+// $Id: debsrcrecords.h,v 1.1 1999/04/04 01:17:29 jgg Exp $
+/* ######################################################################
+
+ Debian Source Package Records - Parser implementation for Debian style
+ source indexes
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_DEBSRCRECORDS_H
+#define PKGLIB_DEBSRCRECORDS_H
+
+#ifdef __GNUG__
+#pragma interface "apt-pkg/debsrcrecords.h"
+#endif
+
+#include <apt-pkg/srcrecords.h>
+#include <apt-pkg/tagfile.h>
+
+class debSrcRecordParser : public pkgSrcRecords::Parser
+{
+ pkgTagFile Tags;
+ pkgTagSection Sect;
+ char Buffer[10000];
+ const char *StaticBinList[400];
+ unsigned long iOffset;
+
+ public:
+
+ virtual bool Restart() {return Tags.Jump(Sect,0);};
+ virtual bool Step() {iOffset = Tags.Offset(); return Tags.Step(Sect);};
+ virtual bool Jump(unsigned long Off) {iOffset = Off; return Tags.Jump(Sect,Off);};
+
+ virtual string Package() {return Sect.FindS("Package");};
+ virtual string Version() {return Sect.FindS("Version");};
+ virtual string Maintainer() {return Sect.FindS("Maintainer");};
+ virtual string Section() {return Sect.FindS("Section");};
+ virtual const char **Binaries();
+ virtual unsigned long Offset() {return iOffset;};
+
+ debSrcRecordParser(FileFd *File) : Parser(File),
+ Tags(*File,sizeof(Buffer)) {};
+};
+
+#endif