diff options
author | Julian Andres Klode <julian.klode@canonical.com> | 2019-05-06 11:40:08 +0200 |
---|---|---|
committer | Julian Andres Klode <julian.klode@canonical.com> | 2019-05-06 12:14:04 +0200 |
commit | dfe2511e31f232a8a8880eba40af40d1deb0e49c (patch) | |
tree | c671a2bf5cdb255781548cf9c7a7686fb94d9bf5 /apt-inst/dirstream.cc | |
parent | d03105d9fd5af76067f033475d4d60d30063e96a (diff) |
Merge libapt-inst into libapt-pkg
Diffstat (limited to 'apt-inst/dirstream.cc')
-rw-r--r-- | apt-inst/dirstream.cc | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/apt-inst/dirstream.cc b/apt-inst/dirstream.cc deleted file mode 100644 index d6cf0ab3f..000000000 --- a/apt-inst/dirstream.cc +++ /dev/null @@ -1,118 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - Directory Stream - - This class provides a simple basic extractor that can be used for - a number of purposes. - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include <config.h> - -#include <apt-pkg/dirstream.h> -#include <apt-pkg/error.h> - -#include <errno.h> -#include <fcntl.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <unistd.h> -#include <apti18n.h> - /*}}}*/ - -// DirStream::DoItem - Process an item /*{{{*/ -// --------------------------------------------------------------------- -/* This is a very simple extractor, it does not deal with things like - overwriting directories with files and so on. */ -bool pkgDirStream::DoItem(Item &Itm,int &Fd) -{ - switch (Itm.Type) - { - case Item::File: - { - /* Open the output file, NDELAY is used to prevent this from - blowing up on device special files.. */ - int iFd = open(Itm.Name,O_NDELAY|O_WRONLY|O_CREAT|O_TRUNC|O_APPEND, - Itm.Mode); - if (iFd < 0) - return _error->Errno("open",_("Failed to write file %s"), - Itm.Name); - - // fchmod deals with umask and fchown sets the ownership - if (fchmod(iFd,Itm.Mode) != 0) - { - close(iFd); - return _error->Errno("fchmod",_("Failed to write file %s"), Itm.Name); - } - if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM) - { - close(iFd); - return _error->Errno("fchown",_("Failed to write file %s"), Itm.Name); - } - Fd = iFd; - return true; - } - - case Item::HardLink: - case Item::SymbolicLink: - case Item::CharDevice: - case Item::BlockDevice: - case Item::Directory: - { - struct stat Buf; - // check if the dir is already there, if so return true - if (stat(Itm.Name,&Buf) == 0) - { - if(S_ISDIR(Buf.st_mode)) - return true; - // something else is there already, return false - return false; - } - // nothing here, create the dir - if(mkdir(Itm.Name,Itm.Mode) < 0) - return false; - return true; - } - case Item::FIFO: - break; - } - - return true; -} - /*}}}*/ -// DirStream::FinishedFile - Finished processing a file /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool pkgDirStream::FinishedFile(Item &Itm,int Fd) -{ - if (Fd < 0) - return true; - - /* Set the modification times. The only way it can fail is if someone - has futzed with our file, which is intolerable :> */ - struct timeval times[2]; - times[0].tv_sec = times[1].tv_sec = Itm.MTime; - times[0].tv_usec = times[1].tv_usec = 0; - if (utimes(Itm.Name, times) != 0) - _error->Errno("utimes", "Failed to set modification time for %s",Itm.Name); - - if (close(Fd) != 0) - return _error->Errno("close",_("Failed to close file %s"),Itm.Name); - return true; -} - /*}}}*/ -// DirStream::Fail - Failed processing a file /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool pkgDirStream::Fail(Item &/*Itm*/, int Fd) -{ - if (Fd < 0) - return true; - - close(Fd); - return false; -} - /*}}}*/ |