##################################################################### */
/*}}}*/
// Include Files /*{{{*/
+#include <config.h>
+
#include <apt-pkg/fileutl.h>
#include <apt-pkg/error.h>
#include <apt-pkg/acquire-method.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/hashes.h>
+#include <apt-pkg/configuration.h>
#include <sys/stat.h>
#include <unistd.h>
bool Bzip2Method::Fetch(FetchItem *Itm)
{
URI Get = Itm->Uri;
- string Path = Get.Host + Get.Path; // To account for relative paths
+ std::string Path = Get.Host + Get.Path; // To account for relative paths
- string GzPathOption = "Dir::bin::"+string(Prog);
+ std::string GzPathOption = "Dir::bin::" + std::string(Prog);
FetchResult Res;
Res.Filename = Itm->DestFile;
// Open the source and destination files
FileFd From(Path,FileFd::ReadOnly);
- // if the file is empty, just rename it and return
- if(From.Size() == 0)
- {
- rename(Path.c_str(), Itm->DestFile.c_str());
- return true;
- }
+ if(From.FileSize() == 0)
+ return _error->Error(_("Empty files can't be valid archives"));
int GzOut[2];
if (pipe(GzOut) < 0)
SetCloseExec(STDOUT_FILENO,false);
const char *Args[3];
- string Tmp = _config->Find(GzPathOption,Prog);
+ std::string Tmp = _config->Find(GzPathOption,Prog);
Args[0] = Tmp.c_str();
Args[1] = "-d";
Args[2] = 0;
close(GzOut[1]);
FileFd FromGz(GzOut[0]); // For autoclose
- FileFd To(Itm->DestFile,FileFd::WriteEmpty);
+ FileFd To(Itm->DestFile,FileFd::WriteAtomic);
To.EraseOnFailure();
if (_error->PendingError() == true)
return false;
while (1)
{
unsigned char Buffer[4*1024];
- unsigned long Count;
- Count = read(GzOut[0],Buffer,sizeof(Buffer));
+ ssize_t Count = read(GzOut[0],Buffer,sizeof(Buffer));
if (Count < 0 && errno == EINTR)
continue;