]> git.saurik.com Git - apt.git/blame - ftparchive/multicompress.h
ExecFork: Use /proc/self/fd to determine which files to close
[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>
453b82a3
DK
25#include <time.h>
26
b2e465d6
AL
27class MultiCompress
28{
b2e465d6
AL
29 // An output file
30 struct Files
31 {
8f3ba4e8 32 std::string Output;
03bef784
DK
33 APT::Configuration::Compressor CompressProg;
34 Files *Next;
b2e465d6
AL
35 FileFd TmpFile;
36 pid_t CompressProc;
37 time_t OldMTime;
b2e465d6
AL
38 };
39
40 Files *Outputs;
41 pid_t Outputter;
42 mode_t Permissions;
b2e465d6 43
9209ec47 44 bool Child(int const &Fd);
b2e465d6
AL
45 bool Start();
46 bool Die();
47
48 public:
49
50 // The FD to write to for compression.
88593886 51 FileFd Input;
b2e465d6
AL
52 unsigned long UpdateMTime;
53
650faab0 54 bool Finalize(unsigned long long &OutSize);
12d1f5b3 55 bool OpenOld(FileFd &Fd);
8f3ba4e8 56 static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St);
b2e465d6 57
8f3ba4e8 58 MultiCompress(std::string const &Output,std::string const &Compress,
9209ec47 59 mode_t const &Permissions, bool const &Write = true);
b2e465d6
AL
60 ~MultiCompress();
61};
62
63#endif