]> git.saurik.com Git - apt.git/blame - apt-pkg/contrib/fileutl.h
merge with my debian-sid branch
[apt.git] / apt-pkg / contrib / fileutl.h
CommitLineData
578bfd0a
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
233b185f 3// $Id: fileutl.h,v 1.26 2001/05/07 05:06:52 jgg Exp $
578bfd0a
AL
4/* ######################################################################
5
6 File Utilities
7
8 CopyFile - Buffered copy of a single file
9 GetLock - dpkg compatible lock file manipulation (fcntl)
10 FileExists - Returns true if the file exists
11 SafeGetCWD - Returns the CWD in a string with overrun protection
12
13 The file class is a handy abstraction for various functions+classes
14 that need to accept filenames.
15
16 This source is placed in the Public Domain, do with it what you will
17 It was originally written by Jason Gunthorpe.
18
19 ##################################################################### */
20 /*}}}*/
578bfd0a
AL
21#ifndef PKGLIB_FILEUTL_H
22#define PKGLIB_FILEUTL_H
23
1cd1c398 24#include <apt-pkg/macros.h>
6c139d6e 25
578bfd0a 26#include <string>
46e39c8e 27#include <vector>
578bfd0a 28
a3a03f5d 29#include <zlib.h>
30
144c0969
JAK
31/* Define this for python-apt */
32#define APT_HAS_GZIP 1
33
8e06abb2 34class FileFd
578bfd0a
AL
35{
36 protected:
37 int iFd;
38
ddc1d8d0 39 enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
3010fb0e 40 HitEof = (1<<3), Replace = (1<<4) };
578bfd0a 41 unsigned long Flags;
8f3ba4e8
DK
42 std::string FileName;
43 std::string TemporaryFileName;
a3a03f5d 44 gzFile gz;
3184b4cf 45
578bfd0a 46 public:
4a9db827
JAK
47 enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip,
48 WriteAtomic};
578bfd0a 49
650faab0 50 inline bool Read(void *To,unsigned long long Size,bool AllowEof)
f604cf55 51 {
650faab0 52 unsigned long long Jnk;
f604cf55
AL
53 if (AllowEof)
54 return Read(To,Size,&Jnk);
55 return Read(To,Size);
56 }
650faab0
DK
57 bool Read(void *To,unsigned long long Size,unsigned long long *Actual = 0);
58 bool Write(const void *From,unsigned long long Size);
59 bool Seek(unsigned long long To);
60 bool Skip(unsigned long long To);
61 bool Truncate(unsigned long long To);
62 unsigned long long Tell();
63 unsigned long long Size();
64 unsigned long long FileSize();
65
66 /* You want to use 'unsigned long long' if you are talking about a file
67 to be able to support large files (>2 or >4 GB) properly.
68 This shouldn't happen all to often for the indexes, but deb's might be…
69 And as the auto-conversation converts a 'unsigned long *' to a 'bool'
70 instead of 'unsigned long long *' we need to provide this explicitely -
71 otherwise applications magically start to fail… */
72 __deprecated bool Read(void *To,unsigned long long Size,unsigned long *Actual)
73 {
74 unsigned long long R;
75 bool const T = Read(To, Size, &R);
76 *Actual = R;
77 return T;
78 }
79
8f3ba4e8 80 bool Open(std::string FileName,OpenMode Mode,unsigned long Perms = 0666);
144c0969 81 bool OpenDescriptor(int Fd, OpenMode Mode, bool AutoClose=false);
578bfd0a 82 bool Close();
b2e465d6
AL
83 bool Sync();
84
578bfd0a
AL
85 // Simple manipulators
86 inline int Fd() {return iFd;};
869f717a 87 inline void Fd(int fd) {iFd = fd;};
caffd480 88 inline gzFile gzFd() {return gz;};
578bfd0a
AL
89 inline bool IsOpen() {return iFd >= 0;};
90 inline bool Failed() {return (Flags & Fail) == Fail;};
91 inline void EraseOnFailure() {Flags |= DelOnFail;};
92 inline void OpFail() {Flags |= Fail;};
ddc1d8d0 93 inline bool Eof() {return (Flags & HitEof) == HitEof;};
8f3ba4e8 94 inline std::string &Name() {return FileName;};
c7b5ce1c 95
8f3ba4e8 96 FileFd(std::string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1),
a3a03f5d 97 Flags(0), gz(NULL)
13d87e2e
AL
98 {
99 Open(FileName,Mode,Perms);
100 };
a3a03f5d 101 FileFd(int Fd = -1) : iFd(Fd), Flags(AutoClose), gz(NULL) {};
102 FileFd(int Fd,bool) : iFd(Fd), Flags(0), gz(NULL) {};
8e06abb2 103 virtual ~FileFd();
578bfd0a
AL
104};
105
614adaa0 106bool RunScripts(const char *Cnf);
8b89e57f 107bool CopyFile(FileFd &From,FileFd &To);
8f3ba4e8
DK
108int GetLock(std::string File,bool Errors = true);
109bool FileExists(std::string File);
110bool RealFileExists(std::string File);
111bool DirectoryExists(std::string const &Path) __attrib_const;
112bool CreateDirectory(std::string const &Parent, std::string const &Path);
113time_t GetModificationTime(std::string const &Path);
b29c3712
DK
114
115/** \brief Ensure the existence of the given Path
116 *
117 * \param Parent directory of the Path directory - a trailing
118 * /apt/ will be removed before CreateDirectory call.
119 * \param Path which should exist after (successful) call
120 */
8f3ba4e8 121bool CreateAPTDirectoryIfNeeded(std::string const &Parent, std::string const &Path);
b29c3712 122
8f3ba4e8 123std::vector<std::string> GetListOfFilesInDir(std::string const &Dir, std::string const &Ext,
b3793d41 124 bool const &SortList, bool const &AllowNoExt=false);
8f3ba4e8 125std::vector<std::string> GetListOfFilesInDir(std::string const &Dir, std::vector<std::string> const &Ext,
b39c1859 126 bool const &SortList);
8f3ba4e8 127std::string SafeGetCWD();
3b5421b4
AL
128void SetCloseExec(int Fd,bool Close);
129void SetNonBlock(int Fd,bool Block);
1084d58a 130bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
75ef8f14 131pid_t ExecFork();
3826564e 132bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
578bfd0a 133
8ce4327b 134// File string manipulators
8f3ba4e8
DK
135std::string flNotDir(std::string File);
136std::string flNotFile(std::string File);
137std::string flNoLink(std::string File);
138std::string flExtension(std::string File);
139std::string flCombine(std::string Dir,std::string File);
8ce4327b 140
578bfd0a 141#endif