]> sigrok.org Git - pulseview.git/blobdiff - pv/device/file.cpp
Fix double-free issue in File::create
[pulseview.git] / pv / device / file.cpp
index 190b53846bc08071d60df99cd1e759b070b060be..368276a4ba8d8e1ce10e443ab645f9d19e3cad3c 100644 (file)
  */
 
 #include "file.h"
-#include "inputfile.h"
 #include "sessionfile.h"
 
+#include <boost/filesystem.hpp>
+
 #include <libsigrok/libsigrok.h>
 
+using std::make_pair;
+using std::map;
 using std::string;
 
 namespace pv {
@@ -36,15 +39,28 @@ File::File(const std::string path) :
 
 std::string File::format_device_title() const
 {
-       return _path;
+       return boost::filesystem::path(_path).filename().string();
+}
+
+map<string, string> File::get_device_info() const
+{
+       map<string, string> result;
+
+       result.insert(make_pair("vendor", "sigrok"));
+       result.insert(make_pair("model", "file"));
+       result.insert(make_pair("connection_id",
+                       boost::filesystem::path(_path).filename().string()));
+
+       return result;
 }
 
 File* File::create(const string &name)
 {
-       if (sr_session_load(name.c_str()) == SR_OK) {
+       struct sr_session *temp_session;
+       if (sr_session_load(name.c_str(), &temp_session) == SR_OK) {
                GSList *devlist = NULL;
-               sr_session_dev_list(&devlist);
-               sr_session_destroy();
+               sr_session_dev_list(temp_session, &devlist);
+               sr_session_destroy(temp_session);
 
                if (devlist) {
                        sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data;
@@ -57,7 +73,7 @@ File* File::create(const string &name)
                }
        }
 
-       return new InputFile(name);
+       return NULL;
 }
 
 } // device