]>
git.saurik.com Git - apt.git/blob - apt-pkg/deb/debrecords.cc
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: debrecords.cc,v 1.10 2001/03/13 06:51:46 jgg Exp $
4 /* ######################################################################
6 Debian Package Records - Parser for debian package records
8 ##################################################################### */
10 // Include Files /*{{{*/
11 #include <apt-pkg/debrecords.h>
12 #include <apt-pkg/strutl.h>
13 #include <apt-pkg/error.h>
14 #include <apt-pkg/aptconfiguration.h>
18 // RecordParser::debRecordParser - Constructor /*{{{*/
19 // ---------------------------------------------------------------------
21 debRecordParser::debRecordParser(string FileName
,pkgCache
&Cache
) :
22 File(FileName
,FileFd::ReadOnlyGzip
),
23 Tags(&File
, std::max(Cache
.Head().MaxVerFileSize
,
24 Cache
.Head().MaxDescFileSize
) + 200)
28 // RecordParser::Jump - Jump to a specific record /*{{{*/
29 // ---------------------------------------------------------------------
31 bool debRecordParser::Jump(pkgCache::VerFileIterator
const &Ver
)
33 return Tags
.Jump(Section
,Ver
->Offset
);
35 bool debRecordParser::Jump(pkgCache::DescFileIterator
const &Desc
)
37 return Tags
.Jump(Section
,Desc
->Offset
);
40 // RecordParser::FileName - Return the archive filename on the site /*{{{*/
41 // ---------------------------------------------------------------------
43 string
debRecordParser::FileName()
45 return Section
.FindS("Filename");
48 // RecordParser::Name - Return the package name /*{{{*/
49 // ---------------------------------------------------------------------
51 string
debRecordParser::Name()
53 return Section
.FindS("Package");
56 // RecordParser::Homepage - Return the package homepage /*{{{*/
57 // ---------------------------------------------------------------------
59 string
debRecordParser::Homepage()
61 return Section
.FindS("Homepage");
64 // RecordParser::MD5Hash - Return the archive hash /*{{{*/
65 // ---------------------------------------------------------------------
67 string
debRecordParser::MD5Hash()
69 return Section
.FindS("MD5Sum");
72 // RecordParser::SHA1Hash - Return the archive hash /*{{{*/
73 // ---------------------------------------------------------------------
75 string
debRecordParser::SHA1Hash()
77 return Section
.FindS("SHA1");
80 // RecordParser::SHA256Hash - Return the archive hash /*{{{*/
81 // ---------------------------------------------------------------------
83 string
debRecordParser::SHA256Hash()
85 return Section
.FindS("SHA256");
88 // RecordParser::SHA512Hash - Return the archive hash /*{{{*/
89 // ---------------------------------------------------------------------
91 string
debRecordParser::SHA512Hash()
93 return Section
.FindS("SHA512");
96 // RecordParser::Maintainer - Return the maintainer email /*{{{*/
97 // ---------------------------------------------------------------------
99 string
debRecordParser::Maintainer()
101 return Section
.FindS("Maintainer");
104 // RecordParser::ShortDesc - Return a 1 line description /*{{{*/
105 // ---------------------------------------------------------------------
107 string
debRecordParser::ShortDesc()
109 string Res
= LongDesc();
110 string::size_type Pos
= Res
.find('\n');
111 if (Pos
== string::npos
)
113 return string(Res
,0,Pos
);
116 // RecordParser::LongDesc - Return a longer description /*{{{*/
117 // ---------------------------------------------------------------------
119 string
debRecordParser::LongDesc()
123 if (!Section
.FindS("Description").empty())
124 orig
= Section
.FindS("Description").c_str();
127 vector
<string
> const lang
= APT::Configuration::getLanguages();
128 for (vector
<string
>::const_iterator l
= lang
.begin();
129 orig
.empty() && l
!= lang
.end(); l
++)
130 orig
= Section
.FindS(string("Description-").append(*l
).c_str());
133 char const * const codeset
= nl_langinfo(CODESET
);
134 if (strcmp(codeset
,"UTF-8") != 0) {
135 UTF8ToCodeset(codeset
, orig
, &dest
);
143 static const char *SourceVerSeparators
= " ()";
145 // RecordParser::SourcePkg - Return the source package name if any /*{{{*/
146 // ---------------------------------------------------------------------
148 string
debRecordParser::SourcePkg()
150 string Res
= Section
.FindS("Source");
151 string::size_type Pos
= Res
.find_first_of(SourceVerSeparators
);
152 if (Pos
== string::npos
)
154 return string(Res
,0,Pos
);
157 // RecordParser::SourceVer - Return the source version number if present /*{{{*/
158 // ---------------------------------------------------------------------
160 string
debRecordParser::SourceVer()
162 string Pkg
= Section
.FindS("Source");
163 string::size_type Pos
= Pkg
.find_first_of(SourceVerSeparators
);
164 if (Pos
== string::npos
)
167 string::size_type VerStart
= Pkg
.find_first_not_of(SourceVerSeparators
, Pos
);
168 if(VerStart
== string::npos
)
171 string::size_type VerEnd
= Pkg
.find_first_of(SourceVerSeparators
, VerStart
);
172 if(VerEnd
== string::npos
)
173 // Corresponds to the case of, e.g., "foo (1.2" without a closing
174 // paren. Be liberal and guess what it means.
175 return string(Pkg
, VerStart
);
177 return string(Pkg
, VerStart
, VerEnd
- VerStart
);
180 // RecordParser::GetRec - Return the whole record /*{{{*/
181 // ---------------------------------------------------------------------
183 void debRecordParser::GetRec(const char *&Start
,const char *&Stop
)
185 Section
.GetSection(Start
,Stop
);