X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/65a1e968442361247b646dc61843f841235114e0..6d5dd02a49b18017c296c2d76bc6bb1d9f1ef6ac:/apt-pkg/contrib/fileutl.cc diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index f34d839e3..a761794ee 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.19 1999/02/08 07:30:50 jgg Exp $ +// $Id: fileutl.cc,v 1.22 1999/03/15 08:10:39 jgg Exp $ /* ###################################################################### File Utilities @@ -24,6 +24,7 @@ #include #include #include +#include #include /*}}}*/ @@ -163,16 +164,27 @@ void SetNonBlock(int Fd,bool Block) // WaitFd - Wait for a FD to become readable /*{{{*/ // --------------------------------------------------------------------- /* This waits for a FD to become readable using select. It is usefull for - applications making use of non-blocking sockets. */ -bool WaitFd(int Fd) + applications making use of non-blocking sockets. The timeout is + in seconds. */ +bool WaitFd(int Fd,bool write,unsigned long timeout) { fd_set Set; + struct timeval tv; FD_ZERO(&Set); FD_SET(Fd,&Set); - - if (select(Fd+1,&Set,0,0,0) <= 0) - return false; - + tv.tv_sec = timeout; + tv.tv_usec = 0; + if (write == true) + { + if (select(Fd+1,0,&Set,0,(timeout != 0?&tv:0)) <= 0) + return false; + } + else + { + if (select(Fd+1,&Set,0,0,(timeout != 0?&tv:0)) <= 0) + return false; + } + return true; } /*}}}*/ @@ -264,6 +276,20 @@ bool FileFd::Seek(unsigned long To) return _error->Error("Unable to seek to %u",To); } + return true; +} + /*}}}*/ +// FileFd::Truncate - Truncate the file /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool FileFd::Truncate(unsigned long To) +{ + if (ftruncate(iFd,To) != 0) + { + Flags |= Fail; + return _error->Error("Unable to truncate to %u",To); + } + return true; } /*}}}*/