Windows does in theory support hard-links
authorRobin Gareus <robin@gareus.org>
Wed, 12 Jun 2019 19:34:39 +0000 (21:34 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 12 Jun 2019 19:35:07 +0000 (21:35 +0200)
NB. this is just as unused as the POSIX link() test. Aardour
doesn't create hardlinks since version 3.0. At least it's now
consistently wrong on all platforms :)

gtk2_ardour/sfdb_ui.cc

index 67eda8914a700d3e1daa7385b6145bc325334f7d..63b09ba3b8b2b75d9c52e297a7d0623c4e4eb2b6 100644 (file)
 #include "gtk2ardour-config.h"
 #endif
 
+#ifdef PLATFORM_WINDOWS
+#include <windows.h>
+#endif
+
 #include <map>
 #include <cerrno>
 #include <sstream>
@@ -1696,9 +1700,6 @@ SoundFileOmega::check_info (const vector<string>& paths, bool& same_size, bool&
 bool
 SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths)
 {
-#ifdef PLATFORM_WINDOWS
-       return false;
-#else
        std::string tmpdir(Glib::build_filename (s->session_directory().sound_path(), "linktest"));
        bool ret = false;
 
@@ -1715,10 +1716,16 @@ SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths
                snprintf (tmpc, sizeof(tmpc), "%s/%s", tmpdir.c_str(), Glib::path_get_basename (*i).c_str());
 
                /* can we link ? */
-
-               if (link ((*i).c_str(), tmpc)) {
+#ifdef PLATFORM_WINDOWS
+               /* see also ntfs_link -- msvc only pbd extension */
+               if (false == CreateHardLinkA (/*new link*/ tmpc, /*existing file*/ (*i).c_str(), NULL)) {
+                       goto out;
+               }
+#else
+               if (link (/*existing file*/(*i).c_str(), tmpc)) {
                        goto out;
                }
+#endif
 
                ::g_unlink (tmpc);
        }
@@ -1728,7 +1735,6 @@ SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths
   out:
        g_rmdir (tmpdir.c_str());
        return ret;
-#endif
 }
 
 SoundFileChooser::SoundFileChooser (string title, ARDOUR::Session* s)