diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-01-16 17:09:52 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-01-16 17:09:52 +0000 |
commit | e2ec54216b921c005a96f890c0e8b23c39860e7f (patch) | |
tree | 10e065b59c0baa6043662019f2b7874ac78aabdd /libs/ardour | |
parent | 6e80a7abc0209383f2c2d9f7fb9fb3525f7d6728 (diff) |
use regex to match [mM][iI][dD] file extension for MIDI files, thus making it case-insensitive (fixes #5231)
git-svn-id: svn://localhost/ardour2/branches/3.0@13855 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/smf_source.h | 2 | ||||
-rw-r--r-- | libs/ardour/smf_source.cc | 18 |
2 files changed, 18 insertions, 2 deletions
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index b94ffb250f..26437c6c24 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -45,7 +45,7 @@ public: virtual ~SMFSource (); - bool safe_file_extension (const std::string& path) const { + bool safe_file_extension (const std::string& path) const { return safe_midi_file_extension(path); } diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index e0462efb08..626676ea83 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -24,6 +24,7 @@ #include <sys/stat.h> #include <unistd.h> #include <errno.h> +#include <regex.h> #include "pbd/pathscanner.h" #include "pbd/stl_delete.h" @@ -449,7 +450,22 @@ SMFSource::mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::Musical bool SMFSource::safe_midi_file_extension (const string& file) { - return (file.rfind(".mid") != string::npos) || (file.rfind (".MID") != string::npos); + static regex_t compiled_pattern; + static bool compile = true; + const int nmatches = 2; + regmatch_t matches[nmatches]; + + if (compile && regcomp (&compiled_pattern, "[mM][iI][dD]$", REG_EXTENDED)) { + return false; + } else { + compile = false; + } + + if (regexec (&compiled_pattern, file.c_str(), nmatches, matches, 0)) { + return false; + } + + return true; } void |