File 0798-odbc-Don-t-want-for-stringop-truncation.patch of Package erlang

From a7641178eb999b1f74c51690d9ccac130c1ef8d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lukas=20Backstr=C3=B6m?= <lukas@erlang.org>
Date: Mon, 28 Oct 2024 11:04:27 +0100
Subject: [PATCH 08/10] odbc: Don't want for stringop-truncation

---
 lib/odbc/c_src/odbcserver.c | 11 +++++++++--
 lib/odbc/configure          | 25 +++++++++++++++++++++++++
 lib/odbc/configure.ac       | 12 ++++++++++++
 3 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c
index e99f16624e..f415a7c083 100644
--- a/lib/odbc/c_src/odbcserver.c
+++ b/lib/odbc/c_src/odbcserver.c
@@ -645,8 +645,15 @@ static db_result_msg db_query(byte *sql, db_state *state)
 	    diagnos =  get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state));
 	    if(strcmp((char *)diagnos.sqlState, INFO) == 0) { 
 		    is_error[0] = 0;
-		    strncat((char *)is_error, (char *)diagnos.error_msg, 
-			    5);
+#ifdef HAVE_GCC_DIAG_IGNORE_WSTRINGOP_TRUNCATION
+_Pragma("GCC diagnostic push");
+_Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"");
+#endif
+		    strncat((char *)is_error, (char *)diagnos.error_msg,
+                            5);
+#ifdef HAVE_GCC_DIAG_IGNORE_WSTRINGOP_TRUNCATION
+_Pragma("GCC diagnostic pop");
+#endif
 		    str_tolower((char *)&is_error, 5);
 		    /* The ODBC error handling could have been more
 		       predictable but alas ... we try to make the best of
diff --git a/lib/odbc/configure b/lib/odbc/configure
index e43c587ccc..aad3e08706 100755
--- a/lib/odbc/configure
+++ b/lib/odbc/configure
@@ -5864,6 +5864,31 @@ fi
 
 
 fi
+saved_CFLAGS="$CFLAGS"
+CFLAGS="-Werror $CFLAGS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+_Pragma("GCC diagnostic push")
+         _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
+         _Pragma("GCC diagnostic pop")
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define HAVE_GCC_DIAG_IGNORE_WSTRINGOP_TRUNCATION 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+CFLAGS="$saved_CFLAGS"
+
 if test "x$GCC" = xyes
 then :
 
diff --git a/lib/odbc/configure.ac b/lib/odbc/configure.ac
index 19abc17670..75cd3b3148 100644
--- a/lib/odbc/configure.ac
+++ b/lib/odbc/configure.ac
@@ -252,6 +252,18 @@ AC_SUBST(ODBC_INCLUDE)
 
  ]) dnl "$with_odbc" != "no"
 
+dnl ----------------------------------------------------------------------
+dnl Check for GCC diagnostic ignored "-Wstringop-truncation"
+dnl ----------------------------------------------------------------------
+saved_CFLAGS="$CFLAGS"
+CFLAGS="-Werror $CFLAGS"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[_Pragma("GCC diagnostic push")
+         _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"")
+         _Pragma("GCC diagnostic pop")
+         ]])],[AC_DEFINE(HAVE_GCC_DIAG_IGNORE_WSTRINGOP_TRUNCATION,1,
+           define if compiler support _Pragma('GCC diagnostic ignored '-Wstringop-truncation''))],[])
+CFLAGS="$saved_CFLAGS"
+
 AS_IF([test "x$GCC" = xyes],
   [
     # Treat certain GCC warnings as errors
-- 
2.43.0

openSUSE Build Service is sponsored by