From: <sv...@va...> - 2008-06-10 20:14:23
|
Author: cerion Date: 2008-06-10 02:44:12 +0100 (Tue, 10 Jun 2008) New Revision: 433 Log: Fix xml parsing of <dir>/<file> In particular: - <dir> may be null, and dir be within <file> - allow for different ordering of fields Modified: trunk/valkyrie/tool_utils/vglog.cpp trunk/valkyrie/tool_views/vglogview.cpp Modified: trunk/valkyrie/tool_utils/vglog.cpp =================================================================== --- trunk/valkyrie/tool_utils/vglog.cpp 2008-06-10 00:30:28 UTC (rev 432) +++ trunk/valkyrie/tool_utils/vglog.cpp 2008-06-10 01:44:12 UTC (rev 433) @@ -226,21 +226,21 @@ { QDomNodeList frame_details1 = childNodes(); assert( frame_details1.count() >= 1 ); /* only ip guaranteed */ - QDomElement iptr1 = frame_details1.item( 0 ).toElement(); - QDomElement objt1 = frame_details1.item( 1 ).toElement(); - QDomElement func1 = frame_details1.item( 2 ).toElement(); - QDomElement diry1 = frame_details1.item( 3 ).toElement(); - QDomElement file1 = frame_details1.item( 4 ).toElement(); - QDomElement line1 = frame_details1.item( 5 ).toElement(); + QDomElement iptr1 = getFirstElem( "ip" ); + QDomElement objt1 = getFirstElem( "obj" ); + QDomElement func1 = getFirstElem( "fn" ); + QDomElement diry1 = getFirstElem( "dir" ); + QDomElement file1 = getFirstElem( "file" ); + QDomElement line1 = getFirstElem( "line" ); QDomNodeList frame_details2 = frame2.childNodes(); assert( frame_details2.count() >= 1 ); /* only ip guaranteed */ - QDomElement iptr2 = frame_details2.item( 0 ).toElement(); - QDomElement objt2 = frame_details2.item( 1 ).toElement(); - QDomElement func2 = frame_details2.item( 2 ).toElement(); - QDomElement diry2 = frame_details2.item( 3 ).toElement(); - QDomElement file2 = frame_details2.item( 4 ).toElement(); - QDomElement line2 = frame_details2.item( 5 ).toElement(); + QDomElement iptr2 = frame2.getFirstElem( "ip" ); + QDomElement objt2 = frame2.getFirstElem( "obj" ); + QDomElement func2 = frame2.getFirstElem( "fn" ); + QDomElement diry2 = frame2.getFirstElem( "dir" ); + QDomElement file2 = frame2.getFirstElem( "file" ); + QDomElement line2 = frame2.getFirstElem( "line" ); /* a frame may be the 'same' as another even if it is missing some data - do the best comparison we can */ @@ -299,12 +299,12 @@ { QDomNodeList frame_details = childNodes(); assert( frame_details.count() >= 1 ); /* only ip guaranteed */ - QDomElement ip = frame_details.item( 0 ).toElement(); - QDomElement obj = frame_details.item( 1 ).toElement(); - QDomElement fn = frame_details.item( 2 ).toElement(); - QDomElement dir = frame_details.item( 3 ).toElement(); - QDomElement srcloc = frame_details.item( 4 ).toElement(); - QDomElement line = frame_details.item( 5 ).toElement(); + QDomElement ip = getFirstElem( "ip" ); + QDomElement obj = getFirstElem( "obj" ); + QDomElement fn = getFirstElem( "fn" ); + QDomElement dir = getFirstElem( "dir" ); + QDomElement srcloc = getFirstElem( "file" ); + QDomElement line = getFirstElem( "line" ); bool know_fnname = !fn.isNull(); bool know_objname = !obj.isNull(); Modified: trunk/valkyrie/tool_views/vglogview.cpp =================================================================== --- trunk/valkyrie/tool_views/vglogview.cpp 2008-06-10 00:30:28 UTC (rev 432) +++ trunk/valkyrie/tool_views/vglogview.cpp 2008-06-10 01:44:12 UTC (rev 433) @@ -565,12 +565,15 @@ : VgOutputItem( parent, after, frm ) { /* check what perms the user has w.r.t. this file */ - QDomNodeList frame_details = frm.childNodes(); - QDomElement srcdir = frame_details.item( 3 ).toElement(); - QDomElement srcfile = frame_details.item( 4 ).toElement(); + QDomElement srcdir = frm.getFirstElem( "dir" ); + QDomElement srcfile = frm.getFirstElem( "file" ); - if (!srcdir.isNull() && !srcfile.isNull()) { - QString path = srcdir.text() + "/" + srcfile.text(); + if ( !srcfile.isNull() ) { + QString path; + if ( !srcdir.isNull() ) + path = srcdir.text() + "/"; + path += srcfile.text(); + QFileInfo fi( path ); if ( fi.exists() && fi.isFile() && !fi.isSymLink() ) { isReadable = fi.isReadable(); @@ -585,16 +588,21 @@ void FrameItem::setOpen( bool open ) { if ( open && childCount() == 0 && isReadable ) { + QDomElement srcdir = elem.getFirstElem( "dir" ); + QDomElement srcfile = elem.getFirstElem( "file" ); + QDomElement line = elem.getFirstElem( "line" ); - QDomNodeList frame_details = elem.childNodes(); - QDomElement srcdir = frame_details.item( 3 ).toElement(); - QDomElement srcfile = frame_details.item( 4 ).toElement(); - QDomElement line = frame_details.item( 5 ).toElement(); + if ( srcfile.isNull() ) + return; - if (srcdir.isNull() || srcfile.isNull()) + QString path; + if ( !srcdir.isNull() ) + path = srcdir.text() + "/"; + path += srcfile.text(); + + if ( !QFile::exists( path ) ) return; - QString path = srcdir.text() + "/" + srcfile.text(); VgElement srcline = (VgElement&)line; /* create the item for the src lines */ |