24#ifndef PKGLIB_FILEUTL_H
25#define PKGLIB_FILEUTL_H
27#include <apt-pkg/aptconfiguration.h>
28#include <apt-pkg/macros.h>
55 enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
56 HitEof = (1<<3), Replace = (1<<4), Compressed = (1<<5) };
59 std::string TemporaryFileName;
65 ReadWrite = ReadOnly | WriteOnly,
69 Atomic = Exclusive | (1 << 4),
71 BufferedWrite = (1 << 6),
73 WriteEmpty = ReadWrite | Create | Empty,
74 WriteExists = ReadWrite,
75 WriteAny = ReadWrite | Create,
76 WriteTemp = ReadWrite | Create | Exclusive,
78 WriteAtomic = ReadWrite | Create | Atomic
93 inline bool Read(
void *To,
unsigned long long Size,
bool AllowEof)
95 unsigned long long Jnk;
97 return Read(To,Size,&Jnk);
100 bool Read(
void *To,
unsigned long long Size,
unsigned long long *Actual = 0);
101 bool static Read(
int const Fd,
void *To,
unsigned long long Size,
unsigned long long *
const Actual = 0);
113 char* ReadLine(
char *To,
unsigned long long const Size);
123 bool ReadLine(std::string &To);
125 bool Write(
const void *From,
unsigned long long Size);
126 bool static Write(
int Fd,
const void *From,
unsigned long long Size);
127 bool Seek(
unsigned long long To);
128 bool Skip(
unsigned long long To);
129 bool Truncate(
unsigned long long To);
130 unsigned long long Tell();
132 unsigned long long Size();
134 unsigned long long FileSize();
135 time_t ModificationTime();
137 bool Open(std::string FileName,
unsigned int const Mode,CompressMode Compress,
unsigned long const AccessMode = 0666);
139 inline bool Open(std::string FileName,
unsigned int const Mode,
unsigned long const AccessMode = 0666) {
140 return Open(std::move(FileName), Mode, None, AccessMode);
142 bool OpenDescriptor(
int Fd,
unsigned int const Mode, CompressMode Compress,
bool AutoClose=
false);
144 inline bool OpenDescriptor(
int Fd,
unsigned int const Mode,
bool AutoClose=
false) {
145 return OpenDescriptor(Fd, Mode, None, AutoClose);
151 inline int Fd() {
return iFd;};
152 inline void Fd(
int fd) { OpenDescriptor(fd, ReadWrite);};
154 inline bool IsOpen() {
return iFd >= 0;};
155 inline bool Failed() {
return (Flags & Fail) == Fail;};
156 inline void EraseOnFailure() {Flags |= DelOnFail;};
157 inline void OpFail() {Flags |= Fail;};
158 inline bool Eof() {
return (Flags & HitEof) == HitEof;};
159 inline bool IsCompressed() {
return (Flags & Compressed) == Compressed;};
160 inline std::string &Name() {
return FileName;};
161 inline void SetFileName(std::string
const &name) { FileName = name; };
163 FileFd(std::string FileName,
unsigned int const Mode,
unsigned long AccessMode = 0666);
164 FileFd(std::string FileName,
unsigned int const Mode, CompressMode Compress,
unsigned long AccessMode = 0666);
166 FileFd(
int const Fd,
unsigned int const Mode = ReadWrite, CompressMode Compress = None);
167 FileFd(
int const Fd,
bool const AutoClose);
171 std::unique_ptr<FileFdPrivate> d;
177 APT_HIDDEN
bool FileFdErrno(
const char* Function,
const char* Description,...) APT_PRINTF(3) APT_COLD;
178 APT_HIDDEN
bool FileFdError(
const char* Description,...) APT_PRINTF(2) APT_COLD;
181APT_PUBLIC
bool RunScripts(
const char *Cnf);
183APT_PUBLIC
bool RemoveFile(
char const *
const Function, std::string
const &FileName);
184APT_PUBLIC
bool RemoveFileAt(
char const *
const Function,
int const dirfd, std::string
const &FileName);
185APT_PUBLIC
int GetLock(std::string
const &File,
bool Errors =
true);
186APT_PUBLIC
bool FileExists(std::string
const &File);
187APT_PUBLIC
bool RealFileExists(std::string
const &File);
188APT_PUBLIC
bool DirectoryExists(std::string
const &Path);
189APT_PUBLIC
bool CreateDirectory(std::string
const &Parent, std::string
const &Path);
190APT_PUBLIC time_t GetModificationTime(std::string
const &Path);
191APT_PUBLIC
bool Rename(std::string
const &From, std::string
const &To);
193APT_PUBLIC std::string GetTempDir();
194APT_PUBLIC std::string GetTempDir(std::string
const &User);
195APT_PUBLIC
FileFd* GetTempFile(std::string
const &Prefix =
"",
196 bool ImmediateUnlink =
true,
197 FileFd *
const TmpFd = NULL);
200APT_HIDDEN
FileFd* GetTempFile(std::string
const &Prefix,
201 bool ImmediateUnlink ,
211APT_PUBLIC
bool CreateAPTDirectoryIfNeeded(std::string
const &Parent, std::string
const &Path);
213APT_PUBLIC std::vector<std::string> GetListOfFilesInDir(std::string
const &Dir, std::string
const &Ext,
214 bool const &SortList,
bool const &AllowNoExt=
false);
215APT_PUBLIC std::vector<std::string> GetListOfFilesInDir(std::string
const &Dir, std::vector<std::string>
const &Ext,
216 bool const &SortList);
217APT_PUBLIC std::vector<std::string> GetListOfFilesInDir(std::string
const &Dir,
bool SortList);
218APT_PUBLIC std::string SafeGetCWD();
219APT_PUBLIC
void SetCloseExec(
int Fd,
bool Close);
220APT_PUBLIC
void SetNonBlock(
int Fd,
bool Block);
221APT_PUBLIC
bool WaitFd(
int Fd,
bool write =
false,
unsigned long timeout = 0);
222APT_PUBLIC pid_t ExecFork();
223APT_PUBLIC pid_t ExecFork(std::set<int> keep_fds);
224APT_PUBLIC
void MergeKeepFdsFromConfiguration(std::set<int> &keep_fds);
225APT_PUBLIC
bool ExecWait(pid_t Pid,
const char *Name,
bool Reap =
false);
228APT_PUBLIC
bool StartsWithGPGClearTextSignature(std::string
const &FileName);
240APT_PUBLIC
bool ChangeOwnerAndPermissionOfFile(
char const *
const requester,
char const *
const file,
char const *
const user,
char const *
const group, mode_t
const mode);
253APT_PUBLIC
bool DropPrivileges();
256APT_PUBLIC std::string_view flNotDir(std::string_view File);
257APT_PUBLIC std::string flNotFile(std::string
const &File);
258APT_PUBLIC std::string flNoLink(std::string File);
259APT_PUBLIC std::string_view flExtension(std::string_view File);
260APT_PUBLIC std::string flCombine(std::string Dir,std::string File);
264APT_PUBLIC std::string flAbsPath(std::string File);
266APT_HIDDEN std::string flNormalize(std::string file);
269APT_PUBLIC std::vector<std::string> Glob(std::string
const &pattern,
int flags=0);
283APT_PUBLIC
bool Popen(
const char *Args[],
FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode,
bool CaptureStderr =
true,
bool Sandbox =
false);
285APT_HIDDEN
bool OpenConfigurationFileFd(std::string
const &File,
FileFd &Fd);
287APT_HIDDEN
int Inhibit(
const char *what,
const char *who,
const char *why,
const char *mode);
291 struct FILEFcloseDeleter {
292 void operator()(FILE *p) {
296 struct FILEPcloseDeleter {
297 void operator()(FILE *p) {
302 [[maybe_unused]] std::unique_ptr<FILE, FILEFcloseDeleter> make_unique_FILE(
const char *
const filename,
char const *
const mode)
304 return {fopen(filename, mode), {}};
306 [[maybe_unused]] std::unique_ptr<FILE, FILEFcloseDeleter> make_unique_FILE(std::string
const &filename,
char const *
const mode)
308 return make_unique_FILE(filename.c_str(), mode);
311 [[maybe_unused]] std::unique_ptr<FILE, FILEPcloseDeleter> make_unique_popen(
const char *program,
char const *
const mode)
313 return {popen(program, mode), {}};
Definition fileutl.cc:1562
Definition fileutl.cc:2320
Definition fileutl.cc:1096
Definition fileutl.cc:1435
Definition fileutl.cc:1616
Definition fileutl.cc:1988
Definition fileutl.cc:2189
Definition fileutl.cc:1778
Representation of supported compressors.
Definition aptconfiguration.h:95