/usr/include/machine/atomic.h is not C++ safe

Pavlin Radoslavov pavlin at icir.org
Sat Sep 30 23:16:53 PDT 2006


Header file /usr/include/machine/atomic.h
(src/sys/i386/include/atomic.h in the source tree) is not C++ safe,
because it contains a variable named "new" which is a C++ keyword.

This file is indirectly included by header files like
<netinet/if_ether.h> therefore such files cannot be used by a C++
program.

The simple patch included below shows the location of the
problematic variable.

Thanks,
Pavlin

P.S. I am not on the mailing list, hence please CC me in your
replies.

--- atomic.h.org	2006-07-23 09:02:04.000000000 -0700
+++ atomic.h	2006-09-30 12:34:02.000000000 -0700
@@ -346,7 +346,7 @@
 /*
  * Atomic compare and set
  *
- * if (*dst == old) *dst = new (all 32 bit words)
+ * if (*dst == old) *dst = src (all 32 bit words)
  *
  * Returns 0 on failure, non-zero on success
  *
@@ -355,10 +355,10 @@
  * version may be used by the dynamic linker
  */
 #if defined(KLD_MODULE)
-extern int atomic_cmpset_int(volatile u_int *dst, u_int old, u_int new);
+extern int atomic_cmpset_int(volatile u_int *dst, u_int old, u_int src);
 #else
 static __inline int
-atomic_cmpset_int(volatile u_int *dst, u_int old, u_int new)
+atomic_cmpset_int(volatile u_int *dst, u_int old, u_int src)
 {
 	int res = old;
 
@@ -366,7 +366,7 @@
 			 "setz %%al; " \
 			 "movzbl %%al,%0; " \
 			 : "+a" (res), "=m" (*dst) \
-			 : "r" (new), "m" (*dst) \
+			 : "r" (src), "m" (*dst) \
 			 : "memory");
 	return res;
 }




More information about the Bugs mailing list