]> git.cworth.org Git - apitrace/blobdiff - gui/apitracecall.cpp
Deep copy the blob data.
[apitrace] / gui / apitracecall.cpp
index 67fc955957805308f71fb8b9c0ac06c37933fe4e..f500d90c8b2f62b89a12c626a62418e5a88125c8 100644 (file)
@@ -129,10 +129,10 @@ apiVariantToString(const QVariant &variant, bool multiLine)
         return variant.value<ApiBitmask>().toString();
     }
     if (variant.canConvert<ApiStruct>()) {
-        return variant.value<ApiStruct>().toString();
+        return variant.value<ApiStruct>().toString(multiLine);
     }
     if (variant.canConvert<ApiArray>()) {
-        return variant.value<ApiArray>().toString();
+        return variant.value<ApiArray>().toString(multiLine);
     }
     if (variant.canConvert<ApiEnum>()) {
         return variant.value<ApiEnum>().toString();
@@ -208,16 +208,7 @@ void VariantVisitor::visit(Trace::Array *array)
 
 void VariantVisitor::visit(Trace::Blob *blob)
 {
-    //XXX
-    //FIXME: this is a nasty hack. Trace::Blob's can't
-    //   delete the contents in the destructor because
-    //   the data is being used by other calls. We piggy back
-    //   on that assumption and don't deep copy the data. If
-    //   Blob's will start deleting the data we will need to
-    //   start deep copying it or switch to using something like
-    //   Boost's shared_ptr or Qt's QSharedPointer to handle it
-    blob->toPointer(true);
-    QByteArray barray = QByteArray::fromRawData(blob->buf, blob->size);
+    QByteArray barray = QByteArray(blob->buf, blob->size);
     m_variant = QVariant(barray);
 }
 
@@ -353,7 +344,7 @@ ApiStruct::ApiStruct(const Trace::Struct *s)
     init(s);
 }
 
-QString ApiStruct::toString() const
+QString ApiStruct::toString(bool multiLine) const
 {
     QString str;
 
@@ -361,7 +352,7 @@ QString ApiStruct::toString() const
     for (unsigned i = 0; i < m_members.count(); ++i) {
         str += m_sig.memberNames[i] %
                QLatin1Literal(" = ") %
-               apiVariantToString(m_members[i]);
+               apiVariantToString(m_members[i], multiLine);
         if (i < m_members.count() - 1)
             str += QLatin1String(", ");
     }
@@ -400,13 +391,13 @@ QVector<QVariant> ApiArray::values() const
     return m_array;
 }
 
-QString ApiArray::toString() const
+QString ApiArray::toString(bool multiLine) const
 {
     QString str;
     str += QLatin1String("[");
     for(int i = 0; i < m_array.count(); ++i) {
         const QVariant &var = m_array[i];
-        str += apiVariantToString(var);
+        str += apiVariantToString(var, multiLine);
         if (i < m_array.count() - 1)
             str += QLatin1String(", ");
     }