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