summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2007-11-15 02:31:09 +0000
committerTim Mayberry <mojofunk@gmail.com>2007-11-15 02:31:09 +0000
commit1c70e4393e5231a17cc83b8ef2d9801021e09d3d (patch)
tree536ff95201e34d0de157669f7bed4b2513832cda /libs
parent108e924ad59f097debfc0575f4e5801427de0ba8 (diff)
Use boost::shared_ptr for RAII with a SNDFILE handle in Session::import_audiofile
A scoped_ptr would be more suitable and efficient but scoped_ptr doesn't support a custom deleter function(sf_close in this case), there are ways around that limitation but I don't think it is worth doing at this point as it requires more code etc. git-svn-id: svn://localhost/ardour2/trunk@2656 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/import.cc10
1 files changed, 5 insertions, 5 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index bd6351cf05..aaf0057b84 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -53,7 +53,6 @@ using namespace PBD;
int
Session::import_audiofile (import_status& status)
{
- SNDFILE *in;
vector<boost::shared_ptr<AudioFileSource> > newfiles;
SF_INFO info;
float *data = 0;
@@ -74,7 +73,9 @@ Session::import_audiofile (import_status& status)
for (vector<Glib::ustring>::iterator p = status.paths.begin(); p != status.paths.end(); ++p, ++cnt) {
- if ((in = sf_open ((*p).c_str(), SFM_READ, &info)) == 0) {
+ boost::shared_ptr<SNDFILE> in (sf_open (p->c_str(), SFM_READ, &info), sf_close);
+
+ if (!in) {
error << string_compose(_("Import: cannot open input sound file \"%1\""), (*p)) << endmsg;
status.done = 1;
status.cancel = 1;
@@ -82,9 +83,9 @@ Session::import_audiofile (import_status& status)
}
if ((nframes_t) info.samplerate != frame_rate()) {
- importable = new ResampledImportableSource (in, &info, frame_rate(), status.quality);
+ importable = new ResampledImportableSource (in.get(), &info, frame_rate(), status.quality);
} else {
- importable = new ImportableSource (in, &info);
+ importable = new ImportableSource (in.get(), &info);
}
newfiles.clear ();
@@ -261,7 +262,6 @@ Session::import_audiofile (import_status& status)
delete importable;
}
- sf_close (in);
status.done = true;
return ret;