X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f08fcf34cacb98d46cd8ee85398994db26a80a56..c29652b05e32b71126ee37c3a013d17f4d2a6479:/apt-pkg/contrib/fileutl.cc?ds=inline diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index fd9b93036..4db73c479 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: fileutl.cc,v 1.36 2001/03/03 22:36:20 tausq Exp $ +// $Id: fileutl.cc,v 1.39 2001/05/07 05:30:31 jgg Exp $ /* ###################################################################### File Utilities @@ -23,6 +23,7 @@ #include +#include #include #include #include @@ -33,6 +34,8 @@ #include /*}}}*/ +using namespace std; + // CopyFile - Buffered copy of a file /*{{{*/ // --------------------------------------------------------------------- /* The caller is expected to set things so that failure causes erasure */ @@ -405,8 +408,8 @@ bool FileFd::Open(string FileName,OpenMode Mode, unsigned long Perms) break; case WriteTemp: - unlink(Filename.c_str()); - iFd = open(FileName.c_str(),O_RDWR | O_CREATE | O_EXCL,Perms); + unlink(FileName.c_str()); + iFd = open(FileName.c_str(),O_RDWR | O_CREAT | O_EXCL,Perms); break; } @@ -431,10 +434,13 @@ FileFd::~FileFd() // --------------------------------------------------------------------- /* We are carefull to handle interruption by a signal while reading gracefully. */ -bool FileFd::Read(void *To,unsigned long Size,bool AllowEof) +bool FileFd::Read(void *To,unsigned long Size,unsigned long *Actual) { int Res; errno = 0; + if (Actual != 0) + *Actual = 0; + do { Res = read(iFd,To,Size); @@ -448,6 +454,8 @@ bool FileFd::Read(void *To,unsigned long Size,bool AllowEof) To = (char *)To + Res; Size -= Res; + if (Actual != 0) + *Actual += Res; } while (Res > 0 && Size > 0); @@ -455,7 +463,7 @@ bool FileFd::Read(void *To,unsigned long Size,bool AllowEof) return true; // Eof handling - if (AllowEof == true) + if (Actual != 0) { Flags |= HitEof; return true;