Add to history whether a change was automatic or not.
[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
233b185f
AL
31using std::string;
32
8e06abb2 33class FileFd
578bfd0a
AL
34{
35 protected:
36 int iFd;
37
ddc1d8d0 38 enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
3010fb0e 39 HitEof = (1<<3), Replace = (1<<4) };
578bfd0a
AL
40 unsigned long Flags;
41 string FileName;
3010fb0e 42 string TemporaryFileName;
a3a03f5d 43 gzFile gz;
3184b4cf 44
578bfd0a 45 public:
c4fc2fd7 46 enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny,WriteTemp,ReadOnlyGzip};
578bfd0a 47
f604cf55
AL
48 inline bool Read(void *To,unsigned long Size,bool AllowEof)
49 {
50 unsigned long Jnk;
51 if (AllowEof)
52 return Read(To,Size,&Jnk);
53 return Read(To,Size);
54 }
55 bool Read(void *To,unsigned long Size,unsigned long *Actual = 0);
a05599f1 56 bool Write(const void *From,unsigned long Size);
578bfd0a 57 bool Seek(unsigned long To);
727f18af 58 bool Skip(unsigned long To);
6d5dd02a 59 bool Truncate(unsigned long To);
7f25bdff 60 unsigned long Tell();
578bfd0a 61 unsigned long Size();
13d87e2e 62 bool Open(string FileName,OpenMode Mode,unsigned long Perms = 0666);
578bfd0a 63 bool Close();
b2e465d6
AL
64 bool Sync();
65
578bfd0a
AL
66 // Simple manipulators
67 inline int Fd() {return iFd;};
869f717a 68 inline void Fd(int fd) {iFd = fd;};
578bfd0a
AL
69 inline bool IsOpen() {return iFd >= 0;};
70 inline bool Failed() {return (Flags & Fail) == Fail;};
71 inline void EraseOnFailure() {Flags |= DelOnFail;};
72 inline void OpFail() {Flags |= Fail;};
ddc1d8d0 73 inline bool Eof() {return (Flags & HitEof) == HitEof;};
c7b5ce1c
AL
74 inline string &Name() {return FileName;};
75
13d87e2e 76 FileFd(string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1),
a3a03f5d 77 Flags(0), gz(NULL)
13d87e2e
AL
78 {
79 Open(FileName,Mode,Perms);
80 };
a3a03f5d 81 FileFd(int Fd = -1) : iFd(Fd), Flags(AutoClose), gz(NULL) {};
82 FileFd(int Fd,bool) : iFd(Fd), Flags(0), gz(NULL) {};
8e06abb2 83 virtual ~FileFd();
578bfd0a
AL
84};
85
614adaa0 86bool RunScripts(const char *Cnf);
8b89e57f 87bool CopyFile(FileFd &From,FileFd &To);
578bfd0a
AL
88int GetLock(string File,bool Errors = true);
89bool FileExists(string File);
1cd1c398
DK
90bool DirectoryExists(string const &Path) __attrib_const;
91bool CreateDirectory(string const &Parent, string const &Path);
46e39c8e 92std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
b3793d41 93 bool const &SortList, bool const &AllowNoExt=false);
b39c1859
MV
94std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> const &Ext,
95 bool const &SortList);
578bfd0a 96string SafeGetCWD();
3b5421b4
AL
97void SetCloseExec(int Fd,bool Close);
98void SetNonBlock(int Fd,bool Block);
1084d58a 99bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
75ef8f14 100pid_t ExecFork();
3826564e 101bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
578bfd0a 102
8ce4327b
AL
103// File string manipulators
104string flNotDir(string File);
d38b7b3d 105string flNotFile(string File);
421c8d10 106string flNoLink(string File);
b2e465d6
AL
107string flExtension(string File);
108string flCombine(string Dir,string File);
8ce4327b 109
578bfd0a 110#endif