[apparmor] [Patch apparmor 2.8] Fix parser build error on older C++ compilers

John Johansen john.johansen at canonical.com
Mon May 28 10:37:01 UTC 2012


Older C++ compilers complain about the use of a class with a non trivial
constructor in a union.  Change the ProtoState class to use an init fn
instead of a constructor.

=== modified file 'parser/libapparmor_re/hfa.cc'
--- parser/libapparmor_re/hfa.cc	2012-03-22 20:21:55 +0000
+++ parser/libapparmor_re/hfa.cc	2012-05-28 10:32:39 +0000
@@ -101,7 +101,8 @@
 	nnodev = nnodes_cache.insert(nnodes);
 	anodes = anodes_cache.insert(anodes);
 
-	ProtoState proto(nnodev, anodes);
+	ProtoState proto;
+	proto.init(nnodev, anodes);
 	State *state = new State(node_map.size(), proto, other);
 	pair<NodeMap::iterator,bool> x = node_map.insert(proto, state);
 	if (x.second == false) {

=== modified file 'parser/libapparmor_re/hfa.h'
--- parser/libapparmor_re/hfa.h	2012-03-22 20:21:55 +0000
+++ parser/libapparmor_re/hfa.h	2012-05-28 10:01:26 +0000
@@ -310,7 +310,15 @@
 	hashedNodeVec *nnodes;
 	NodeSet *anodes;
 
-	ProtoState(hashedNodeVec *n, NodeSet *a = NULL): nnodes(n), anodes(a) { };
+	/* init is used instead of a constructor because ProtoState is used
+	 * in a union
+	 */
+	void init(hashedNodeVec *n, NodeSet *a = NULL)
+	{
+		nnodes = n;
+		anodes = a;
+	}
+
 	bool operator<(ProtoState const &rhs)const
 	{
 		if (nnodes == rhs.nnodes)
@@ -338,7 +346,7 @@
  * parition: Is a temporary work variable used during dfa minimization.
  *           it can be replaced with a map, but that is slower and uses more
  *           memory.
- * nodes: Is a temporary work variable used during dfa creation.  It can
+ * proto: Is a temporary work variable used during dfa creation.  It can
  *        be replaced by using the nodemap, but that is slower
  */
 class State {
@@ -379,8 +387,8 @@
 
 	/* temp storage for State construction */
 	union {
-		Partition *partition;
-		ProtoState proto;
+		Partition *partition;	/* used during minimization */
+		ProtoState proto;	/* used during creation */
 	};
 };
 



More information about the AppArmor mailing list