summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/editor_audio_import.cc22
1 files changed, 21 insertions, 1 deletions
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index df737429bd..2f63de340e 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -17,6 +17,11 @@
*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <unistd.h>
+
#include <pbd/pthread_utils.h>
#include <pbd/basename.h>
#include <pbd/shortpath.h>
@@ -294,7 +299,7 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
linked_path += Glib::path_get_basename (path);
if (link (path.c_str(), linked_path.c_str()) == 0) {
-
+
/* there are many reasons why link(2) might have failed.
but if it succeeds, we now have a link in the
session sound dir that will protect against
@@ -302,6 +307,21 @@ Editor::embed_sndfile (vector<Glib::ustring> paths, bool split, bool multiple_fi
*/
path = linked_path;
+
+ } else {
+
+ /* one possible reason is that its already linked */
+
+ if (errno == EEXIST) {
+ struct stat sb;
+
+ if (stat (linked_path.c_str(), &sb) == 0) {
+ if (sb.st_nlink > 1) { // its a hard link, assume its the one we want
+ path = linked_path;
+ }
+ }
+ }
+
}
/* note that we temporarily truncated _id at the colon */