// 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)
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;