diff options
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r-- | apt-pkg/deb/debsrcrecords.cc | 63 | ||||
-rw-r--r-- | apt-pkg/deb/debsrcrecords.h | 46 |
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 |