X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8f3ba4e8708cb72be19dacc2af4f601ee5fea292..14e325c7e4b33e8fc6d33b99d1ffd3b934d26ed0:/ftparchive/contents.cc diff --git a/ftparchive/contents.cc b/ftparchive/contents.cc index bbc5a1e2b..0ce15b3d6 100644 --- a/ftparchive/contents.cc +++ b/ftparchive/contents.cc @@ -36,15 +36,17 @@ #include <config.h> #include <apt-pkg/debfile.h> -#include <apt-pkg/extracttar.h> +#include <apt-pkg/dirstream.h> #include <apt-pkg/error.h> +#include <apt-pkg/fileutl.h> + #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <malloc.h> -#include <apti18n.h> #include "contents.h" + +#include <apti18n.h> /*}}}*/ // GenContents::~GenContents - Free allocated memory /*{{{*/ @@ -98,7 +100,7 @@ void *GenContents::Node::operator new(size_t Amount,GenContents *Owner) if (Owner->NodeLeft == 0) { Owner->NodeLeft = 10000; - Owner->NodePool = (Node *)malloc(Amount*Owner->NodeLeft); + Owner->NodePool = static_cast<Node *>(malloc(Amount*Owner->NodeLeft)); BigBlock *Block = new BigBlock; Block->Block = Owner->NodePool; Block->Next = Owner->BlockList; @@ -231,25 +233,25 @@ void GenContents::Add(const char *Dir,const char *Package) // The final component if it does not have a trailing / if (I - Start >= 1) - Root = Grab(Root,Start,Package); + Grab(Root,Start,Package); } /*}}}*/ // GenContents::WriteSpace - Write a given number of white space chars /*{{{*/ // --------------------------------------------------------------------- /* We mod 8 it and write tabs where possible. */ -void GenContents::WriteSpace(FILE *Out,unsigned int Current,unsigned int Target) +void GenContents::WriteSpace(std::string &out, size_t Current, size_t Target) { if (Target <= Current) Target = Current + 1; - + /* Now we write tabs so long as the next tab stop would not pass the target */ for (; (Current/8 + 1)*8 < Target; Current = (Current/8 + 1)*8) - fputc('\t',Out); + out.append("\t"); // Fill the last bit with spaces for (; Current < Target; Current++) - fputc(' ',Out); + out.append(" "); } /*}}}*/ // GenContents::Print - Display the tree /*{{{*/ @@ -258,13 +260,13 @@ void GenContents::WriteSpace(FILE *Out,unsigned int Current,unsigned int Target) calls itself and runs over each section of the tree printing out the pathname and the hit packages. We use Buf to build the pathname summed over all the directory parents of this node. */ -void GenContents::Print(FILE *Out) +void GenContents::Print(FileFd &Out) { char Buffer[1024]; Buffer[0] = 0; DoPrint(Out,&Root,Buffer); } -void GenContents::DoPrint(FILE *Out,GenContents::Node *Top, char *Buf) +void GenContents::DoPrint(FileFd &Out,GenContents::Node *Top, char *Buf) { if (Top == 0) return; @@ -277,31 +279,43 @@ void GenContents::DoPrint(FILE *Out,GenContents::Node *Top, char *Buf) if (Top->Path != 0) { strcat(Buf,Top->Path); - + // Do not show the item if it is a directory with dups if (Top->Path[strlen(Top->Path)-1] != '/' /*|| Top->Dups == 0*/) { - fputs(Buf,Out); - WriteSpace(Out,strlen(Buf),60); + std::string out = Buf; + WriteSpace(out, out.length(), 60); for (Node *I = Top; I != 0; I = I->Dups) { if (I != Top) - fputc(',',Out); - fputs(I->Package,Out); + out.append(","); + out.append(I->Package); } - fputc('\n',Out); - } - } - + out.append("\n"); + Out.Write(out.c_str(), out.length()); + } + } + // Go along the directory link DoPrint(Out,Top->DirDown,Buf); *OldEnd = 0; - + // Go right DoPrint(Out,Top->BTreeRight,Buf); } /*}}}*/ - +// ContentsExtract Constructor /*{{{*/ +ContentsExtract::ContentsExtract() + : Data(0), MaxSize(0), CurSize(0) +{ +} + /*}}}*/ +// ContentsExtract Destructor /*{{{*/ +ContentsExtract::~ContentsExtract() +{ + free(Data); +} + /*}}}*/ // ContentsExtract::Read - Read the archive /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -314,7 +328,7 @@ bool ContentsExtract::Read(debDebFile &Deb) // ContentsExtract::DoItem - Extract an item /*{{{*/ // --------------------------------------------------------------------- /* This just tacks the name onto the end of our memory buffer */ -bool ContentsExtract::DoItem(Item &Itm,int &Fd) +bool ContentsExtract::DoItem(Item &Itm, int &/*Fd*/) { unsigned long Len = strlen(Itm.Name);