From 9bde72eb176831d6d4b185ec7880ec35e61147f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Wed, 13 Apr 2011 17:37:41 +0100 Subject: [PATCH] Accept zero valued bitmasks. When the zero valued flag appears before the non zero valued flags. --- trace_model.cpp | 4 ++-- trace_parser.cpp | 4 +++- trace_write.cpp | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/trace_model.cpp b/trace_model.cpp index c74aaae..b083186 100644 --- a/trace_model.cpp +++ b/trace_model.cpp @@ -236,8 +236,8 @@ public: const Bitmask::Signature *sig = bitmask->sig; bool first = true; for (Bitmask::Signature::const_iterator it = sig->begin(); value != 0 && it != sig->end(); ++it) { - assert(it->second); - if ((value & it->second) == it->second) { + if ((it->second && (value & it->second) == it->second) || + (!it->second && value == 0)) { if (!first) { os << " | "; } diff --git a/trace_parser.cpp b/trace_parser.cpp index 3d53b8f..8051973 100644 --- a/trace_parser.cpp +++ b/trace_parser.cpp @@ -282,7 +282,9 @@ Value *Parser::parse_bitmask() { for (Bitmask::Signature::iterator it = sig->begin(); it != sig->end(); ++it) { it->first = read_string(); it->second = read_uint(); - assert(it->second); + if (it->second == 0 && it != sig->begin()) { + std::cerr << "warning: bitmask " << it->first << " is zero but is not first flag\n"; + } } bitmasks[id] = sig; } diff --git a/trace_write.cpp b/trace_write.cpp index 15d1d1f..6a44b28 100644 --- a/trace_write.cpp +++ b/trace_write.cpp @@ -315,6 +315,9 @@ void LiteralBitmask(const BitmaskSig &bitmask, unsigned long long value) { if (!lookup(bitmasks, bitmask.id)) { WriteUInt(bitmask.count); for (unsigned i = 0; i < bitmask.count; ++i) { + if (i != 0 && bitmask.values[i].value == 0) { + OS::DebugMessage("apitrace: bitmask %s is zero but is not first flag\n", bitmask.values[i].name); + } WriteString(bitmask.values[i].name); WriteUInt(bitmask.values[i].value); } -- 2.43.0