diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 18:07:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 18:07:13 +0000 |
commit | 636c7dc17286d93d788c741d15fd756aeda066d5 (patch) | |
tree | e7ae158cc54f591041a061b9865bcae51854f15c /ftparchive/multicompress.h | |
parent | Initial commit. (diff) | |
download | apt-636c7dc17286d93d788c741d15fd756aeda066d5.tar.xz apt-636c7dc17286d93d788c741d15fd756aeda066d5.zip |
Adding upstream version 1.8.2.3.upstream/1.8.2.3upstream
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 |