summaryrefslogtreecommitdiffstats
path: root/src/SMFReader.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-04-02 00:26:21 +0000
committerDavid Robillard <d@drobilla.net>2007-04-02 00:26:21 +0000
commita23b21908e4d0fab277a9f6f7d5a3b5a69746740 (patch)
treea12085c9eb5873d48ecf08ffe030fa2b459d6ef6 /src/SMFReader.cpp
parent69559bddc0ae41f1f81241d92675009f86fa79b1 (diff)
downloadraul-a23b21908e4d0fab277a9f6f7d5a3b5a69746740.tar.gz
raul-a23b21908e4d0fab277a9f6f7d5a3b5a69746740.tar.bz2
raul-a23b21908e4d0fab277a9f6f7d5a3b5a69746740.zip
List appending.
Make SMFReader abort gracefully on non-SMF files. git-svn-id: http://svn.drobilla.net/lad/raul@389 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/SMFReader.cpp')
-rw-r--r--src/SMFReader.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/SMFReader.cpp b/src/SMFReader.cpp
index 56232cf..a267e48 100644
--- a/src/SMFReader.cpp
+++ b/src/SMFReader.cpp
@@ -97,6 +97,19 @@ SMFReader::open(const string& filename)
if (_fd) {
// Read type (bytes 8..9)
+ fseek(_fd, 0, SEEK_SET);
+ char mthd[5];
+ mthd[4] = '\0';
+ fread(mthd, 1, 4, _fd);
+ if (strcmp(mthd, "MThd")) {
+ cerr << "File is not an SMF file, aborting." << endl;
+ fclose(_fd);
+ _fd = NULL;
+ return false;
+ }
+
+
+ // Read type (bytes 8..9)
fseek(_fd, 8, SEEK_SET);
uint16_t type_be = 0;
fread(&type_be, 2, 1, _fd);
@@ -153,7 +166,7 @@ SMFReader::seek_to_track(unsigned track)
if (!strcmp(id, "MTrk")) {
++track_pos;
- std::cerr << "Found track " << track_pos << endl;
+ //std::cerr << "Found track " << track_pos << endl;
} else {
std::cerr << "Unknown chunk ID " << id << endl;
}