]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/filename.h
Don't return "void" to fix MSVC6 compilation.
[wxWidgets.git] / interface / wx / filename.h
index 0c8171b0337371973834b641867d0c47486da35b..c7360e86948c41dcc24a9ddcaadad4295fc802ed 100644 (file)
@@ -90,6 +90,30 @@ enum
     wxPATH_RMDIR_RECURSIVE = 2
 };
 
+/**
+    Flags for wxFileName::Exists().
+
+    @since 2.9.5
+ */
+enum
+{
+    wxFILE_EXISTS_REGULAR   = 0x0001,  //!< Check for existence of a regular file
+    wxFILE_EXISTS_DIR       = 0x0002,  //!< Check for existence of a directory
+    /**
+        Check for existence of a symlink.
+
+        Notice that this flag also sets ::wxFILE_EXISTS_NO_FOLLOW, otherwise it
+        would never be satisfied as wxFileName::Exists() would be checking for
+        the existence of the symlink target and not the symlink itself.
+     */
+    wxFILE_EXISTS_SYMLINK   = 0x1004,
+    wxFILE_EXISTS_DEVICE    = 0x0008,  //!< Check for existence of a device
+    wxFILE_EXISTS_FIFO      = 0x0016,  //!< Check for existence of a FIFO
+    wxFILE_EXISTS_SOCKET    = 0x0032,  //!< Check for existence of a socket
+    wxFILE_EXISTS_NO_FOLLOW = 0x1000   //!< Don't dereference a contained symbolic link
+    wxFILE_EXISTS_ANY       = 0x1FFF,  //!< Check for existence of anything
+};
+
 /**
     The return value of wxFileName::GetSize() in case of error.
 */
@@ -485,27 +509,56 @@ public:
                               wxPathFormat format = wxPATH_NATIVE);
 
     /**
+        Turns off symlink dereferencing.
+
+        By default, all operations in this class work on the target of a
+        symbolic link (symlink) if the path of the file is actually a symlink.
+        Using this method allows to turn off this "symlink following" behaviour
+        and apply the operations to this path itself, even if it is a symlink.
+
+        The following methods are currently affected by this option:
+            - GetTimes() (but not SetTimes() as there is no portable way to
+              change the time of symlink itself).
+            - Existence checks: FileExists(), DirExists() and Exists() (notice
+              that static versions of these methods always follow symlinks).
+            - IsSameAs().
+
+        @see ShouldFollowLink()
+
+        @since 2.9.5
+    */
+    void DontFollowLink();
+
+     /**
         Calls the static overload of this function with the full path of this
         object.
 
-        @since 2.9.4
+        @since 2.9.4 (@a flags is new since 2.9.5)
      */
-    bool Exists() const;
+    bool Exists(int flags = wxFILE_EXISTS_ANY) const;
 
     /**
         Returns @true if either a file or a directory or something else with
         this name exists in the file system.
 
+        Don't dereference @a path if it is a symbolic link and @a flags
+        argument contains ::wxFILE_EXISTS_NO_FOLLOW.
+
         This method is equivalent to @code FileExists() || DirExists() @endcode
-        under most systems but under Unix it also returns true if the file
+        under Windows, but under Unix it also returns true if the file
         identifies a special file system object such as a device, a socket or a
         FIFO.
 
+        Alternatively you may check for the existence of a file system entry of
+        a specific type by passing the appropriate @a flags (this parameter is
+        new since wxWidgets 2.9.5). E.g. to test for a symbolic link existence
+        you could use ::wxFILE_EXISTS_SYMLINK.
+
         @since 2.9.4
 
         @see FileExists(), DirExists()
      */
-    static bool Exists(const wxString& path);
+    static bool Exists(const wxString& path, int flags = wxFILE_EXISTS_ANY);
 
     /**
         Returns @true if the file with this name exists.
@@ -1206,6 +1259,17 @@ public:
     */
     void SetVolume(const wxString& volume);
 
+    /**
+        Return whether some operations will follow symlink.
+
+        By default, file operations "follow symlink", i.e. operate on its
+        target and not on the symlink itself. See DontFollowLink() for more
+        information.
+
+        @since 2.9.5
+    */
+    bool ShouldFollowLink() const;
+
     //@{
     /**
         This function splits a full file name into components: the volume (with the