]> git.decadent.org.uk Git - dak.git/blobdiff - tools/dsync-0.0/libdsync/contrib/fileutl.h
Added another tool used in dak (and placed nowhere else), dsync
[dak.git] / tools / dsync-0.0 / libdsync / contrib / fileutl.h
diff --git a/tools/dsync-0.0/libdsync/contrib/fileutl.h b/tools/dsync-0.0/libdsync/contrib/fileutl.h
new file mode 100644 (file)
index 0000000..1be6009
--- /dev/null
@@ -0,0 +1,90 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                         /*{{{*/
+// $Id: fileutl.h,v 1.3 1999/10/24 06:53:12 jgg Exp $
+/* ######################################################################
+   
+   File Utilities
+   
+   CopyFile - Buffered copy of a single file
+   GetLock - dpkg compatible lock file manipulation (fcntl)
+   FileExists - Returns true if the file exists
+   SafeGetCWD - Returns the CWD in a string with overrun protection 
+   
+   The file class is a handy abstraction for various functions+classes
+   that need to accept filenames.
+   
+   This source is placed in the Public Domain, do with it what you will
+   It was originally written by Jason Gunthorpe.
+   
+   ##################################################################### */
+                                                                       /*}}}*/
+#ifndef PKGLIB_FILEUTL_H
+#define PKGLIB_FILEUTL_H
+
+#ifdef __GNUG__
+#pragma interface "dsync/fileutl.h"
+#endif 
+
+#include <string>
+
+using namespace std;
+
+class FileFd
+{
+   protected:
+   int iFd;
+   enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2),
+                    HitEof = (1<<3)};
+   unsigned long Flags;
+   string FileName;
+   
+   public:
+   enum OpenMode {ReadOnly,WriteEmpty,WriteExists,WriteAny};
+   
+   bool Read(void *To,unsigned long Size,bool AllowEof = false);
+   bool Write(const void *From,unsigned long Size);
+   bool Seek(unsigned long To);
+   bool Skip(unsigned long To);
+   bool Truncate(unsigned long To);
+   unsigned long Tell();
+   unsigned long Size();
+   bool Open(string FileName,OpenMode Mode,unsigned long Perms = 0666);
+   bool Close();
+
+   // Simple manipulators
+   inline int Fd() {return iFd;};
+   inline void Fd(int fd) {iFd = fd;};
+   inline bool IsOpen() {return iFd >= 0;};
+   inline bool Failed() {return (Flags & Fail) == Fail;};
+   inline void EraseOnFailure() {Flags |= DelOnFail;};
+   inline void OpFail() {Flags |= Fail;};
+   inline bool Eof() {return (Flags & HitEof) == HitEof;};
+   inline string &Name() {return FileName;};
+   
+   FileFd(string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1), 
+            Flags(0) 
+   {
+      Open(FileName,Mode,Perms);
+   };
+   FileFd(int Fd = -1) : iFd(Fd), Flags(AutoClose) {};
+   FileFd(int Fd,bool) : iFd(Fd), Flags(0) {};
+   virtual ~FileFd();
+};
+
+bool CopyFile(FileFd &From,FileFd &To);
+int GetLock(string File,bool Errors = true);
+bool FileExists(string File);
+string SafeGetCWD();
+void SetCloseExec(int Fd,bool Close);
+void SetNonBlock(int Fd,bool Block);
+bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
+int ExecFork();
+bool ExecWait(int Pid,const char *Name,bool Reap = false);
+
+// File string manipulators
+string flNotDir(string File);
+string flNotFile(string File);
+string flNoLink(string File);
+
+#endif