X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Ffind_session.cc;h=c470ef7f3e9a0ace591f02f2db84a456355e9d01;hb=884cb355230d293233e599bdfebae7f67684a48e;hp=7a25b1298bf7cf7bba7d5aec4aab1d3fd7078c2b;hpb=b880a381523b2cfdb7ebd17c27fff1adf90fa028;p=ardour.git diff --git a/libs/ardour/find_session.cc b/libs/ardour/find_session.cc index 7a25b1298b..c470ef7f3e 100644 --- a/libs/ardour/find_session.cc +++ b/libs/ardour/find_session.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Paul Davis + Copyright (C) 2012 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,15 +18,17 @@ */ #include -#include #include #include #include +#include "pbd/gstdio_compat.h" + #include #include "pbd/compose.h" +#include "pbd/pathexpand.h" #include "pbd/error.h" #include "ardour/filename_extensions.h" @@ -43,21 +45,15 @@ namespace ARDOUR { int find_session (string str, string& path, string& snapshot, bool& isnew) { - struct stat statbuf; - char buf[PATH_MAX+1]; + GStatBuf statbuf; isnew = false; - if (!realpath (str.c_str(), buf) && (errno != ENOENT && errno != ENOTDIR)) { - error << string_compose (_("Could not resolve path: %1 (%2)"), buf, strerror(errno)) << endmsg; - return -1; - } - - str = buf; + str = canonical_path (str); /* check to see if it exists, and what it is */ - if (stat (str.c_str(), &statbuf)) { + if (g_stat (str.c_str(), &statbuf)) { if (errno == ENOENT) { isnew = true; } else { @@ -86,7 +82,7 @@ find_session (string str, string& path, string& snapshot, bool& isnew) /* is it there ? */ - if (stat (tmp.c_str(), &statbuf)) { + if (g_stat (tmp.c_str(), &statbuf)) { error << string_compose (_("cannot check statefile %1 (%2)"), tmp, strerror (errno)) << endmsg; return -1; @@ -122,7 +118,10 @@ find_session (string str, string& path, string& snapshot, bool& isnew) suffix = snapshot.find (statefile_suffix); - if (suffix == string::npos) { + const string::size_type start_pos_of_extension = snapshot.size () - strlen (statefile_suffix); + // we should check the start of extension position + // because files '*.ardour.bak' are possible + if (suffix != start_pos_of_extension) { error << string_compose (_("%1 is not a snapshot file"), str) << endmsg; return -1; }