* merged from apt--auto-mark
[ntk/apt.git] / apt-pkg / deb / debrecords.cc
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: debrecords.cc,v 1.10 2001/03/13 06:51:46 jgg Exp $
4 /* ######################################################################
5
6 Debian Package Records - Parser for debian package records
7
8 ##################################################################### */
9 /*}}}*/
10 // Include Files /*{{{*/
11 #ifdef __GNUG__
12 #pragma implementation "apt-pkg/debrecords.h"
13 #endif
14 #include <apt-pkg/debrecords.h>
15 #include <apt-pkg/strutl.h>
16 #include <apt-pkg/error.h>
17 #include <langinfo.h>
18 /*}}}*/
19
20 // RecordParser::debRecordParser - Constructor /*{{{*/
21 // ---------------------------------------------------------------------
22 /* */
23 debRecordParser::debRecordParser(string FileName,pkgCache &Cache) :
24 File(FileName,FileFd::ReadOnly),
25 Tags(&File,Cache.Head().MaxVerFileSize + 200)
26 {
27 }
28 /*}}}*/
29 // RecordParser::Jump - Jump to a specific record /*{{{*/
30 // ---------------------------------------------------------------------
31 /* */
32 bool debRecordParser::Jump(pkgCache::VerFileIterator const &Ver)
33 {
34 return Tags.Jump(Section,Ver->Offset);
35 }
36 bool debRecordParser::Jump(pkgCache::DescFileIterator const &Desc)
37 {
38 return Tags.Jump(Section,Desc->Offset);
39 }
40 /*}}}*/
41 // RecordParser::FileName - Return the archive filename on the site /*{{{*/
42 // ---------------------------------------------------------------------
43 /* */
44 string debRecordParser::FileName()
45 {
46 return Section.FindS("Filename");
47 }
48 /*}}}*/
49 // RecordParser::Name - Return the package name /*{{{*/
50 // ---------------------------------------------------------------------
51 /* */
52 string debRecordParser::Name()
53 {
54 return Section.FindS("Package");
55 }
56 /*}}}*/
57 // RecordParser::MD5Hash - Return the archive hash /*{{{*/
58 // ---------------------------------------------------------------------
59 /* */
60 string debRecordParser::MD5Hash()
61 {
62 return Section.FindS("MD5Sum");
63 }
64 /*}}}*/
65 // RecordParser::SHA1Hash - Return the archive hash /*{{{*/
66 // ---------------------------------------------------------------------
67 /* */
68 string debRecordParser::SHA1Hash()
69 {
70 return Section.FindS("SHA1Sum");
71 }
72 /*}}}*/
73 // RecordParser::Maintainer - Return the maintainer email /*{{{*/
74 // ---------------------------------------------------------------------
75 /* */
76 string debRecordParser::Maintainer()
77 {
78 return Section.FindS("Maintainer");
79 }
80 /*}}}*/
81 // RecordParser::ShortDesc - Return a 1 line description /*{{{*/
82 // ---------------------------------------------------------------------
83 /* */
84 string debRecordParser::ShortDesc()
85 {
86 string Res = LongDesc();
87 string::size_type Pos = Res.find('\n');
88 if (Pos == string::npos)
89 return Res;
90 return string(Res,0,Pos);
91 }
92 /*}}}*/
93 // RecordParser::LongDesc - Return a longer description /*{{{*/
94 // ---------------------------------------------------------------------
95 /* */
96 string debRecordParser::LongDesc()
97 {
98 string orig, dest;
99 char *codeset = nl_langinfo(CODESET);
100
101 if (!Section.FindS("Description").empty())
102 orig = Section.FindS("Description").c_str();
103 else
104 orig = Section.FindS(("Description-" + pkgIndexFile::LanguageCode()).c_str()).c_str();
105
106 if (strcmp(codeset,"UTF-8") != 0) {
107 UTF8ToCodeset(codeset, orig, &dest);
108 orig = dest;
109 }
110
111 return orig;
112 }
113 /*}}}*/
114 // RecordParser::SourcePkg - Return the source package name if any /*{{{*/
115 // ---------------------------------------------------------------------
116 /* */
117 string debRecordParser::SourcePkg()
118 {
119 string Res = Section.FindS("Source");
120 string::size_type Pos = Res.find(' ');
121 if (Pos == string::npos)
122 return Res;
123 return string(Res,0,Pos);
124 }
125 /*}}}*/
126 // RecordParser::GetRec - Return the whole record /*{{{*/
127 // ---------------------------------------------------------------------
128 /* */
129 void debRecordParser::GetRec(const char *&Start,const char *&Stop)
130 {
131 Section.GetSection(Start,Stop);
132 }
133 /*}}}*/