summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2010-01-25 17:34:02 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2010-01-25 17:34:02 +0100
commitab3846c01acfd223e7e4b8fbe1be5f325b205466 (patch)
tree46765cfc2869e10c083fadcd6db7ff810c5e4917
parent503a68c63ad9c71d38ab22aea475365213b0559c (diff)
* ftparchive/writer.{cc,h}:
- merge crash fix for apt-ftparchive on hurd, thanks to Samuel Thibault for the patch (closes: #566664)
-rw-r--r--debian/changelog3
-rw-r--r--ftparchive/writer.cc31
-rw-r--r--ftparchive/writer.h2
3 files changed, 22 insertions, 14 deletions
diff --git a/debian/changelog b/debian/changelog
index b89a88b87..39798f635 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,6 +10,9 @@ apt (0.7.25.2) UNRELEASED; urgency=low
- merge fix from Gene Cash that supports markauto for
packages that are not in the extended_states file yet
(closes: #534920)
+ * ftparchive/writer.{cc,h}:
+ - merge crash fix for apt-ftparchive on hurd, thanks to
+ Samuel Thibault for the patch (closes: #566664)
[ David Kalnischkies ]
* apt-pkg/contrib/fileutl.cc:
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index 4e6c9a77d..b46152a9d 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -58,10 +58,6 @@ FTWScanner::FTWScanner()
{
ErrorPrinted = false;
NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
- RealPath = 0;
- long PMax = pathconf(".",_PC_PATH_MAX);
- if (PMax > 0)
- RealPath = new char[PMax];
}
/*}}}*/
// FTWScanner::Scanner - FTW Scanner /*{{{*/
@@ -92,6 +88,8 @@ int FTWScanner::ScannerFTW(const char *File,const struct stat *sb,int Flag)
int FTWScanner::ScannerFile(const char *File, bool ReadLink)
{
const char *LastComponent = strrchr(File, '/');
+ char *RealPath = NULL;
+
if (LastComponent == NULL)
LastComponent = File;
else
@@ -111,10 +109,13 @@ int FTWScanner::ScannerFile(const char *File, bool ReadLink)
given are not links themselves. */
char Jnk[2];
Owner->OriginalPath = File;
- if (ReadLink && Owner->RealPath != 0 &&
+ if (ReadLink &&
readlink(File,Jnk,sizeof(Jnk)) != -1 &&
- realpath(File,Owner->RealPath) != 0)
- Owner->DoPackage(Owner->RealPath);
+ (RealPath = realpath(File,NULL)) != 0)
+ {
+ Owner->DoPackage(RealPath);
+ free(RealPath);
+ }
else
Owner->DoPackage(File);
@@ -150,13 +151,15 @@ int FTWScanner::ScannerFile(const char *File, bool ReadLink)
/* */
bool FTWScanner::RecursiveScan(string Dir)
{
+ char *RealPath = NULL;
/* If noprefix is set then jam the scan root in, so we don't generate
link followed paths out of control */
if (InternalPrefix.empty() == true)
{
- if (realpath(Dir.c_str(),RealPath) == 0)
+ if ((RealPath = realpath(Dir.c_str(),NULL)) == 0)
return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
- InternalPrefix = RealPath;
+ InternalPrefix = RealPath;
+ free(RealPath);
}
// Do recursive directory searching
@@ -180,13 +183,15 @@ bool FTWScanner::RecursiveScan(string Dir)
of files from another file. */
bool FTWScanner::LoadFileList(string Dir,string File)
{
+ char *RealPath = NULL;
/* If noprefix is set then jam the scan root in, so we don't generate
link followed paths out of control */
if (InternalPrefix.empty() == true)
{
- if (realpath(Dir.c_str(),RealPath) == 0)
+ if ((RealPath = realpath(Dir.c_str(),NULL)) == 0)
return _error->Errno("realpath",_("Failed to resolve %s"),Dir.c_str());
InternalPrefix = RealPath;
+ free(RealPath);
}
Owner = this;
@@ -668,6 +673,7 @@ bool SourcesWriter::DoPackage(string FileName)
// Perform the delinking operation over all of the files
string ParseJnk;
const char *C = Files;
+ char *RealPath = NULL;
for (;isspace(*C); C++);
while (*C != 0)
{
@@ -679,10 +685,11 @@ bool SourcesWriter::DoPackage(string FileName)
char Jnk[2];
string OriginalPath = Directory + ParseJnk;
- if (RealPath != 0 && readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
- realpath(OriginalPath.c_str(),RealPath) != 0)
+ if (readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 &&
+ (RealPath = realpath(OriginalPath.c_str(),NULL)) != 0)
{
string RP = RealPath;
+ free(RealPath);
if (Delink(RP,OriginalPath.c_str(),Stats.DeLinkBytes,St.st_size) == false)
return false;
}
diff --git a/ftparchive/writer.h b/ftparchive/writer.h
index e76438900..9aaadbdab 100644
--- a/ftparchive/writer.h
+++ b/ftparchive/writer.h
@@ -35,7 +35,6 @@ class FTWScanner
protected:
vector<string> Patterns;
const char *OriginalPath;
- char *RealPath;
bool ErrorPrinted;
// Stuff for the delinker
@@ -70,7 +69,6 @@ class FTWScanner
bool SetExts(string Vals);
FTWScanner();
- virtual ~FTWScanner() {delete [] RealPath;};
};
class PackagesWriter : public FTWScanner