|
|
@ -1067,30 +1067,12 @@ bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration: |
|
|
|
{ |
|
|
|
Close(); |
|
|
|
Flags = (AutoClose) ? FileFd::AutoClose : 0; |
|
|
|
if (AutoClose == false && ( |
|
|
|
#ifdef HAVE_ZLIB |
|
|
|
compressor.Name == "gzip" || |
|
|
|
#endif |
|
|
|
#ifdef HAVE_BZ2 |
|
|
|
compressor.Name == "bzip2" || |
|
|
|
#endif |
|
|
|
false)) |
|
|
|
{ |
|
|
|
// Need to duplicate fd here or gzclose for cleanup will close the fd as well
|
|
|
|
iFd = dup(Fd); |
|
|
|
} |
|
|
|
else |
|
|
|
iFd = Fd; |
|
|
|
iFd = Fd; |
|
|
|
this->FileName = ""; |
|
|
|
if (Fd == -1 || OpenInternDescriptor(Mode, compressor) == false) |
|
|
|
if (OpenInternDescriptor(Mode, compressor) == false) |
|
|
|
{ |
|
|
|
if (iFd != -1 && ( |
|
|
|
#ifdef HAVE_ZLIB |
|
|
|
compressor.Name == "gzip" || |
|
|
|
#endif |
|
|
|
#ifdef HAVE_BZ2 |
|
|
|
compressor.Name == "bzip2" || |
|
|
|
#endif |
|
|
|
(Flags & Compressed) == Compressed || |
|
|
|
AutoClose == true)) |
|
|
|
{ |
|
|
|
close (iFd); |
|
|
@ -1102,6 +1084,8 @@ bool FileFd::OpenDescriptor(int Fd, unsigned int const Mode, APT::Configuration: |
|
|
|
} |
|
|
|
bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::Compressor const &compressor) |
|
|
|
{ |
|
|
|
if (iFd == -1) |
|
|
|
return false; |
|
|
|
if (compressor.Name == "." || compressor.Binary.empty() == true) |
|
|
|
return true; |
|
|
|
|
|
|
@ -1110,6 +1094,21 @@ bool FileFd::OpenInternDescriptor(unsigned int const Mode, APT::Configuration::C |
|
|
|
d = new FileFdPrivate(); |
|
|
|
d->openmode = Mode; |
|
|
|
d->compressor = compressor; |
|
|
|
if (AutoClose == false && ( |
|
|
|
#ifdef HAVE_ZLIB |
|
|
|
compressor.Name == "gzip" || |
|
|
|
#endif |
|
|
|
#ifdef HAVE_BZ2 |
|
|
|
compressor.Name == "bzip2" || |
|
|
|
#endif |
|
|
|
false)) |
|
|
|
{ |
|
|
|
// Need to duplicate fd here or gz/bz2 close for cleanup will close the fd as well
|
|
|
|
int const internFd = dup(iFd); |
|
|
|
if (internFd == -1) |
|
|
|
return FileFdErrno("OpenInternDescriptor", _("Could not open file descriptor %d"), iFd); |
|
|
|
iFd = internFd; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef HAVE_ZLIB |
|
|
|