File 0001-Fix-C11-atomics-detection-and-buggy-macros-for-C-com.patch of Package libfyaml

From 1026d76850909dc9b1c5f95b8cd94e865a313fd5 Mon Sep 17 00:00:00 2001
From: Nanda H Krishna <me@nandahkrishna.com>
Date: Sun, 15 Mar 2026 17:56:13 -0400
Subject: [PATCH] Fix C11 atomics detection and buggy macros for C++
 compatibility

---
 include/libfyaml/libfyaml-atomics.h | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/include/libfyaml/libfyaml-atomics.h b/include/libfyaml/libfyaml-atomics.h
index 54d88ae..64142a8 100644
--- a/include/libfyaml/libfyaml-atomics.h
+++ b/include/libfyaml/libfyaml-atomics.h
@@ -78,7 +78,7 @@ extern "C" {
 #if !defined(FY_HAVE_C11_ATOMICS)
 #undef FY_HAVE_STDATOMIC_H
 
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(__cplusplus)
 #define FY_HAVE_C11_ATOMICS
 #elif defined(__clang__) && defined(__has_extension)
 #if __has_extension(c_atomic)
@@ -123,7 +123,7 @@ typedef bool atomic_flag;
 
 #define atomic_store(_ptr, _val) \
 	do { \
-		*(_obj) = (_val); \
+		*(_ptr) = (_val); \
 	} while(0)
 
 #define atomic_exchange(_ptr, _v) \
@@ -152,6 +152,7 @@ typedef bool atomic_flag;
 
 #define atomic_fetch_add(_ptr, _v) \
 	({ \
+		__typeof__(_ptr) __ptr = (_ptr); \
 		__typeof__(*(_ptr)) __old = *__ptr; \
 		*__ptr += (_v); \
 		__old; \
@@ -159,6 +160,7 @@ typedef bool atomic_flag;
 
 #define atomic_fetch_sub(_ptr, _v) \
 	({ \
+		__typeof__(_ptr) __ptr = (_ptr); \
 		__typeof__(*(_ptr)) __old = *__ptr; \
 		*__ptr -= (_v); \
 		__old; \
@@ -166,6 +168,7 @@ typedef bool atomic_flag;
 
 #define atomic_fetch_or(_ptr, _v) \
 	({ \
+		__typeof__(_ptr) __ptr = (_ptr); \
 		__typeof__(*(_ptr)) __old = *__ptr; \
 		*__ptr |= (_v); \
 		__old; \
@@ -173,6 +176,7 @@ typedef bool atomic_flag;
 
 #define atomic_fetch_xor(_ptr, _v) \
 	({ \
+		__typeof__(_ptr) __ptr = (_ptr); \
 		__typeof__(*(_ptr)) __old = *__ptr; \
 		*__ptr ^= (_v); \
 		__old; \
@@ -180,6 +184,7 @@ typedef bool atomic_flag;
 
 #define atomic_fetch_and(_ptr, _v) \
 	({ \
+		__typeof__(_ptr) __ptr = (_ptr); \
 		__typeof__(*(_ptr)) __old = *__ptr; \
 		*__ptr &= (_v); \
 		__old; \
@@ -199,13 +204,14 @@ typedef bool atomic_flag;
 #define atomic_flag_test_and_set(_ptr) \
 	({ \
 		volatile atomic_flag *__ptr = (_ptr); \
+		bool __ret; \
 		if (!*__ptr) { \
 			*__ptr = true; \
 			__ret = true; \
 		} else \
 			__ret = false; \
 		__ret; \
-	}
+	})
 
 #endif
 
-- 
2.53.0

openSUSE Build Service is sponsored by