summaryrefslogtreecommitdiff
path: root/libs/ardour/smf_source.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-01-16 17:09:52 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2013-01-16 17:09:52 +0000
commite2ec54216b921c005a96f890c0e8b23c39860e7f (patch)
tree10e065b59c0baa6043662019f2b7874ac78aabdd /libs/ardour/smf_source.cc
parent6e80a7abc0209383f2c2d9f7fb9fb3525f7d6728 (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/smf_source.cc')
-rw-r--r--libs/ardour/smf_source.cc18
1 files changed, 17 insertions, 1 deletions
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