fix a bunch of memory leaks
[ardour.git] / libs / ardour / audio_unit.cc
index ea2e93c5a07d92717e7adf0b61e8e8083b53218f..add2407f841cfc87f9602aed7f4911c934fc3e64 100644 (file)
 #include "pbd/xml++.h"
 #include "pbd/convert.h"
 #include "pbd/whitespace.h"
-#include "pbd/pathscanner.h"
+#include "pbd/file_utils.h"
 #include "pbd/locale_guard.h"
 
 #include <glibmm/threads.h>
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
+#include <glib/gstdio.h>
 
 #include "ardour/ardour.h"
 #include "ardour/audioengine.h"
@@ -998,7 +999,7 @@ AUPlugin::output_streams() const
 }
 
 bool
-AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out) const
+AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out)
 {
        // Note: We never attempt to multiply-instantiate plugins to meet io configurations.
 
@@ -1717,6 +1718,7 @@ AUPlugin::set_state(const XMLNode& node, int version)
                return -1;
        }
 
+#ifndef NO_PLUGIN_STATE
        if (node.children().empty()) {
                return -1;
        }
@@ -1752,6 +1754,7 @@ AUPlugin::set_state(const XMLNode& node, int version)
                }
                CFRelease (propertyList);
        }
+#endif
 
        Plugin::set_state (node, version);
        return ret;
@@ -1822,7 +1825,6 @@ AUPlugin::do_save_preset (string preset_name)
        CFPropertyListRef propertyList;
        vector<Glib::ustring> v;
        Glib::ustring user_preset_path;
-       bool ret = true;
 
        std::string m = maker();
        std::string n = name();
@@ -1841,12 +1843,12 @@ AUPlugin::do_save_preset (string preset_name)
 
        if (g_mkdir_with_parents (user_preset_path.c_str(), 0775) < 0) {
                error << string_compose (_("Cannot create user plugin presets folder (%1)"), user_preset_path) << endmsg;
-               return false;
+               return string();
        }
 
        DEBUG_TRACE (DEBUG::AudioUnits, "get current preset\n");
        if (unit->GetAUPreset (propertyList) != noErr) {
-               return false;
+               return string();
        }
 
        // add the actual preset name */
@@ -1861,7 +1863,7 @@ AUPlugin::do_save_preset (string preset_name)
 
        if (save_property_list (propertyList, user_preset_path)) {
                error << string_compose (_("Saving plugin state to %1 failed"), user_preset_path) << endmsg;
-               ret = false;
+               return string();
        }
 
        CFRelease(propertyList);
@@ -2047,20 +2049,19 @@ AUPlugin::current_preset() const
 void
 AUPlugin::find_presets ()
 {
-       vector<string*>* preset_files;
-       PathScanner scanner;
+       vector<string> preset_files;
 
        user_preset_map.clear ();
 
-       preset_files = scanner (preset_search_path, au_preset_filter, this, true, true, -1, true);
+       find_files_matching_filter (preset_files, preset_search_path, au_preset_filter, this, true, true, true);
 
-       if (!preset_files) {
+       if (preset_files.empty()) {
                return;
        }
 
-       for (vector<string*>::iterator x = preset_files->begin(); x != preset_files->end(); ++x) {
+       for (vector<string>::iterator x = preset_files.begin(); x != preset_files.end(); ++x) {
 
-               string path = *(*x);
+               string path = *x;
                string preset_name;
 
                /* make an initial guess at the preset name using the path */
@@ -2077,11 +2078,8 @@ AUPlugin::find_presets ()
                        user_preset_map[preset_name] = path;
                }
 
-               delete *x;
        }
 
-       delete preset_files;
-
        /* now fill the vector<string> with the names we have */
 
        for (UserPresetMap::iterator i = user_preset_map.begin(); i != user_preset_map.end(); ++i) {
@@ -2276,6 +2274,7 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip
                }
 
                AUPluginInfo::get_names (temp, info->name, info->creator);
+               ARDOUR::PluginScanMessage(_("AU"), info->name, false);
 
                info->type = ARDOUR::AudioUnit;
                info->unique_id = stringify_descriptor (*info->descriptor);
@@ -2452,7 +2451,7 @@ AUPluginInfo::save_cached_info ()
 
        if (!tree.write (path)) {
                error << string_compose (_("could not save AU cache to %1"), path) << endmsg;
-               ::g_unlink (path.c_str());
+               g_unlink (path.c_str());
        }
 }