diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:00:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:00:48 +0000 |
commit | 851b6a097165af4d51c0db01b5e05256e5006896 (patch) | |
tree | 5f7c388ec894a7806c49a99f3bdb605d0b299a7c /ftparchive/multicompress.h | |
parent | Initial commit. (diff) | |
download | apt-851b6a097165af4d51c0db01b5e05256e5006896.tar.xz apt-851b6a097165af4d51c0db01b5e05256e5006896.zip |
Adding upstream version 2.6.1.upstream/2.6.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ftparchive/multicompress.h')
-rw-r--r-- | ftparchive/multicompress.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h new file mode 100644 index 0000000..c237269 --- /dev/null +++ b/ftparchive/multicompress.h @@ -0,0 +1,62 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ###################################################################### + + MultiCompressor + + Multiple output class. Takes a single FILE* and writes it simultaneously + to many compressed files. Then checks if the resulting output is + different from any previous output and overwrites the old files. Care is + taken to ensure that the new files are not generally readable while they + are being written. + + ##################################################################### */ + /*}}}*/ +#ifndef MULTICOMPRESS_H +#define MULTICOMPRESS_H + +#include <apt-pkg/aptconfiguration.h> +#include <apt-pkg/fileutl.h> + +#include <string> +#include <stdio.h> +#include <sys/types.h> +#include <time.h> + +class MultiCompress +{ + // An output file + struct Files + { + std::string Output; + APT::Configuration::Compressor CompressProg; + Files *Next; + FileFd TmpFile; + pid_t CompressProc; + time_t OldMTime; + }; + + Files *Outputs; + pid_t Outputter; + mode_t Permissions; + + bool Child(int const &Fd); + bool Start(); + bool Die(); + + public: + + // The FD to write to for compression. + FileFd Input; + unsigned long UpdateMTime; + + bool Finalize(unsigned long long &OutSize); + bool OpenOld(FileFd &Fd); + static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St); + + MultiCompress(std::string const &Output,std::string const &Compress, + mode_t const &Permissions, bool const &Write = true); + ~MultiCompress(); +}; + +#endif |