summaryrefslogtreecommitdiff
path: root/apt-pkg/deb/debsrcrecords.cc
blob: bfbb9e202b60518655d55d44ae234e7907bd729a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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;
}
									/*}}}*/