]> git.cworth.org Git - apitrace/commitdiff
Accept zero valued bitmasks.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 13 Apr 2011 16:37:41 +0000 (17:37 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 13 Apr 2011 16:37:41 +0000 (17:37 +0100)
When the zero valued flag appears before the non zero valued flags.

trace_model.cpp
trace_parser.cpp
trace_write.cpp

index c74aaaeee998d3c6afdf51543cd1ab8652e0886f..b083186b01bd94d26d437f359fb9df1bfd2eefe7 100644 (file)
@@ -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 << " | ";
                 }
index 3d53b8fc1864371de4cb6f407df17fbb269cf879..80519737a1268334cb565ee810097f994b933398 100644 (file)
@@ -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;
     }
index 15d1d1fd06fc18e8428ebcf52a4bc2024dffd5c9..6a44b28c231698ce8eff059f590b519d480c567d 100644 (file)
@@ -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);
         }