* methods/rred.cc:
[ntk/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
233b185f
AL
34using std::string;
35
8e06abb2 36class FileFd
578bfd0a
AL
37{
38 protected:
39 int iFd;
40
ddc1d8d0 41 enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
3010fb0e 42 HitEof = (1<<3), Replace = (1<<4) };
578bfd0a
AL
43 unsigned long Flags;
44 string FileName;
3010fb0e 45 string TemporaryFileName;
a3a03f5d 46 gzFile gz;
3184b4cf 47
578bfd0a 48 public:
4a9db827
JAK
49 enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip,
50 WriteAtomic};
578bfd0a 51
f604cf55
AL
52 inline bool Read(void *To,unsigned long Size,bool AllowEof)
53 {
54 unsigned long Jnk;
55 if (AllowEof)
56 return Read(To,Size,&Jnk);
57 return Read(To,Size);
58 }
59 bool Read(void *To,unsigned long Size,unsigned long *Actual = 0);
a05599f1 60 bool Write(const void *From,unsigned long Size);
578bfd0a 61 bool Seek(unsigned long To);
727f18af 62 bool Skip(unsigned long To);
6d5dd02a 63 bool Truncate(unsigned long To);
7f25bdff 64 unsigned long Tell();
578bfd0a 65 unsigned long Size();
4260fd39 66 unsigned long FileSize();
13d87e2e 67 bool Open(string FileName,OpenMode Mode,unsigned long Perms = 0666);
144c0969 68 bool OpenDescriptor(int Fd, OpenMode Mode, bool AutoClose=false);
578bfd0a 69 bool Close();
b2e465d6
AL
70 bool Sync();
71
578bfd0a
AL
72 // Simple manipulators
73 inline int Fd() {return iFd;};
869f717a 74 inline void Fd(int fd) {iFd = fd;};
caffd480 75 inline gzFile gzFd() {return gz;};
578bfd0a
AL
76 inline bool IsOpen() {return iFd >= 0;};
77 inline bool Failed() {return (Flags & Fail) == Fail;};
78 inline void EraseOnFailure() {Flags |= DelOnFail;};
79 inline void OpFail() {Flags |= Fail;};
ddc1d8d0 80 inline bool Eof() {return (Flags & HitEof) == HitEof;};
c7b5ce1c
AL
81 inline string &Name() {return FileName;};
82
13d87e2e 83 FileFd(string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1),
a3a03f5d 84 Flags(0), gz(NULL)
13d87e2e
AL
85 {
86 Open(FileName,Mode,Perms);
87 };
a3a03f5d 88 FileFd(int Fd = -1) : iFd(Fd), Flags(AutoClose), gz(NULL) {};
89 FileFd(int Fd,bool) : iFd(Fd), Flags(0), gz(NULL) {};
8e06abb2 90 virtual ~FileFd();
578bfd0a
AL
91};
92
614adaa0 93bool RunScripts(const char *Cnf);
8b89e57f 94bool CopyFile(FileFd &From,FileFd &To);
578bfd0a
AL
95int GetLock(string File,bool Errors = true);
96bool FileExists(string File);
36f1098a 97bool RealFileExists(string File);
1cd1c398
DK
98bool DirectoryExists(string const &Path) __attrib_const;
99bool CreateDirectory(string const &Parent, string const &Path);
b29c3712
DK
100
101/** \brief Ensure the existence of the given Path
102 *
103 * \param Parent directory of the Path directory - a trailing
104 * /apt/ will be removed before CreateDirectory call.
105 * \param Path which should exist after (successful) call
106 */
7753e468 107bool CreateAPTDirectoryIfNeeded(string const &Parent, string const &Path);
b29c3712 108
46e39c8e 109std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
b3793d41 110 bool const &SortList, bool const &AllowNoExt=false);
b39c1859
MV
111std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> const &Ext,
112 bool const &SortList);
578bfd0a 113string SafeGetCWD();
3b5421b4
AL
114void SetCloseExec(int Fd,bool Close);
115void SetNonBlock(int Fd,bool Block);
1084d58a 116bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
75ef8f14 117pid_t ExecFork();
3826564e 118bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
578bfd0a 119
8ce4327b
AL
120// File string manipulators
121string flNotDir(string File);
d38b7b3d 122string flNotFile(string File);
421c8d10 123string flNoLink(string File);
b2e465d6
AL
124string flExtension(string File);
125string flCombine(string Dir,string File);
8ce4327b 126
578bfd0a 127#endif