From 1c70e4393e5231a17cc83b8ef2d9801021e09d3d Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Thu, 15 Nov 2007 02:31:09 +0000 Subject: 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 --- libs/ardour/import.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libs') 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 > newfiles; SF_INFO info; float *data = 0; @@ -74,7 +73,9 @@ Session::import_audiofile (import_status& status) for (vector::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 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; -- cgit v1.2.3