X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/ac7f8f7916f16905d8eeb0133bc650d89726d0f4..766761fd836d9e247daea924809965c21cc65dc7:/apt-pkg/deb/debindexfile.cc diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index c43ee7b91..c11efd0ae 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -145,6 +145,17 @@ uint8_t debStatusIndex::GetIndexFlags() const { return pkgCache::Flag::NotSource; } + +pkgCacheListParser * debStatusIndex::CreateListParser(FileFd &Pkg) +{ + if (Pkg.IsOpen() == false) + return NULL; + _error->PushToStack(); + pkgCacheListParser * const Parser = new debStatusListParser(&Pkg); + bool const newError = _error->PendingError(); + _error->MergeWithStack(); + return newError ? NULL : Parser; +} /*}}}*/ // DebPkgFile Index - a single .deb file as an index /*{{{*/ debDebPkgFileIndex::debDebPkgFileIndex(std::string const &DebFile) @@ -170,6 +181,9 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false) return _error->Error("Popen failed"); + content << "Filename: " << debfile << "\n"; + content << "Size: " << Buf.st_size << "\n"; + bool first_line_seen = false; char buffer[1024]; do { unsigned long long actual = 0; @@ -178,13 +192,19 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de if (actual == 0) break; buffer[actual] = '\0'; - content << buffer; + char const * b = buffer; + if (first_line_seen == false) + { + for (; *b != '\0' && (*b == '\n' || *b == '\r'); ++b) + /* skip over leading newlines */; + if (*b == '\0') + continue; + first_line_seen = true; + } + content << b; } while(true); ExecWait(Child, "Popen"); - content << "Filename: " << debfile << "\n"; - content << "Size: " << Buf.st_size << "\n"; - return true; } bool debDebPkgFileIndex::OpenListFile(FileFd &Pkg, std::string const &FileName) @@ -238,7 +258,14 @@ pkgCache::PkgFileIterator debDebPkgFileIndex::FindInCache(pkgCache &Cache) const return File; } - +std::string debDebPkgFileIndex::ArchiveInfo_impl(pkgCache::VerIterator const &Ver) const +{ + std::string Res = IndexFileName() + " "; + Res.append(Ver.ParentPkg().Name()).append(" "); + Res.append(Ver.Arch()).append(" "); + Res.append(Ver.VerStr()); + return Res; +} /*}}}*/ // DscFile Index - a single .dsc file as an index /*{{{*/ debDscFileIndex::debDscFileIndex(std::string const &DscFile) @@ -250,6 +277,24 @@ pkgSrcRecords::Parser *debDscFileIndex::CreateSrcParser() const if (Exists() == false) return NULL; return new debDscRecordParser(File, this); +} +std::string debDscFileIndex::GetComponent() const +{ + return "local-dsc"; +} +std::string debDscFileIndex::GetArchitecture() const +{ + return "source"; +} +uint8_t debDscFileIndex::GetIndexFlags() const +{ + return pkgCache::Flag::LocalSource; +} + /*}}}*/ +// ControlFile Index - a directory with a debian/control file /*{{{*/ +std::string debDebianSourceDirIndex::GetComponent() const +{ + return "local-control"; } /*}}}*/