* ftparchive/writer.cc:
[ntk/apt.git] / ftparchive / multicompress.h
CommitLineData
b2e465d6
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
3// $Id: multicompress.h,v 1.2 2001/02/20 07:03:18 jgg Exp $
4/* ######################################################################
5
6 MultiCompressor
7
8 Multiple output class. Takes a single FILE* and writes it simultaneously
9 to many compressed files. Then checks if the resulting output is
10 different from any previous output and overwrites the old files. Care is
11 taken to ensure that the new files are not generally readable while they
12 are being written.
13
14 ##################################################################### */
15 /*}}}*/
16#ifndef MULTICOMPRESS_H
17#define MULTICOMPRESS_H
18
b2e465d6 19#include <apt-pkg/fileutl.h>
03bef784 20#include <apt-pkg/aptconfiguration.h>
472ff00e
DK
21
22#include <string>
b2e465d6
AL
23#include <stdio.h>
24#include <sys/types.h>
25
26class MultiCompress
27{
b2e465d6
AL
28 // An output file
29 struct Files
30 {
8f3ba4e8 31 std::string Output;
03bef784
DK
32 APT::Configuration::Compressor CompressProg;
33 Files *Next;
b2e465d6
AL
34 FileFd TmpFile;
35 pid_t CompressProc;
36 time_t OldMTime;
b2e465d6
AL
37 };
38
39 Files *Outputs;
40 pid_t Outputter;
41 mode_t Permissions;
b2e465d6 42
9209ec47 43 bool Child(int const &Fd);
b2e465d6
AL
44 bool Start();
45 bool Die();
46
47 public:
48
49 // The FD to write to for compression.
50 FILE *Input;
51 unsigned long UpdateMTime;
52
650faab0 53 bool Finalize(unsigned long long &OutSize);
12d1f5b3 54 bool OpenOld(FileFd &Fd);
8f3ba4e8 55 static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St);
b2e465d6 56
8f3ba4e8 57 MultiCompress(std::string const &Output,std::string const &Compress,
9209ec47 58 mode_t const &Permissions, bool const &Write = true);
b2e465d6
AL
59 ~MultiCompress();
60};
61
62#endif